wpa_supplicant завершает процесс, если обнаружен неверный пароль

Вопрос или проблема

Обычно, когда я запускаю wpa_supplicant, я получаю такой вывод:

Успешно инициализирован wpa_supplicant
ioctl[SIOCSIWAP]: Операция не разрешена
ioctl[SIOCSIWENCODEEXT]: Неверный аргумент
ioctl[SIOCSIWENCODEEXT]: Неверный аргумент
wlan3: Попытка ассоциации с 9c:3d:cf:fb:95:96 (SSID='Bell420' freq=2462 MHz)
wlan3: Запрос ассоциации к драйверу не удался
wlan3: Ассоциирован с 9c:3d:cf:fb:95:96
wlan3: Аутентификация с 9c:3d:cf:fb:95:96 истекла.
ioctl[SIOCSIWAP]: Операция не разрешена
wlan3: CTRL-EVENT-DISCONNECTED bssid=9c:3d:cf:fb:95:96 причина=3 локально_сгенерировано=1
wlan3: WPA: 4-Way Handshake не удался - возможно, неправильный предварительно разделяемый ключ

Проблема в том, что он просто продолжает пытаться снова и снова.

Есть ли способ сказать wpa_supplicant, чтобы он завершился, как только получит явную ошибку, такую как неправильный ключ?

Я на старом встраиваемом устройстве с wpa_supplicant v2.1.


Я написал временное решение для мониторинга wpa_supplicant на наличие неправильных ключей. Используя grep на wpa_supplicantstdbuf на основе комментария Стефана Шазеласa здесь):

  # Создать файл конфигурации с ssid и паролем
  wpa_passphrase "$ssid" "$password" > /etc/wpa_supplicant/wpa_supplicant.conf

  # Если ключ WiFi неправильный, убить подсhell
  subshell=$BASHPID
  (sudo stdbuf -o0 wpa_supplicant -Dwext -iwlan1 -c/etc/wpa_supplicant/wpa_supplicant.conf 2>&1 \
    | grep -m 1 "предварительно разделяемый ключ может быть неверным" \
    && kill -s PIPE "$subshell") &

Примечание: указанный блок находится внутри подсhell в скрипте.

Сначала это, казалось, работало, но со временем я заметил, что иногда это приводило к сбоям всего скрипта, когда пароль был правильным. В другие разы это работало как ожидалось.

Должен быть лучший способ сделать это.


Редактировать: Может быть, я должен использовать wpa_cli вместо этого?

#!/bin/bash

# SSID и пароль
ssid="ВашSSID"
password="ВашПароль"

# Создать wpa_supplicant.conf
wpa_passphrase "$ssid" "$password" > /etc/wpa_supplicant/wpa_supplicant.conf

# Запустить wpa_supplicant в фоновом режиме
wpa_supplicant -Dwext -iwlan1 -c/etc/wpa_supplicant/wpa_supplicant.conf > /tmp/wpa_supplicant.log 2>&1 &

# Мониторинг файла журнала на наличие сообщений об ошибках
tail -f /tmp/wpa_supplicant.log | while read -r line; do
    if [[ $line == *"предварительно разделяемый ключ может быть неверным"* ]]; then
        echo "Обнаружен неверный ключ. Завершение..."
        kill $!
    fi
done

wpa_supplicant запускается в фоновом режиме, а его вывод перенаправляется в файл журнала. Команда tail непрерывно считывает файл журнала и проверяет наличие указанного сообщения об ошибке. Если сообщение об ошибке найдено, оно выводит сообщение и завершает скрипт, уничтожая процесс wpa_supplicant.

Ответ или решение

Завершение процесса wpa_supplicant при обнаружении неверного пароля

При использовании wpa_supplicant для подключения к беспроводным сетям, часто возникает ситуация, когда программа не может успешно пройти аутентификацию при неверном пароле. Это может привести к постоянным попыткам соединения, что, безусловно, является нежелательным поведением. В данном ответе мы рассмотрим методы, которые помогут автоматически завершать процесс wpa_supplicant, если программа обнаруживает ошибку аутентификации, такую как неверный предустановленный ключ (PSK).

1. Понимание поведения wpa_supplicant

При запуске wpa_supplicant, он будет продолжать попытки аутентификации, даже если с указанным паролем возникли проблемы. К сожалению, стандартная версия wpa_supplicant v2.1, как в вашем случае, не предоставляет встроенной опции для автоматической остановки при обнаружении определенных ошибок.

2. Использование командной строки и инструментов для мониторинга

Существуют различные способы, как можно реализовать автоматическое завершение процесса. Один из наиболее распространенных подходов — использование команд таких, как grep и tail, для мониторинга выходных данных wpa_supplicant в режиме реального времени.

Пример скрипта

Вот пример скрипта, который включает в себя механизм автоматического завершения процесса wpa_supplicant при обнаружении неверного пароля:

#!/bin/bash

# Указать SSID и пароль
ssid="ВашSSID"
password="ВашПароль"

# Создать конфигурационный файл wpa_supplicant
wpa_passphrase "$ssid" "$password" > /etc/wpa_supplicant/wpa_supplicant.conf

# Запустить wpa_supplicant в фоновом режиме
wpa_supplicant -Dwext -iwlan1 -c/etc/wpa_supplicant/wpa_supplicant.conf > /tmp/wpa_supplicant.log 2>&1 &

# Мониторить лог-файл на наличие сообщений об ошибках
tail -f /tmp/wpa_supplicant.log | while read -r line; do
    if [[ $line == *"pre-shared key may be incorrect"* ]]; then
        echo "Обнаружен неправильный ключ. Выход..."
        kill $!  # Завершение процесса wpa_supplicant
        break
    fi
done

3. Использование wpa_cli вместо wpa_supplicant

Помимо применения tail и grep, вы также можете рассмотреть возможность использования wpa_cli. Этот инструмент предоставляет интерфейс командной строки для взаимодействия с wpa_supplicant, позволяя вам лучше отслеживать события и управлять подключениями. С помощью wpa_cli вы можете настроить скрипт, который будет ждать событий и выполнить соответствующие действия, включая завершение процесса при возникновении ошибки аутентификации.

Пример использования wpa_cli

Вы можете использовать wpa_cli в цикле для обращения к статусу соединения и проверки ошибок:

#!/bin/bash

# Настройка SSID и пароля
ssid="ВашSSID"
password="ВашПароль"

# Создание конфигурационного файла
wpa_passphrase "$ssid" "$password" > /etc/wpa_supplicant/wpa_supplicant.conf

# Запуск wpa_supplicant
wpa_supplicant -Dwext -iwlan1 -c/etc/wpa_supplicant/wpa_supplicant.conf &

# Ожидание и проверка состояния через wpa_cli
while true; do
    status=$(wpa_cli status | grep "wpa_state")
    if [[ $status == *"DISCONNECTED"* ]]; then
        # Проверка дополнительного статуса
        if wpa_cli status | grep -q "pre-shared key may be incorrect"; then
            echo "Неправильный ключ. Завершение работы..."
            kill $!  # Завершение процесса wpa_supplicant
            break
        fi
    fi
    sleep 2
done

Заключение

Методы, описанные выше, предлагают разнообразные решения для завершения процесса wpa_supplicant в случае неверного пароля. Выбор метода зависит от ваших конкретных потребностей и окружения. Использование wpa_cli и логирование ошибок через tail и grep позволяют гибко реагировать на состояние подключения, предотвращая бесконечные попытки аутентификации и оптимизируя рабочие процессы при установлении соединения с Wi-Fi.

Оцените материал
Добавить комментарий

Капча загружается...