微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux的:如何获得无线ssid没有根权限?

有没有任何方法来获得当前无线SSID没有根权限?

iwconfig告诉我ESSID,但只有当我运行它作为根。

如果你看看iwconfig ( wireless_tools )的源代码,你会看到这一行:

iwconfig.c:639: if(iw_get_ext(skfd,ifname,SIocgIWESSID,&wrq) < 0)

这一行负责获取ESSID( wireless.h )。 而且我认为只有root拥有这个权限,所以调用ioctl的函数iw_get_ext (在iwlib.h定义的来自wireless_tools包)将返回EPERM ( Operation not permitted )。

/*------------------------------------------------------------------*/ /* * Wrapper to extract some Wireless Parameter out of the driver */ static inline int iw_get_ext(int skfd,/* Socket to the kernel */ const char * ifname,/* Device name */ int request,/* WE ID */ struct iwreq * pwrq) /* Fixed part of the request */ { /* Set device name */ strncpy(pwrq->ifr_name,IFNAMSIZ); /* Do the request */ return(ioctl(skfd,request,pwrq)); }

你有两个解决方案:

使用setuid允许用户使用iwconfig命令:

sudo chmod u+s /sbin/iwconfig

您还可以尝试使用CAP_NET_ADMIN功能进行一些黑客行为,这些功能允许特定用户使用某些特定功能。 这里有一些关于CAP_NET_ADMIN链接

http://packetlife.net/blog/2010/mar/19/sniffing-wireshark-non-root-user/

http://peternixon.net/news/2012/01/28/configure-tcpdump-work-non-root-user-opensuse-using-file-system-capabilities/

http://www.lids.org/lids-howto/node48.html

http://lwn.net/Articles/430462/

最后,您可以使用strace来跟踪所有的系统调用,并确认ioctl调用是负责的:

作为root做到这一点:

#strace /sbin/iwconfig your_interface_name > strace_iwconfig_root.log

普通用户一样

$strace /sbin/iwconfig your_interface_name > strace_iwconfig_normal.log

并比较结果。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐