2012-09-01 24 views
5

Gibt es eine Möglichkeit, die aktuelle WLAN-SSID ohne Root-Berechtigung zu erhalten?linux: Wie bekomme ich Wireless SSID ohne Root-Berechtigung?

iwconfig sagt mir ESSID, aber nur wenn ich es als root ausführen.

+0

Was passiert, wenn Sie es als normaler Benutzer ausführen? Welche Linux-Distribution verwenden Sie? Auch finden Sie [unix.se] eine geeignetere Seite für solche Fragen. –

Antwort

4

Wenn Sie einen Blick auf den Quellcode des nehmen iwconfig (wireless_tools), werden Sie diese Zeile sehen:

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

Diese Linie ist für die get von ESSID (wireless.h). Und ich denke, dass nur root Berechtigungen (out of the Box), dies zu tun, so die Funktion iw_get_ext (definiert in iwlib.h von wireless_tools Paket), die ioctl aufrufen wird EPERM (Operation not permitted) zurückgeben.

/*------------------------------------------------------------------*/ 
/* 
* 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)); 
} 

Sie haben 2 Lösungen:

  1. die setuid Verwenden Sie dem Benutzer zu ermöglichen iwconfig Befehl zu verwenden:

    sudo chmod u+s /sbin/iwconfig

  2. Sie können auch mit etwas Hacking zu tun versuchen, die CAP_NET_ADMIN Fähigkeit, die bestimmte Fähigkeiten für einen bestimmten Benutzer ermöglichen. Hier einige Links zu 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/

Schließlich können Sie strace verwenden, um alle Systemaufrufe zu verfolgen und zu bestätigen, dass ioctl Anruf Dort sponsible hierfür:

als root dies tun:

#strace /sbin/iwconfig your_interface_name > strace_iwconfig_root.log 

Und die gleichen wie normaler Benutzer:

$strace /sbin/iwconfig your_interface_name > strace_iwconfig_normal.log 

und die Ergebnisse vergleichen.

+0

Großartig! chmod u + s oder machen etwas mit CAP_NET_ADMIN und CAP_NET_ADMIN beide funktionieren sehr gut. Vielen Dank! – npcode

+0

@npcode: ok danke, gern geschehen. – TOC

+0

Sie können das umgehen, wenn 'network-manager' auf dem System installiert ist. Dann kannst du (abhängig von der Version) 'nm-tool' oder' nmctl' verwenden. Meine Geolocation-Bibliothek hat Beispielcode, siehe: https://github.com/privatwolke/geolocation –