wpa_supplicant finalizar processo se senha incorreta for detectada

7

Normalmente, quando executo wpa_supplicant , recebo uma saída assim:

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

O problema é que ele continua tentando repetidamente.

Existe alguma maneira de eu dizer wpa_supplicant para sair assim que obtiver um erro óbvio como uma chave errada?

Estou em um dispositivo incorporado mais antigo com wpa_supplicant v2.1 .

Eu escrevi uma solução para monitorar wpa_supplicant para chaves incorretas. Usando grep on wpa_supplicant (com stdbuf com base no comentário de Stéphane Chazelas aqui ):

  # 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") &

Observação: o bloco acima está dentro de um subshell em um script.

Parecia funcionar inicialmente, mas com o tempo eu encontrava algumas vezes que o script inteiro falhava quando a senha estava bem. Outras vezes, funcionaria como esperado.

Deve haver uma maneira melhor de fazer isso.

Edit: Talvez eu deva usar wpa_cli aqui?

    
por Philip Kirkbride 26.11.2017 / 22:50

0 respostas