ルート権限なしで現在のワイヤレスSSIDを取得する方法はありますか?
iwconfigはESSIDを教えてくれますが、rootとして実行した場合に限ります。
iwconfig
( wireless_tools )のソース コードを見ると、次の行が表示されます。
iwconfig.c:639: if(iw_get_ext(skfd, ifname, SIOCGIWESSID, &wrq) < 0)
この行は、ESSID ( wireless.h )の取得を担当します。そして、ルートのみがこれを行う権限を(すぐに)持っていると思うので、呼び出す関数( fromパッケージiw_get_ext
で定義)は( )を返します。iwlib.h
wireless_tools
ioctl
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, ifname, 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://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
そして結果を比較します。