我知道这在安全方面是一个非常糟糕的主意™️,我对此表示同意。 (一切都通过 SSL 进行,所以嗯。)
我有一个由 Raspberry Pi 驱动的小型漫游机器人,我想与它保持联系。这意味着机器人应该尽最大努力连接到我的服务器。它有 Wifi,但没有手机芯片。
我住在技术区,所以有很多“免费 WiFi 只需输入您的电子邮件或接受我们的服务条款”接入点,所以即使是打开SSID 并不意味着可用的SSID。
有没有一种方法(小应用程序或脚本或其他)可以循环遍历所有打开的接入点,直到找到一个允许连接到服务器的接入点 - 并且如果它被切断或吞吐量太弱,则将恢复扫描?
我可以很好地运行 python、bash,无论 raspbian (Debian) 支持什么。没有任何连接时的“中断”就是开展业务的成本。
答案1
我不知道有任何现成的工具可以用于您的目的,但您可以自己构建一个。
Raspbian 上提供了必要的工具和程序。
幸运的是,wpa-supplicant
允许对网络扫描和手动连接到网络进行交互式控制。
具体来说,您可以使用该程序wpa_cli
或使用c中的wpa_ctrl API,这也是 的基础wpa_cli
。
wpa_cli
允许您
扫描 SSID 并显示结果:
wpa_cli -i wlan0 SCAN wpa_cli -I wlan0 SCAN_RESULTS
获取有关 SSID 的详细信息(包括信号强度、加密等):
wpa_cli -i wlan0 BSS 0
提示:替换
0
为您想了解更多信息的 SCAN_RESULTS 输出中 SSID 的 idx。连接到符合您标准的特定 SSID
sudo wpa_cli -i wlan0 ADD_NETWORK sudo wpa_cli -i wlan0 SET_NETWORK 0 ssid "SSID" sudo wpa_cli -i wlan0 SET_NETWORK 0 psk "passphrase" sudo wpa_cli -i wlan0 ENABLE_NETWORK 0
注意:替换
0
为之后打印到 stdout 的数字ADD_NETWORK
断开与 SSID 的连接
sudo wpa_cli -i wlan0 DISCONNECT
显然,您必须对这些命令的输出进行一些解析。
为了检查连接到 SSID 后是否可以连接到服务器,您可以简单地评估 ping 调用的结果。
现在您只需将所有内容放在一起即可。