redes - conectar red wifi en linux
¿Cómo puedo obtener una lista de redes inalámbricas disponibles en Linux? (2)
El paquete de Herramientas inalámbricas , del cual iwlist es una parte, también contiene una Biblioteca de ayuda de herramientas inalámbricas. Necesita incluir iwlib.h y vincular con libiw.a (es decir, agregar -liw). Luego busque la documentación para la función iw_set_ext . El parámetro SIOCSIWSCAN será de mayor uso. Para ver un ejemplo de cómo usar esta interfaz, eche un vistazo a la fuente de KWifiManager en la biblioteca de KDE (consulte: Interface_wireless_wirelessextensions :: get_available_networks method). Alternativamente, también puede descargar el código fuente de las Herramientas inalámbricas y observar 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 podría hacerse de otra manera.
Como está utilizando Ubuntu 8.04, el paquete libiw-dev debería ser útil.
Me gustaría obtener una lista de las redes inalámbricas disponibles. Idealmente, esto sería a través de alguna llamada C, pero no me importa si tengo que bloquearlo con una llamada al sistema. Aún mejor si el llamado o programa C requerido no requiere algún paquete exótico de terceros.
Internet parece sugerir que use sudo iwlist <interface> scan
que parece hacer el truco desde la línea de comandos, pero prefiero no requerir permisos de root. Solo quiero ver lo básico, no cambiar nada.
Es bastante fácil hacer un escaneo en la línea de comando. Las páginas man son tu amigo aquí (echa un vistazo a iwconfig y iwlist ). Pero usar la interfaz C es un poco más difícil, así que me centraré en eso.
En primer lugar, como han mencionado otras personas, descargue definitivamente el código fuente de las herramientas inalámbricas . Toda la documentación para la interfaz de programación está en los archivos .c . 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. Basicamente solo necesitas iwlib.hy iwlib.c para esta pregunta.
Si bien puede usar iw_set_ext
y iw_get_ext
, libiw implementa una función de escaneo básica iw_scan
, desde la que 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. Compila con -liw
y ejecuta con sudo
.
#include <stdio.h>
#include <time.h>
#include <iwlib.h>
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("%s/n", 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.
¡Lee el código fuente de iwlib !