wpa_supplicant beendet den Prozess, wenn ein falsches Passwort erkannt wird

wpa_supplicant beendet den Prozess, wenn ein falsches Passwort erkannt wird

wpa_supplicantNormalerweise 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_supplicantdas 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_supplicantfalscher Schlüssel geschrieben. Mit grepon wpa_supplicant(mit stdbufbasierend 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_supplicantwird im Hintergrund ausgeführt und seine Ausgabe wird in eine Protokolldatei umgeleitet. Der tailBefehl 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_supplicantProzess beendet wird.

verwandte Informationen