(我故意对我尝试过的实际步骤不精确,因为有数百件事 - 我知道,因为我查看了我的 BASH 历史记录的大小)
CentOS 7,网络管理器
(以下有错误的地方请指正)
客户的环境中有多个具有相同 SSID 的 AP。我必须编写一个 BASH 脚本,依次将 Linux 盒子连接到每个 AP,执行命令来收集数据,然后移动到下一个 AP,清洗、冲洗,重复。 BSSID 是用于连接的显而易见的东西。作为脚本的脚本运行良好,但基于 BSSID 的 wifi 连接位却不然。
我已经尝试过 iw、iwconfig、nmcli 和 wpa_supplicant,但无法让它可靠地连接到我指定的 BSSID - 无论我在命令中输入什么内容,实际连接的 BSSID 似乎都是随机的。根据我收集的信息,除了 wpa_supplicant 之外,所有这些工具都只需获取 BSSID,将其与 SSID 关联,然后在连接设置中使用 SSID,如果正确的话,这似乎有点愚蠢(直白地说)。
wpa_supplicant 太脆弱了,无法使用这种方式 - 它总是进入 wpa_cli 无法连接的状态,我必须不断地重新启动它,并且经常重新启动 NetworkManager。
我考虑过切换到 Python,但 Python 模块似乎只是 linux 命令的包装器,所以没有任何改变。
如果有人有任何想法,请传递。我不敢相信这是如此困难,所以我一定错过了一些明显的东西......
我尝试了下面爱德华多的解决方案。
我无法完全按照提供的方式实现这一点。我在 shell 脚本中循环运行连接尝试,其中 MAC 地址/BSSID 是变量(SSID 和密码/psk 是静态的)。
我用来连接的命令是:
nmcli connection up ifname wlp4s0 ap $AP passwd-file passwdfile
其中 passwdfile 包含 psk。这是在 $AP 列表中的循环。
它仍然连接到列表中的随机 AP。 (可能是当时信号最好的那个),(对我来说)更令人困惑的是该iw
事件显示的连接 BSSID 与
nmcli -f SSID,BSSID,ACTIVE dev wifi list | grep yes
一定有一些非常明显的事情我没有做得正确(这对我来说仍然是新的)。
答案1
如果您只提供普通的 ascii 密码,则wpa_supplicant
需要找出 SSID,因为 64 个十六进制数字 PSK(实际密码的一种)是从它派生的。此时进入SSID模式。
所以解决方案是只指定 BSSID 和64 十六进制数字 PSK密码。
您可以通过运行以下命令获取 64 个十六进制数字 PSK:
wpa_passphrase YourSSID YourAsciiPassword
例如:
$ wpa_passphrase Example myexample
network={
ssid="Example"
#psk="myexample"
psk=e22b519be7138dce1d81d1b67b622a720774f22753f79f954376e6e2b722e2c7
}
然后使用 BSSID 而不是 SSID,最终得到如下结果:
network={
bssid=EE:FF:00:01:02:03
psk=e22b519be7138dce1d81d1b67b622a720774f22753f79f954376e6e2b722e2c7
}
这样您就可以连接到该 BSSID。
答案2
我的用例有点不同,但我确实想衷心感谢 Eduardo Trapani,他的解决方案让我走上了正轨。我的用例是 Google Nest 路由器-接入点对,主路由器在楼上的调制解调器旁边,Nest AP 在楼下的窗户中,指向外面控制我的望远镜的 Raspberry Pi 5。
Eduardo 解决方案的这一部分是绝对必要的:
$ wpa_passphrase Example myexample
network={
ssid="Example"
#psk="myexample"
psk=e22b519be7138dce1d81d1b67b622a720774f22753f79f954376e6e2b722e2c7
}
这一步至关重要。但我不确定如何处理他从 wpa_passphrase 命令的输出创建的网络片段:
network={
bssid=EE:FF:00:01:02:03
psk=e22b519be7138dce1d81d1b67b622a720774f22753f79f954376e6e2b722e2c7
}
事实证明这非常简单。我只是在系统上的网络 GUI 中添加一个网络,并使用 BSSID(我的接入点的 MAC 地址)和密码(wpa_passphrase 命令的输出)填写它。它确实有效,我的 mbps 从 8 上升到 245!
我原来的网络是 Hannah,虽然 Pi 应该找到更好的连接,但由于某种原因,它没有。但是,随着第二个网络 Hannah-2 的定义如上所示,它可以轻松找到它。