连接到最快的开放 WiFi(可以访问互联网)并在断开时继续查找?

连接到最快的开放 WiFi(可以访问互联网)并在断开时继续查找?

我知道这在安全方面是一个非常糟糕的主意™️,我对此表示同意。 (一切都通过 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允许您

  1. 扫描 SSID 并显示结果:

    wpa_cli -i wlan0 SCAN
    wpa_cli -I wlan0 SCAN_RESULTS
    
  2. 获取有关 SSID 的详细信息(包括信号强度、加密等):

    wpa_cli -i wlan0 BSS 0
    

    提示:替换0为您想了解更多信息的 SCAN_RESULTS 输出中 SSID 的 idx。

  3. 连接到符合您标准的特定 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

  4. 断开与 SSID 的连接

    sudo wpa_cli -i wlan0 DISCONNECT
    

显然,您必须对这些命令的输出进行一些解析。


为了检查连接到 SSID 后是否可以连接到服务器,您可以简单地评估 ping 调用的结果。


现在您只需将所有内容放在一起即可。

相关内容