2009-05-29 7 views
5

Ich möchte wissen, wie iwlist Befehl die verfügbaren drahtlosen Netzwerke unter Linux scannt. Ich las seinen Quellcode und es gab einen ioctl Aufruf mit SIOZSIWSCAN um den Scan auszulösen und SIOCGIWSCAN um die Scan Ergebnisse zu bekommen. Aber wie werden die Beacon-Frames von diesen Systemaufrufen erfasst und analysiert?Wie scannt der Befehl iwlist() die drahtlosen Netzwerke?

Antwort

10

iwlist(8) und die anderen drahtlosen Tools bieten ein gemeinsames Frontend für verschiedene drahtlose Gerätetreiber, die Linux Wireless Extensions (WEXT) unterstützen. Jeder Treiber registriert Handler mit WEXT, die die gerätespezifischen Operationen implementieren, die von dieser Schnittstelle definiert werden. Zum Scannen sind die beiden Handler Trigger-Scan (Befehl SIOCSIWSCAN) und erhalten Scan-Ergebnisse (Befehl SIOCGIWSCAN). Nachdem das Gerät einen Scan abgeschlossen hat, sendet es ein SIOCGIWSCAN-Ereignis an WEXT über eine netlink-Schnittstelle. Eine Anwendung, die diesen Socket überwacht, kann dann einen SIOCGIWSCAN-Befehl ausgeben, um die Scan-Ergebnisse vom Gerät abzurufen. Beachten Sie, dass das Gerät den Scan beliebig ausführen kann. Zum Beispiel kann er passiv auf Beacons hören oder aktiv scannen, indem er Sondenanforderungen aussendet.

Das obige ist absichtlich vage auf die Mechanik des Sendens von Befehlen an ein Gerät, weil es den traditionellen Weg (ioctl) und den neuen Weg (netlink - cfg80211) gibt. Aber um ein konkretes Beispiel zu nehmen, bedenken Sie den traditionellen Weg. Die ioctl-Aufrufe sind im Modul WEXT implementiert, aber der Code, der diesen Befehl verarbeitet, ist im Gerätetreiber implementiert. Wenn eine Benutzerbereichsanwendung ein ioctl erstellt, sucht WEXT den Handler des Gerätetreibers und führt ihn aus.

+0

Verstanden .... die ioctl-Aufrufe sind im Treibermodul implementiert, so dass der eigentliche Funktionsaufruf für ioctl mit SIOCGIWSCAN eine im Treibermodul definierte Funktion aufruft. –