wpa_supplicant - Erkennen, dass mein Passwort falsch ist?

7524
George Hawkins

Wenn ich ein falsches Kennwort für eine SSID eingebe, ist dies trotzdem der Fall, wenn Sie zu einem Netzwerk wechseln?

ZB füge ich hier ein Netzwerk hinzu, gebe aber bewusst das falsche Passwort an. Wenn ich den Status überprüfe, sehe ich nur, dass es so istSCANNING

# wpa_cli add_network Selected interface 'wlan0' 1 # wpa_cli set_network 1 ssid \"MyPlace\" Selected interface 'wlan0' OK # wpa_cli set_network 1 psk \"SuperSecret\" Selected interface 'wlan0' OK # wpa_cli select_network 1 Selected interface 'wlan0' OK # wpa_cli status Selected interface 'wlan0' wpa_state=SCANNING p2p_device_address=fe:c2:de:37:93:11 address=fc:c2:de:37:93:11 

Wenn ich ein Skript schreibe, das wpa_cli statusnach der Auswahl des Netzwerks wiederholt ausgeführt wird, kann ich feststellen, dass es durch die Phasen geht:

SCANNING ASSOCIATING 4WAY_HANDSHAKE DISCONNECTED SCANNING 

Gibt es eine Möglichkeit zu entdecken, dass die Assoziierungs- / Handshake-Phase aufgrund eines falschen Passworts fehlgeschlagen ist? ZB meldet das Disconnect-Ereignis beispielsweise einen Grund, der gespeichert wurde und den ich dann abfragen kann?

4

1 Antwort auf die Frage

4
George Hawkins

Wenn wir uns anschauen wpa_supplicant/events.c:2326, sehen wir:

if (could_be_psk_mismatch(wpa_s, reason_code, locally_generated)) { wpa_msg(wpa_s, MSG_INFO, "WPA: 4-Way Handshake failed - " "pre-shared key may be incorrect"); if (wpas_p2p_4way_hs_failed(wpa_s) > 0) return; /* P2P group removed */ wpas_auth_failed(wpa_s, "WRONG_KEY"); } 

Wenn diese Logik getroffen wird, protokolliert sie WPA: 4-Way Handshake failed - pre-shared key may be incorrect.

Dann geht es weiter wpa_supplicant/wpa_supplicant.c:5136und wir sehen:

wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TEMP_DISABLED "id=%d ssid=\"%s\" auth_failures=%u duration=%d reason=%s", ssid->id, wpa_ssid_txt(ssid->ssid, ssid->ssid_len), ssid->auth_failures, dur, reason); 

Also hier <3>CTRL-EVENT-SSID-TEMP-DISABLED id=0 ssid="MyPlace" auth_failures=1 duration=10 reason=WRONG_KEYwird protokolliert.

So kann ich entweder sicherstellen, dass wpa_supplicantso gestartet wird, dass es seine Ausgabe in eine Datei und dann grepfür solche Meldungen protokolliert .

Oder ich kann wpa_cliim interaktiven Modus laufen - wenn er sich in diesem Modus befindet, werden alle wpa_supplicantNachrichten abonniert und ausgegeben .

Die hackigste Lösung, die ich mir ausgedacht hatte, bestand darin, wpa_cliein Skript auszuführen und es zu täuschen, dass es sich im interaktiven Modus befindet:

#!/bin/bash  function poke { while true do printf '\n' sleep 1 done }  function watch { (poke) | wpa_cli | while read line do case "$line" in *'4-Way Handshake failed'*) echo "incorrect key" return ;; *'CTRL-EVENT-CONNECTED'*) echo "connected" return ;; esac done }  wpa_cli disable_network 0 > /dev/null wpa_cli enable_network 0 > /dev/null  watch 

wpa_cligibt nur die empfangenen Nachrichten aus, nachdem eine Benutzereingabe erfolgt ist, so dass die pokeFunktion dies bereitstellt.

Dieses Skript aktiviert das 0- te Netzwerk und betrachtet dabei die wpa_supplicantAusgänge.

Wie gesagt, das ist ziemlich hackig, aber es funktioniert.