Обычно при запуске 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
on wpa_supplicant
(с stdbuf
учетом onКомментарий Стефана Шазеласа здесь):
# 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
.