Es ist ziemlich einfach, einen Scan in der Befehlszeile durchzuführen. Die Manpages sind hier Ihr Freund (sehen Sie sich iwconfig an und iwlist ). Aber die Verwendung der C-Schnittstelle ist etwas schwieriger, also konzentriere ich mich darauf.
Zuallererst, wie andere Leute bereits erwähnt haben, laden Sie auf jeden Fall den Quellcode der drahtlosen Tools herunter. Die gesamte Dokumentation für die Programmierschnittstelle befindet sich in der .c Dateien. Soweit ich das beurteilen kann, gibt es keine Webdokumentation für die API. Der Quellcode ist jedoch ziemlich einfach zu lesen. Sie brauchen praktisch nur iwlib.h und iwlib.c für diese Frage.
Während Sie iw_set_ext
verwenden können und iw_get_ext
, die libiw implementiert eine grundlegende Scanfunktion iw_scan
, aus dem Sie die meisten Informationen extrahieren können, die Sie benötigen.
Hier ist ein einfaches Programm, um die ESSID für alle verfügbaren drahtlosen Netzwerke zu erhalten. Kompilieren Sie mit -liw
und mit sudo
ausführen .
#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);
}
HAFTUNGSAUSSCHLUSS:Dies ist nur ein Demonstrationsprogramm. Es ist möglich, dass einige Ergebnisse kein essid haben. Außerdem wird davon ausgegangen, dass Ihre drahtlose Schnittstelle "wlan0" ist. Du verstehst schon.
Lesen Sie die iwlib Quellcode!
Das Wireless-Tools-Paket – zu dem iwlist gehört – enthält auch eine Wireless-Tools-Hilfsbibliothek. Sie müssen iwlib.h einbinden und mit libiw.a verlinken (dh fügen Sie -liw hinzu). Schlagen Sie dann in der Dokumentation für iw_set_ext nach Funktion. Der SIOCSIWSCAN Parameter wird am nützlichsten sein. Ein Beispiel für die Verwendung dieser Schnittstelle finden Sie in der KWifiManager-Quelle in der KDE-Bibliothek (siehe:Methode Interface_wireless_wirelessextensions::get_available_networks). Alternativ können Sie auch den Quellcode der Wireless Tools herunterladen und sich ansehen, wie die Funktion iwlib iw_set_ext auch zum Scannen in iwlist.c verwendet wird.
Was die Privilegien betrifft, stelle ich mir vor, dass der Prozess als root ausgeführt werden muss, um den Scan durchzuführen. Ich würde gerne wissen, ob dies auch anders möglich wäre.
Da Sie Ubuntu 8.04 verwenden, sollte das Paket libiw-dev von Nutzen sein.
Sie können nmcli
verwenden die keine Root-Berechtigungen oder den Namen der WIFI-Schnittstelle erfordert.
nmcli -t -f ssid dev wifi