Hola usuario de nuestra página web, tenemos la solución a tu pregunta, has scroll y la verás más abajo.
Solución:
Es bastante fácil hacer un escaneo en la línea de comandos. Las páginas de manual son sus amigas aquí (consulte iwconfig y iwlist). Pero usar la interfaz C es un poco más difícil, así que me concentraré en eso.
En primer lugar, como han mencionado otras personas, definitivamente descargue el código fuente de las herramientas inalámbricas. Toda la documentación de la interfaz de programación se encuentra en el .C archivos. Por lo que puedo decir, no hay documentación web para la API. Sin embargo, el código fuente es bastante fácil de leer. Prácticamente solo necesitas iwlib.h y iwlib.c para esta pregunta.
Mientras puedes usar iw_set_ext
y iw_get_ext
, el libiw implementa una función de escaneo básica iw_scan
, del cual puede extraer la mayor parte de la información que necesita.
Aquí hay un programa simple para obtener el ESSID para todas las redes inalámbricas disponibles. Compilar con -liw
y corre con sudo
.
#include
#include
#include
int main(void)
wireless_scan_head head;
wireless_scan *result;
iwrange range;
int sock;
/* Open socket to kernel */
sock = iw_sockets_open();
/* Get some metadata to use for scanning */
if (iw_get_range_info(sock, "wlan0", &range) < 0)
printf("Error during iw_get_range_info. Aborting.n");
exit(2);
/* Perform the scan */
if (iw_scan(sock, "wlan0", range.we_version_compiled, &head) < 0)
printf("Error during iw_scan. Aborting.n");
exit(2);
/* Traverse the results */
result = head.result;
while (NULL != result)
printf("%sn", result->b.essid);
result = result->next;
exit(0);
DESCARGO DE RESPONSABILIDAD: Este es solo un programa de demostración. Es posible que algunos resultados no tengan un essid. Además, esto supone que su interfaz inalámbrica es “wlan0”. Entiendes la idea.
Leer el iwlib ¡código fuente!
El paquete de herramientas inalámbricas, del cual iwlist forma parte, también contiene una biblioteca auxiliar de herramientas inalámbricas. Necesitas incluir iwlib.h y enlazar con libiw.a (es decir, agregue -liw). Luego busque la documentación para el iw_set_ext función. El SIOCSIWSCAN será de mayor utilidad. Para ver un ejemplo de cómo usar esta interfaz, eche un vistazo a la fuente de KWifiManager en la biblioteca de KDE (vea: Método Interface_wireless_wirelessextensions :: get_available_networks). Alternativamente, también puede descargar el código fuente de Wireless Tools y ver cómo la función iwlib iw_set_ext también se usa para escanear en iwlist.c.
En cuanto a los privilegios, imagino que el proceso deberá ejecutarse como root para realizar el escaneo. Me encantaría saber si esto también se podría hacer de otra manera.
Dado que está utilizando Ubuntu 8.04, el paquete libiw-dev debería ser útil.
Puedes usar nmcli
que no requiere permisos de root o nombre de interfaz WIFI.
nmcli -t -f ssid dev wifi
Si crees que te ha sido de provecho nuestro post, sería de mucha ayuda si lo compartieras con más entusiastas de la programación y nos ayudes a difundir este contenido.