Erste WIFI - Signalstärke- Suche nach der beste Weg (IOCTL, iwlist (iw) etc.)
Ich Scannen möchte, die Signalstärke, empfangen von 3 AP.
Ich wäre glücklich, wenn das passieren könnte jeder 300ms (max.500ms). Ich leuchtete mit OpenWRT auf dem Router.
War ich auf der Suche nach einem guten Werkzeug zu tun.
Zuerst fand ich iwconfig, die gearbeitet, aber nur mit Netzen, die ich verbunden war. So habe ich iwlist (iw hat nicht funktioniert - vielleicht muss ich es aktualisieren?). Wissen Sie, wie genau ist die Ausgabe von es? Kann ich ihm Vertrauen?
Danach, stieß ich auf die IOCTL-Aufruf. Es sieht wirklich mächtig* und Professionell. Jedoch ist die Ausgabe immer das signal stregnth von einem WLAN zuverlässiger als die einfache Methode, wie iwlist/iw?
*auch zu viel mächtiger als ich Fehler beim kompilieren von jedem Programm, das ich schrieb über es
- Stack Overflow ist eine Website, die für die Programmierung und Entwicklung Fragen. Diese Frage scheint off-topic, weil es nicht um die Programmierung oder Entwicklung. Siehe Was für Themen kann ich Fragen hier in der Hilfe. Vielleicht Raspberry Pi Stack Exchange, Internet der Dinge Stack Exchange oder Unix & Linux Stack Exchange wäre ein besserer Ort, um zu Fragen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, um zu bestimmen, die Signalstärke der WLAN-access-points, zu denen Sie nicht verbunden, Scannen ist der richtige Weg.
Das Scannen wird durchgeführt, indem die wireless-Netzwerk-Karte mit viel oder wenig "Hilfe" vom Fahrer, je nach dem design des wireless-Karte. Es gibt Karten (Chipsätze, um genauer zu sein), die haben einen eigenen Prozessor und ein eigenes firmware-code unabhängig von dem host-computer. Auf der anderen Seite, es gibt "dumme" Karten, wo die Treiber auf dem host-computer macht die meiste Arbeit.
Zwischen dem Fahrer und dem rest des Betriebssystems gibt es eine Schnittstelle (API) zum senden von Befehlen an den Fahrer und rücklesen von Informationen in standardisierter Weise. Mit Linux gibt es mindestens zwei verschiedene APIs. Die ältere namens Wireless Extensions, und der neuere ist benannt cfg80211. Normalerweise ist ein Treiber unterstützt nur eine der APIs. Die meisten aktuellen Treiber verwenden cfg80211, aber gibt es vielleicht ältere Treiber, die noch mit Wireless Extensions.
Für jede der beiden APIs gibt es ein user-space-Werkzeug (oder eine Familie von Werkzeugen) zu benutzen. Für die Wireless-Extensions, gibt es
iwconfig
(undiwlist
,iwpriv
etc.) Für cfg80211, es ist nuriw
.So, die Fragen über das richtige Werkzeug hängt davon ab, was API den WLAN-Treiber verwendet. Hinzufügen Verwirrung ;-), cfg80211 hat einige emulation, die können Sie einige WLAN-Erweiterung fordert, um Treiber mit den neueren cfg80211 API.
Bezüglich Ihrer Fragen über
ioctl()
: Dies ist eine generische Methode für die Kommunikation zwischen user-space und kernel-space in Unix-Betriebssystemen. Die alten Wireless-Extensions-API verwendetioctl()
. Die neueren cfg80211-API verwenden, die nicht mit einerioctl()
-basierte Schnittstelle, nutzt aber nl80211 statt.Um es zusammenzufassen: ob
iw
/cfg80211/nl80211 oderiwconfig
/Wireless Extensions/ioctl hängt davon ab oder der Treiber Ihrer WLAN-Karte.Bezüglich Ihrer gewünschten scan-Intervall, würde ich sagen, dass 300ms ist eher kurz. Dies ist, weil für eine sinnvolle scan, muss der client zu verlassen, seine aktuellen Kanal für kurze Zeit, auf einen anderen Kanal Umschalten und hören, um Signale von anderen access points auf diesem Kanal. Seit dem verlassen seines Kanals stört die Kommunikation, diese off-Kanal mal sind in der Regel kurz gehalten und durchgeführt werden, selten.
Aufrufen
iw <dev> scan
oderiwlist <dev> scan
bzw, wird das nicht zwangsläufig dazu, dass ein neues scan, kann aber wieder eine alte (gecachte) Liste der access points. Abhängig von Ihrer WLAN-Karte/Treiber kann es (un)möglich ist, zu erzwingen, einen neuen scan.