有多个无线网络具有相同的 SSID。我正在寻找一种解决方案来连接到特定网络(通过 BSSID)。
nmcli con up ifname ap看起来不错,但不幸的是,它不起作用。它只是重新连接到原始网络。
答案1
您可以使用Network Manager
的 cli 界面nmcli
。
我确信你已经拥有了BSSID
。你可以使用以下命令检查并验证它:
($
是命令提示符。命令后面的行是输出。)
$ nmcli -f in-use,ssid,bssid,signal,bars dev wifi
* SSID BSSID SIGNAL BARS
* Apollo III (TWC) XX:XX:XX:XX:XX:XX 98 ▂▄▆█
Chromecast8481 XX:XX:XX:XX:XX:XX 97 ▂▄▆█
-- XX:XX:XX:XX:XX:XX 94 ▂▄▆█
Apollo III (1) XX:XX:XX:XX:XX:XX 87 ▂▄▆█
TWCWiFi XX:XX:XX:XX:XX:XX 80 ▂▄▆_
CableWiFi XX:XX:XX:XX:XX:XX 80 ▂▄▆_
TWCWiFi-Passpoint XX:XX:XX:XX:XX:XX 80 ▂▄▆_
Apollo III (1) XX:XX:XX:XX:XX:XX 70 ▂▄▆_
连接的 CLIBSSID
是:
$ nmcli d wifi connect XX:XX:XX:XX:XX:XX
该命令将为您提供一个 GUI 提示,要求您输入密码。您可以在命令行上输入密码(可能存在安全问题):
$ nmcli d wifi connect XX:XX:XX:XX:XX:XX password "mypassword"
后者不会提示输入密码,而是通过命令中的 BSSID 连接到指定的网络。 如果您之前已经连接到其他网络,它将被命令中指定的网络替换。
该命令还会将连接信息添加到该/etc/NetworkManager/system-connections
位置。该位置受到保护。
后续可以通过通知区域中的网络图标按创建的名称进行连接。
答案2
答案3
此答案最初由MariusMatutiae 在 SuperUser 上。如果这对您有帮助,请考虑在那里投票。
您可以通过手动连接 AP 来完成此操作。
首先,如果您正在运行网络管理器,最简单的方法是关闭它:
sudo service network-manager stop
然后你需要确定你想加入的 AP 的 BSSID:命令
sudo iw dev wlan0 scan
(如果您使用wlan0作为你的无线接口)将产生很多输出,其中你会发现类似这样的内容:
BSS f8:1a:67:aa:7f:b9 (on wlan0) -- associated TSF: 629432841083 usec (7d, 06:50:32) freq: 2417 beacon interval: 100 capability: ESS Privacy ShortPreamble SpectrumMgmt ShortSlotTime (0x0531) signal: -70.00 dBm last seen: 0 ms ago Information elements from Probe Response frame: SSID: MySSID_NAME
(输出比这更长)。相关部分当然是BSS f8:1a:67:aa:7f:b9。
接下来,你必须释放接口上的所有先前的 IP 地址,以防万一:
sudo ip link set wlan0 down sudo ip addr flush dev wlan0 sudo ip link set wlan0 up
现在您指定要连接到特定的 AP:
sudo iwconfig wlan0 essid MySSID_NAME ap f8:1a:67:aa:7f:b9
当然美联社先于基础服务识别码你刚刚确定了。现在你需要开始wpa_supplicant,
sudo wpa_supplicant -Dnl80211 -i wlan0 -B -c FILE_with_WPA_Secrets
(如果你不知道如何使用 WPA 凭证设置文件,你可以查阅例如这里;要小心,它说网络= {, 它应该是网络={没有空格)。最后,
sudo dhclient -v wlan0
(这-v标志并不适用于所有 Linux 发行版,但我喜欢它,因为我可以监控正在发生的事情)。
编辑
上述说明适用于具有 WPA 安全性的网络。对于 WEP 安全性,请将 wpa_supplicant 命令替换为:
sudo iwconfig wlan0 key s:Your_WEP_password
记住这两个角色s:之前需要输入密码。此后,再次
sudo dhclient -v wlan0
希望这可以帮助。
答案4
这个答案相当于解释如何使用 NetworkManager 的 GUI 的答案,但使用 CLI。
- (可选,用于列出所有可用的 Wi-Fi 及其 BSSID)
nmcli device wifi list
- 编辑 BSSID 字段:
或者:nmcli connection edit ConnectionName set 802-11-wireless.bssid 12:34:56:AB:CD:EF save quit
如果是自动创建的,则通常nmcli connection modify ConnectionName 802-11-wireless.bssid 12:34:56:AB:CD:EF
ConnectionName
与 ESSID 相同(您可以使用 列出所有存储的连接名称nmcli connection
),将其替换12:34:56:AB:CD:EF
为连接 ID。 - 使用连接配置文件:
nmcli connection up ConnectionName
请注意,当该 BSSID 不可用时,它将不会自动连接到任何其他 BSSID。
有一些可能的解决办法。
手动恢复更改。
做同样的事情,但在第 2 步中你需要做:
nmcli connection edit ConnectionName remove 802-11-wireless.bssid save quit
或者
nmcli connection modify ConnectionName 802-11-wireless.bssid ''
创建新连接,克隆现有连接。
nmcli connection delete ConnectionName-cloned # delete all existing connections named "ConnectionName-cloned" nmcli connection clone ConnectionName ConnectionName-cloned # create a new connection with name "ConnectionName-cloned" copying from the connection named "ConnectionName". Note that if there is an existing one it will create a new one with the same name nmcli connection modify ConnectionName-cloned 802-11-wireless.bssid 12:34:56:AB:CD:EF # as above nmcli connection up ConnectionName-cloned # as above