gpt4 book ai didi

python - 检查 Python 应用程序的 wpa_supplicant 输出

转载 作者:行者123 更新时间:2023-11-30 22:17:45 27 4
gpt4 key购买 nike

我在 Raspberry Pi 上有一个 Python/Flask Web 应用程序,它调用以下 bash 脚本 (connect_to_wifi) 来连接到 WiFi:

sudo killall wpa_supplicant
sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
sudo dhclient wlan0

基本上,用户输入其 WiFi 凭据,这些凭据保存在 wpa_supplicant.conf 中,然后运行此脚本。它工作得很好...但是,如果他们输入错误的凭据,dhclient 将在失败之前永远挂起

我想要做的是在继续 dhclient 之前检测凭据是否正确。我知道如果信用错误,我可以检查 wpa_supplicant 命令的输出是否出现 4 次握手失败,但是当我通过以下方式从 Python 应用程序调用此脚本时:

p = Popen(['connect_to_wifi'], stdout=PIPE, bufsize=1)
with p.stdout:
for line in iter(p.stdout.readline, b''):
print line,
p.wait()

没有捕获 sudo wpa_supplicant -i... 行的任何输出。我想做的就是在检测到握手失败时立即结束,但我在用 Python 捕获输出时遇到了困难。

最佳答案

约翰·布拉德 (John Bullard) 的回答确实干净可靠,但由于我对其发表的评论,我无法使其始终如一地工作:

There is a brief period where iw wlan0 link says it is connected even if invalid credentials are entered in wpa_supplicant.conf. I'm assuming it connects, then verifies creds, and if they're wrong, disconnects. So this script doesn't actually work, at least not every time.

在该答案的帮助下,我最终所做的是使用 wpa_supplicant 的 -f 标志并将 wpa_supplicant 的输出写入文件。 while 循环然后 grep 获取连接状态,在这种情况下它将调用 dhclient 。如果没有连接,要么超时,要么导致四次握手失败(如果是后者,脚本会提前结束)。

#!/bin/bash

sudo ip addr flush dev wlan0
sudo killall wpa_supplicant
sudo truncate -s 0 wifi_connection_status.txt
sudo wpa_supplicant -B -i wlan0 -f wifi_connection_status.txt -c /etc/wpa_supplicant/wpa_supplicant.conf

declare -i i=0
declare -i timeout=15
while [ $i -le $timeout ]; do
if grep -iq 'CTRL-EVENT-CONNECTED' wifi_connection_status.txt; then
sudo dhclient wlan0
exit 2
elif grep -iq '4-Way Handshake failed' wifi_connection_status.txt; then
exit 2
fi

(( i++ ))
sleep 1
done

关于python - 检查 Python 应用程序的 wpa_supplicant 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49546082/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com