잘못된 비밀번호가 감지되면 wpa_supplicant가 프로세스를 종료합니다.

잘못된 비밀번호가 감지되면 wpa_supplicant가 프로세스를 종료합니다.

일반적으로 실행하면 wpa_supplicant다음과 같은 출력이 표시됩니다.

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

문제는 계속해서 노력한다는 것이다.

wpa_supplicant명백한 오류(예: 잘못된 키)가 있는 경우 즉시 종료할 수 있는 방법이 있습니까 ?

가 포함된 구형 임베디드 장치를 사용하고 있습니다 wpa_supplicant v2.1.


잘못된 키를 모니터링하는 해결 방법을 작성했습니다 wpa_supplicant. grep다음을 기준으로 사용 wpa_supplicant:stdbufStéphane Chazelas의 리뷰가 여기에 있습니다.):

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

참고: 위 블록은 스크립트의 하위 쉘 내에 있습니다.

처음에는 작동하는 것처럼 보였지만 시간이 지나면서 암호가 정확해도 전체 스크립트가 실패하는 경우가 있다는 것을 알게 되었습니다. 다른 경우에는 예상대로 작동합니다.

이를 수행하는 더 좋은 방법이 있어야 합니다.


편집: 어쩌면 여기를 사용해야 할까요 wpa_cli?

답변1

#!/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백그라운드에서 실행되며 출력이 로그 파일로 리디렉션됩니다. 이 tail명령은 지속적으로 로그 파일을 읽고 지정된 오류 메시지를 확인합니다. 오류 메시지가 발견되면 메시지를 인쇄하고 wpa_supplicant프로세스를 종료하여 스크립트를 종료합니다.

관련 정보