5

ルート権限なしで現在のワイヤレスSSIDを取得する方法はありますか?

iwconfigはESSIDを教えてくれますが、rootとして実行した場合に限ります。

4

1 に答える 1

6

iwconfig( wireless_tools )のソース コードを見ると、次の行が表示されます。

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

この行は、ESSID ( wireless.h )の取得を担当します。そして、ルートのみがこれを行う権限を(すぐに)持っていると思うので、呼び出す関数( fromパッケージiw_get_extで定義)は( )を返します。iwlib.hwireless_toolsioctlEPERMOperation 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 つの解決策があります。

  1. を使用しsetuidて、ユーザーがiwconfigコマンドを使用できるようにします。

    sudo chmod u+s /sbin/iwconfig

  2. 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

そして結果を比較します。

于 2012-09-02T03:16:48.167 に答える