有没有任何方法来获得当前无线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)); }
你有两个解决方案:
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] 举报,一经查实,本站将立刻删除。