iwconfig告诉我ESSID,但前提是我以root身份运行它.
解决方法 如果你看一下iwconfig( wireless_tools)的源代码,你会看到这一行:iwconfig.c:639: if(iw_get_ext(skfd,ifname,SIocgIWESSID,&wrq) < 0)
该行负责获取ESSID(wireless.h).我认为只有root才有权限(开箱即用)来执行此 *** 作,因此调用ioctl的函数iw_get_ext(在wireless_tools包的iwlib.h中定义)将返回EPERM(不允许 *** 作).
/*------------------------------------------------------------------*//* * Wrapper to extract some Wireless Parameter out of the driver */static inline intiw_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));}
你有2个解决方案:
>使用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
并比较结果.
总结以上是内存溢出为你收集整理的linux:如何在没有root权限的情况下获得无线ssid?全部内容,希望文章能够帮你解决linux:如何在没有root权限的情况下获得无线ssid?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)