GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo obtener una lista de redes inalámbricas disponibles en Linux?

Es bastante fácil hacer un escaneo en la línea de comandos. Las páginas man son tus amigas aquí (mira 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.

Si bien puedes usar iw_set_ext y iw_get_ext , el libiw implementa una función básica de escaneo iw_scan , de donde puedes extraer la mayor parte de la información que necesitas.

Aquí hay un programa simple para obtener el ESSID para todas las redes inalámbricas disponibles. Compilar con -liw y ejecutar 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.

Lea 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. Debe incluir iwlib.h y enlace con libiw.a (es decir, agregue -liw). Luego busque la documentación para iw_set_ext función. El SIOCSIWSCAN el parámetro será de mayor utilidad. Para ver un ejemplo de cómo utilizar esta interfaz, eche un vistazo a la fuente de KWifiManager en la biblioteca de KDE (consulte: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 puede 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

Linux
  1. Cómo enumerar todas las configuraciones regionales disponibles en RHEL7 Linux

  2. ¿Cómo puedo obtener el estado del teclado en Linux?

  3. ¿Cómo enumerar los procesos adjuntos a un segmento de memoria compartida en Linux?

  4. ¿Cómo podemos obtener una lista de usuarios que no son del sistema en Linux?

  5. ¿Cómo puedo verificar si cgroups están disponibles en mi host Linux?

Cómo enumerar particiones de disco en Linux

Cómo obtener la lista de cuentas de usuario de MySQL en Linux

Cómo enumerar discos en Linux

Cómo enumerar servicios en Linux

Cómo obtener su dirección IP en Linux

Cómo obtener una lista de enlaces simbólicos en Linux