2012-09-01 8 views
5

¿Hay alguna forma de obtener el SSID inalámbrico actual sin el permiso de root?linux: ¿Cómo obtener ssid inalámbrico sin permiso de root?

iwconfig me dice ESSID, pero solo si lo ejecuto como root.

+0

¿Qué ocurre si lo ejecuta como un usuario normal? ¿Qué distribución de Linux usas? Además, puede encontrar [unix.se] un sitio más adecuado para tales preguntas. –

Respuesta

4

Si se echa un vistazo al código fuente de la iwconfig (wireless_tools), verá esta línea:

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

Esta línea es responsable de la escapada de ESSID (wireless.h). Y creo que solo root tiene permisos (listos para usar) para hacer esto, por lo que la función iw_get_ext (definida en iwlib.h del paquete wireless_tools) que llama a ioctl devolverá 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)); 
} 

usted tiene 2 soluciones:

  1. utilizar el setuid para permitir al usuario utilizar iwconfig comando:

    sudo chmod u+s /sbin/iwconfig

  2. También puede tratar de hacer un poco de piratería con la capacidad CAP_NET_ADMIN que permite algunas capacidades específicas a un usuario específico. Aquí hay varios enlaces sobre 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/

Por último, puede utilizar strace de rastrear todas las llamadas al sistema y para confirmar que ioctl llamada es ahí ponsable para esto:

como root hacer esto:

#strace /sbin/iwconfig your_interface_name > strace_iwconfig_root.log 

Y lo mismo que usuario normal:

$strace /sbin/iwconfig your_interface_name > strace_iwconfig_normal.log 

y comparar los resultados.

+0

¡Genial! Los chmod u + s o hacer algo con CAP_NET_ADMIN y CAP_NET_ADMIN funcionan bien. ¡Muchas gracias! – npcode

+0

@npcode: ok gracias, de nada. – TOC

+0

Puede solucionar esto si 'network-manager' está instalado en el sistema. Entonces puede (según la versión) usar 'nm-tool' o' nmctl'. Mi biblioteca de geolocalización tiene un código de ejemplo, ver: https://github.com/privatwolke/geolocation –

Cuestiones relacionadas