2012-09-01 20 views
5

C'è un modo per ottenere l'SSID wireless corrente senza il permesso di root?linux: come ottenere ssid wireless senza permesso di root?

Iwconfig mi dice ESSID, ma solo se lo eseguo come root.

+0

Cosa succede se lo si esegue come utente normale? Quale distribuzione Linux usi? Inoltre, potresti trovare [unix.se] un sito più adatto per tali domande. –

risposta

4

Se si dà un'occhiata al codice sorgente del iwconfig (wireless_tools), vedrete questa linea:

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

Questa linea è responsabile per il get di ESSID (wireless.h). E penso che solo root abbia i permessi (pronti all'uso) per fare questo, quindi la funzione iw_get_ext (definita nel pacchetto iwlib.h dal pacchetto wireless_tools) che chiama ioctl restituirà 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)); 
} 

Hai 2 soluzioni:

  1. utilizzare il setuid per consentire all'utente di utilizzare iwconfig comando:

    sudo chmod u+s /sbin/iwconfig

  2. Si può anche provare a fare un po 'di hacking con la capacità CAP_NET_ADMIN che consente alcune funzionalità specifiche a un utente specifico. Ecco alcuni collegamenti con 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/

Infine è possibile utilizzare strace di tracciare tutte le chiamate di sistema e per confermare che ioctl chiamata è Là sponsabile di questo:

come root fare questo:

#strace /sbin/iwconfig your_interface_name > strace_iwconfig_root.log 

E lo stesso normale utente:

$strace /sbin/iwconfig your_interface_name > strace_iwconfig_normal.log 

e confrontare i risultati.

+0

Ottimo! chmod u + s o fare qualcosa con CAP_NET_ADMIN e CAP_NET_ADMIN funzionano entrambi molto bene. Grazie mille! – npcode

+0

@npcode: ok grazie, prego. – TOC

+0

È possibile aggirare questo problema se 'network-manager' è installato nel sistema. Quindi puoi (a seconda della versione) usare 'nm-tool' o' nmctl'. La mia libreria di geolocalizzazione ha un codice di esempio, vedi: https://github.com/privatwolke/geolocation –