Wie bestimmen Zugangspunkte die Leistungsfähigkeit eines verbundenen oder nicht zugeordneten Clients?

1930
Dave

Ich kann nicht herausfinden, wie Zugangspunkte die Signalstärke von Clients in der Nähe bestimmen.

Ich habe diese Informationen in keinem der WiFi-Paket-Tutorials gefunden. Daher kann ich nur davon ausgehen, dass die Leistungsinformationen nicht vom Client stammen, sondern vom Zugriffspunkt bestimmt werden.

Ich kenne eine Anwendung namens aircrack, mit der diese Informationen ermittelt werden können, aber bevor ich mich damit beschäftige und herumstoch, möchte ich einen Überblick darüber erhalten, wie die Leistung berechnet wird. Meine Google-Fähigkeiten sind nicht so schlecht, daher bin ich überrascht, dass ich bisher keine Informationen darüber finden konnte. Wenn Aircrack es schaffen kann, sind diese Informationen da draußen!

Ich hatte gehofft, dass die Benutzer hier in die richtige Richtung weisen können?

Bezüglich der Prämie

Ich denke, es ist Zeit zu versuchen, eine Prämie einzusetzen. Bitte posten Sie in Ihren Antworten alle Links, die Sie finden können, um zu verstehen, wie diese Leistungserkennung funktioniert. Spezifische Informationen darüber, wie es in aircrack implementiert wird, wären perfekt!

AKTUALISIEREN:

Im Moment sieht es am Beispiel der aircrack-ng-Suite so aus, als würde der Leistungswert aus buf [2] in net_read () gezogen. Ich glaube, dass dieser Wert letztendlich von net_cmd stammt, was zu gepaarten Aufrufen von net_send und net_get () führt. Ich denke, net_get () liest die Header-Informationen ein, die aufgrund des Aufrufs von net_send () gesendet werden, und dieser Header gibt an, wie viele Daten in den Puffer buf [] kopiert werden sollen.

Was ich jetzt nicht verstehe, ist Folgendes: Es sieht ganz so aus, als würde buf [] durch den Aufruf von net_read_exact () gefüllt werden, der nur Daten aus dem Socket liest. Wenn dies der Fall ist und wenn die Leistung ein Treiberdetail ist, warum befindet sich der Leistungswert im Puffer? Wenn dieser Puffer tatsächlich mit den Socket-Daten gefüllt ist, bedeutet das nicht, dass der Strom vom Client / der Station gesendet wird? Ich glaube, dass der AP / Treiber für die Bereitstellung der Energieinformationen verantwortlich ist, wie jeder gesagt hat, aber diesen Teil nicht bekommen.

4
Ich dachte immer, es habe etwas mit dem Prozentsatz verlorener Pakete zu tun, aber es scheint über [Hardware] (https://en.wikipedia.org/wiki/Received_signal_strength_indication) zu erfolgen. Alex vor 10 Jahren 0
Ein AP benötigt keinen Signalstärkepegel, um seine Arbeit zu erledigen. BatchyX vor 10 Jahren 0
@BatchyX Einige APs (z. B. von MikroTik) können so konfiguriert werden, dass Clients getrennt werden, wenn die Signalstärke den angegebenen Schwellenwert unterschreitet. Dies ist vorgesehen, wenn der Bereich mit mehreren APs mit der gleichen SSID abgedeckt wird, sodass Clients, die an einen anderen Ort gezogen wurden, der von einem anderen AP besser abgedeckt wurde, gezwungen sind, zu einem besseren AP zu wechseln. Ohne eine solche erzwungene Unterbrechung versuchen Client-Stationen oft, die Verbindung zum gleichen AP so lange wie möglich aufrechtzuerhalten, aber auf eine niedrigere Bitrate zu wechseln, was den Dienst für alle anderen Clients, die denselben Kanal verwenden, beeinträchtigt. Sergey Vlasov vor 10 Jahren 0
@SergeyVlasov: Sie können das Gleiche erreichen, wenn Sie nicht für niedrigere Raten werben. BatchyX vor 10 Jahren 0

2 Antworten auf die Frage

4
Breakthrough

Eigentlich ist die Anwendung, die diese Informationen bestimmt airodump-ng, nicht aircrack-ng . Aus der airodump-ngDokumentation werden die Leistungsstufen bestimmt als:

PWR - Von der Karte gemeldetes Signal. Ihre Bedeutung hängt vom Fahrer ab [...]

Nun, mal sehen, ob wir es besser machen können. Beim Durchsehen des neuesten Quellcodes der airodump-ng.cDatei wird die Leistung in der dump_add_packet(...)Funktion eingestellt:

/* only update power if packets comes from * the AP: either type == mgmt and SA != BSSID, * or FromDS == 1 and ToDS == 0 */ if (...) ap_cur->power_lvl[ap_cur->power_index] = ri->ri_power; 

Nachdem ich mehrere Schichten der Abstraktion, Strukturen und Funktionszeiger durchgearbeitet hatte, stellte ich fest, dass diese Daten aus der linux_read(...)in der osdep/linux.cDatei definierten Funktion gefüllt werden. Dies ist, wo die ri_powerVariable inri Struktur mit Daten gefüllt und scheint tatsächlich treiberspezifisch zu sein.

Die meisten Treiber folgen dem Radiotap- Standard (im Gegensatz zum unten beschriebenen älteren Prism54-Standard), der mehrere vordefinierte Felder zum Bestimmen der Antennenleistung, des Rauschens und der Dämpfung aufweist. Diese Felder werden direkt verwendet airodump-ng, um die ri_powerVariable auszufüllen . Einige davon sind bereits in Dezibel oder Leistung verfügbar.

airodump-ngverwendet entweder das Antennensignalfeld (in dBm) oder das dB-Antennensignalfeld (in dB), um die angezeigte Signalleistung zu berechnen. Ähnliche Schritte werden für die anderen Felder verwendet, da sie alle in der Radiotap-Spezifikation, auf die oben verwiesen wird, vorgegeben sind. Zum Beispiel kann die ri_powerVerwendung des dB-Antennensignalfelds wie folgt berechnet werden:

case IEEE80211_RADIOTAP_DB_ANTSIGNAL: if(!got_signal) { if( *iterator.this_arg < 127 ) ri->ri_power = *iterator.this_arg; else ri->ri_power = *iterator.this_arg - 255;  got_signal = 1; } break; 

Wie bereits erwähnt, folgen einige Geräte der (älteren) prism54- Spezifikation (anstelle von Radiotap), die einen Header mit fester Länge verwendet. In diesem Fall wird die Empfangsleistung direkt aus dem Puffer abgerufen (beachten Sie, dass dies kein vollständiger Quellcode ist, sondern nur die Pfade zum Befüllen zeigt ri_power):

if (tmpbuf[7] == 0x40) ri->ri_power = tmpbuf[0x33]; else ri->ri_power = *(unsigned int *)( tmpbuf + 0x5C ); 
Danke, ich bezog mich auf aircrack als Suite und nicht speziell auf die Anwendung. Ich hätte meine Frage nach dem Durchsuchen des Quellcodes aktualisieren sollen. Ich verwende airserv-ng und airodump-ng, und da es unter openwrt läuft, wird ri_power in net_read () in network.c eingestellt. Ich habe heute Radiotap gesehen, glaube aber nicht, dass Daten von der openwrt-spezifischen Implementierung verwendet werden. Ich bin rückwärts gegangen, um herauszufinden, wo buf [2] eingestellt ist, da hier der Leistungswert herkommt. Ich glaube, die Magie geschieht in net_get (). Könntest du es mir bitte sagen, wenn du denkst, dass ich hier auf dem richtigen Weg bin? Dave vor 10 Jahren 0
Ich wollte Ihre Antwort bearbeiten, aber ich dachte, ich sollte das nicht tun, nur für den Fall - ich meine, Sie meinten damit, dass airodump-ng die Antennenfelder verwenden wird, da airmon-ng nur dazu verwendet wird, die Schnittstelle in den Überwachungsmodus zu setzen. Dave vor 10 Jahren 0
Und danke, dass Sie mir bisher eine wirklich nette Antwort gegeben haben - ich glaube nicht, dass ich im Netz noch so etwas gefunden habe. :) Ich habe das Gefühl, ich bin kurz davor, das zu nageln, brauche aber nur ein bisschen mehr Rat, denke ich. Dave vor 10 Jahren 0
@Dave bezüglich deines zweiten Kommentars, guter Fang. Ich habe die Antwort editiert, aber das ist Super User - Sie können gerne auch die Beiträge anderer Leute editieren :) Was net_read () angeht, so habe ich einige Erwähnungen davon gesehen, dachte aber, dass es nur im Herbst verwendet wurde. zurück Fälle, in denen der Treiber nicht als WLAN erkannt wird (oder nicht Radiotap / prism54). Ich werde noch ein bisschen herumgraben, aber Sie hören sich an, als ob Sie auf der richtigen Spur sind. Vielleicht möchten Sie "airodump-ng" unter "gdb" starten und einen Haltepunkt in dieser Funktion festlegen, um sicherzustellen, dass dies der Funktionsaufruf dereferences ist. Breakthrough vor 10 Jahren 0
Unfortunately, I don't have gdb set up yet through Eclipse to be able to set breakpoints... that might take a little work. I'm running the code on a router and have found information on how to do it, but haven't gotten it to work yet. When you say the driver isn't detected as a WLAN, more specifically are you saying that option mode in /etc/config/wireless is not set to AP? Dave vor 10 Jahren 0
Ich hätte auch sagen sollen, dass, obwohl ich gdb nicht laufen habe, ich weiß, dass net_read aufgerufen wird, weil ich printfs überall platziere und sie auftauchen. Dave vor 10 Jahren 0
@Dave Ich scheine es jetzt nicht zu finden, aber ich erinnere mich, dass ich eine Datei gesehen habe, die eine "Ladder" von if-Anweisungen hatte, die nacheinander eine andere Lesemethode verwenden würde (z. B. `net_read ', falls verfügbar, dann' linux_read ', wenn verfügbar). Ich dachte nur, dass "net_read" einer der "Rückfall" -Werte war, wenn eine weiterentwickelte "read" -Methode (zB eine, die Radiotap unterstützt) verfügbar wäre. Breakthrough vor 10 Jahren 0
Ich habe so etwas noch nicht gesehen. Ich habe die Funktionszeigerzuweisungen auf OS-Basis gesehen, und das geht soweit, net_read geht weiter ... Dave vor 10 Jahren 0
1
Old Pro

I'm not quite sure what you are asking.

Access points have radio receivers, naturally, and those receivers have analog sections with automatic gain, from which the hardware can derive a received signal strength. The hardware driver then makes this information available to other software in an OS-dependent way.

This is why aircrack makes a big deal about drivers and hardware.

Ja, das habe ich in meiner Frage zu sagen versucht - da es nicht in den Paketinformationen enthalten ist, muss es eine Hardware-abhängige Sache sein. Die große Frage ist also: Welche Tools stehen auf einem Router zur Verfügung, mit denen ich die Signalstärke für einen beliebigen Client ermitteln kann, der dazu gehört oder nicht? Dave vor 10 Jahren 0
Da es nicht Teil des WLAN-Standards ist, gibt es keine Standardantwort. Die verfügbaren Tools hängen vollständig von Ihrem speziellen Router, Ihren Treibern und Ihrer Wi-Fi-Funkhardware ab. Old Pro vor 10 Jahren 0