wpa_supplicant
Normalerweise erhalte ich beim Ausführen eine Ausgabe wie diese:
Successfully initialized wpa_supplicant
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
wlan3: Trying to associate with 9c:3d:cf:fb:95:96 (SSID='Bell420' freq=2462 MHz)
wlan3: Association request to the driver failed
wlan3: Associated with 9c:3d:cf:fb:95:96
wlan3: Authentication with 9c:3d:cf:fb:95:96 timed out.
ioctl[SIOCSIWAP]: Operation not permitted
wlan3: CTRL-EVENT-DISCONNECTED bssid=9c:3d:cf:fb:95:96 reason=3 locally_generated=1
wlan3: WPA: 4-Way Handshake failed - pre-shared key may be incorrect
Das Problem ist, dass es immer wieder versucht.
Gibt es eine Möglichkeit, wpa_supplicant
das Beenden anzuordnen, sobald ein offensichtlicher Fehler auftritt, z. B. eine falsche Taste?
Ich verwende ein älteres eingebettetes Gerät mit wpa_supplicant v2.1
.
Ich habe einen Workaround für die Überwachung wpa_supplicant
falscher Schlüssel geschrieben. Mit grep
on wpa_supplicant
(mit stdbuf
basierend aufKommentar von Stéphane Chazelas hier):
# Create conf file with ssid and password
wpa_passphrase "$ssid" "$password" > /etc/wpa_supplicant/wpa_supplicant.conf
# If wifi key is wrong kill subshell
subshell=$BASHPID
(sudo stdbuf -o0 wpa_supplicant -Dwext -iwlan1 -c/etc/wpa_supplicant/wpa_supplicant.conf 2>&1 \
| grep -m 1 "pre-shared key may be incorrect" \
&& kill -s PIPE "$subshell") &
Hinweis: Der obige Block befindet sich in einer Untershell in einem Skript.
Anfangs schien es zu funktionieren, aber mit der Zeit stellte ich fest, dass es manchmal dazu führte, dass das gesamte Skript fehlschlug, obwohl das Passwort in Ordnung war. Manchmal funktionierte es wie erwartet.
Es muss einen besseren Weg geben, dies zu tun.
Bearbeiten: Vielleicht sollte ich stattdessen hier verwenden wpa_cli
?
Antwort1
#!/bin/bash
# SSID and password
ssid="YourSSID"
password="YourPassword"
# Create wpa_supplicant.conf
wpa_passphrase "$ssid" "$password" > /etc/wpa_supplicant/wpa_supplicant.conf
# Run wpa_supplicant in the background
wpa_supplicant -Dwext -iwlan1 -c/etc/wpa_supplicant/wpa_supplicant.conf > /tmp/wpa_supplicant.log 2>&1 &
# Monitor log file for error messages
tail -f /tmp/wpa_supplicant.log | while read -r line; do
if [[ $line == *"pre-shared key may be incorrect"* ]]; then
echo "Incorrect key detected. Exiting..."
kill $!
fi
done
wpa_supplicant
wird im Hintergrund ausgeführt und seine Ausgabe wird in eine Protokolldatei umgeleitet. Der tail
Befehl liest die Protokolldatei kontinuierlich und sucht nach der angegebenen Fehlermeldung. Wenn die Fehlermeldung gefunden wird, wird eine Meldung ausgegeben und das Skript wird beendet, indem der wpa_supplicant
Prozess beendet wird.