GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso ottenere un elenco di reti wireless disponibili su Linux?

È abbastanza facile eseguire una scansione nella riga di comando. Le pagine man sono tue amiche qui (controlla iwconfig e iwlist ). Ma usare l'interfaccia C è un po' più difficile, quindi mi concentrerò su questo.

Prima di tutto, come hanno detto altre persone, scarica sicuramente il codice sorgente degli strumenti wireless. Tutta la documentazione per l'interfaccia di programmazione è in .c File. Per quanto ne so, non esiste documentazione web per l'API. Tuttavia, il codice sorgente è abbastanza facile da leggere. Ti serve praticamente solo iwlib.h e iwlib.c per questa domanda.

Mentre puoi usare iw_set_ext e iw_get_ext , la libiw implementa una funzione di scansione di base iw_scan , da cui puoi estrarre la maggior parte delle informazioni di cui hai bisogno.

Ecco un semplice programma per ottenere l'ESSID per tutte le reti wireless disponibili. Compila con -liw ed esegui 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);
}

DISCLAIMER:Questo è solo un programma dimostrativo. È possibile che alcuni risultati non abbiano un essid. Inoltre, questo presuppone che l'interfaccia wireless sia "wlan0". Hai capito.

Leggi la iwlib codice sorgente!


Il pacchetto Wireless Tools -- di cui iwlist fa parte -- contiene anche una Wireless Tools Helper Library. Devi includere iwlib.h e collegamento con libiw.a (cioè aggiungi -liw). Quindi cerca la documentazione per iw_set_ext funzione. Il SIOCSIWSCAN parametro sarà di maggior utilità. Per un esempio di come utilizzare questa interfaccia, dai un'occhiata ai sorgenti di KWifiManager nella libreria KDE (vedi:Metodo Interface_wireless_wirelessextensions::get_available_networks). In alternativa, puoi anche scaricare il codice sorgente di Wireless Tools e dare un'occhiata a come la funzione iwlib iw_set_ext viene utilizzata anche per la scansione in iwlist.c.

Per quanto riguarda i privilegi, immagino che il processo dovrà essere eseguito come root per eseguire la scansione. Mi piacerebbe sapere se questo potrebbe essere fatto anche diversamente.

Dato che stai usando Ubuntu 8.04, il pacchetto libiw-dev dovrebbe essere utile.


Puoi usare nmcli che non richiede permessi di root o nome dell'interfaccia WIFI.

nmcli -t -f ssid dev wifi

Linux
  1. Come elencare tutte le localizzazioni disponibili su RHEL7 Linux

  2. Come posso ottenere lo stato della tastiera in Linux?

  3. Come elencare i processi collegati a un segmento di memoria condivisa in Linux?

  4. Come possiamo ottenere un elenco di utenti non di sistema su Linux?

  5. Come posso elencare tutti gli utenti bloccati in Linux?

Come elencare le partizioni del disco in Linux

Come ottenere l'elenco degli account utente MySQL in Linux

Come elencare i dischi su Linux

Come elencare i servizi su Linux

Come ottenere il tuo indirizzo IP su Linux

Come ottenere un elenco di collegamenti simbolici su Linux