通常当我运行时,wpa_supplicant
我会得到一些这样的输出:
Successfully initialized wpa_supplicant
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
wlan3: Trying to associate with 9c:3d:cf:fb:95:96 (SSID='Bell420' freq=2462 MHz)
wlan3: Association request to the driver failed
wlan3: Associated with 9c:3d:cf:fb:95:96
wlan3: Authentication with 9c:3d:cf:fb:95:96 timed out.
ioctl[SIOCSIWAP]: Operation not permitted
wlan3: CTRL-EVENT-DISCONNECTED bssid=9c:3d:cf:fb:95:96 reason=3 locally_generated=1
wlan3: WPA: 4-Way Handshake failed - pre-shared key may be incorrect
Run Code Online (Sandbox Code Playgroud)
问题是它只是一遍又一遍地尝试。
有没有一种方法可以告诉我wpa_supplicant
在出现明显错误(例如错误的键)时立即退出?
我使用的是带有wpa_supplicant v2.1
.
我写了一个解决方法来监视wpa_supplicant
不正确的密钥。使用grep
上wpa_supplicant
(与stdbuf
基于斯特凡Chazelas'在这里评论 …
我正在探索一些用于连接无线网络的低级工具,我发现了以下工具(带有有用的文档/教程链接):
我似乎找不到对这些工具或类似工具的彻底评估。也许有人可以在可靠性和用户友好性方面比较这些工具?哪个最适合 Linux 桌面?欢迎提供指向现有文章的链接,因为我无法通过网络搜索找到太多内容。
对不起,如果这个问题太开放,但我找不到一个好的比较,我收到了个人关于哪种工具最可靠的不同评论。
以下是我的一些经验:
我一直在使用wpa_cli,我已经很满意了。它在许多 Linux 系统上开箱即用,但在安装 NetworkManager 时似乎不起作用。我的主要问题是我的配置中现在有 100 多个 wifi 网络,并且似乎没有一种简单的方法可以通过 SSID 添加/删除网络。我必须使用wpa_supplicant分配的网络号,重新编号或重新排列网络似乎不合理。我还必须手动输入新网络的 SSID - 也许诸如选项卡完成或基于文本的选择菜单之类的东西会很好。例如,当 ssid 有一些尾随空格时,这浪费了我很多时间。
此外,我遇到了需要手动设置特定配置的问题,例如scan_ssid=1
隐藏网络和key_mgmt=NONE
未加密网络。我担心在连接到新的 wifi 网络时可能会出现其他一些特殊情况,我可能没有时间仔细wpa_supplicant.conf
研究解决方案。因此,wpa_cli 的用户友好性是一个挑战,但也许我不知道该工具的某些功能。
我被告知 nmcli 是最用户友好的并且不会牺牲任何可靠性,即使它依赖于 NetworkManager 作为依赖项。我收到了另一个建议,即 iw 最适合 Linux 桌面,因为它内置于所有 Linux 发行版中,但我的印象是,当配置了大量连接时,iw 不便于管理和自动化配置。ArchWiki 还说iw 仅支持 nl80211,但这可能不是一个现实的问题。
由于我似乎无法在这些工具之间找到太多比较,因此将不胜感激任何见解或参考。
我正在尝试设置wpa_cli
使用 level 命令的调试级别。无论我使用交互模式还是直接命令,级别命令总是失败。
wpa_cli -i wlan0 level 1
=> FAIL
Run Code Online (Sandbox Code Playgroud)
和交互模式:
wpa_cli
wpa_cli v2.3
Copyright (c) 2004-2014, Jouni Malinen <j@w1.fi> and contributors
This software may be distributed under the terms of the BSD license.
See README for more details.
Selected interface 'wlan0'
Interactive mode
> level 5
FAIL
Run Code Online (Sandbox Code Playgroud)
让它发挥作用的正确方法是什么?
我正在尝试获取连接失败时的调试消息(由于错误的 psk 或其他原因)
理论上是否可以在不提供 ESSID 的情况下连接到隐藏的 wifi?
我连接到隐藏 wifi 的方式需要提供一个 SSID(nmcli
拒绝有一个空白802-11-wireless.ssid
字段)。
nmcli con add type wifi con-name <con name> ifname wlan0 ssid <SSID>
nmcli con modify <con name> wifi-sec.key-mgmt wpa-psk
nmcli con modify <con name> wifi-sec.psk <password>
Run Code Online (Sandbox Code Playgroud) (我花了几个小时试图找到一种解决方法,事实证明这比最初预期的要困难得多。)
不过,问题本身很容易理解。我最近在我的一台机器上安装了一个无 GUI 的 Debian 衍生产品并进行了配置/etc/wpa_supplicant/wpa_supplicant.conf
为访问我的一个接入点,效果很好。
很快我就带着我的机器出门了,所以我添加了另一个网络(这次是我的热点模式的手机)到 wpa_supplicant.conf
. 可悲的是,我注意到即使在失去与初始路由器的连接后它也不会自动连接到手机的 AP,然后是wpa_cli --reconfigure
. 有趣的部分:取消注释中的第一个网络wpa_supplicant.conf
使我手机的 AP 工作完美无缺。如果两个网络都保持未注释,则只有第一个有效。
我正在阅读整个手册 wpa_supplicant.conf
但最接近我需要的是BSSID选项,它在这种情况下没有帮助。
所以我的问题是:如何更改网络控制器根据这些接入点的可用性来接入点?
更新:
我没有/usr/share/doc/wpa_supplicant/README.modes
,但只有/usr/share/doc/wpa_supplicant/README.modes.gz
因为符号链接太多而无法提取。
我的/etc/wpa_supplicant/wpa_supplicant.conf
:
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="Klaus B. Schuldiger"
scan_ssid=1
psk="----"
}
#network={
#ssid="Xperia XZ_acd9"
#scan_ssid=1
#psk="----"
#}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Android 和 Linux 之间建立 wifi 直接连接。我正在使用 rtl8188au。
我通过使用 wpa_supplicant 找到了一些关于 wifi direct 的提示,所以我得到了 wpa_supplicant v2.0。这就是我为 wifi-direct 所做的。
1.Compiled rtl8288au driver, activated nl80211.
2.Compiled wpa_supplicant and wpa_cli for nl80211.
3.Run wpa_supplicant on linux, with option -Dnl80211. success.
4.Set ip address for wlan0.
5.Run wpa_cli, and try to connect to android device.
Run Code Online (Sandbox Code Playgroud)
连接可以立即成功,但很快就断开了。
这是 wpa_cli 日志。
wpa_cli -p /var/run/wpa_supplicant
> p2p_find
OK
<3>P2P-DEVICE-FOUND e6:fa:ed:8a:5e:e8 p2p_dev_addr=e6:fa:ed:8a:5e:e8
pri_dev_type=10-0050F204-5 name='[Phone] Kulong' config_methods=0x188
dev_capab=0x25 group_capab=0x0
>
>
> p2p_connect e6:fa:ed:8a:5e:e8 pbc
OK
<3>P2P-FIND-STOPPED
<3>P2P-DEVICE-FOUND e6:fa:ed:8a:5e:e8 …
Run Code Online (Sandbox Code Playgroud) 假设我已连接wpa_cli
到网络mynetwork
:
# wpa_cli
>add_network
>set_network 0 ssid "mynetwork"
>set_network 0 psk "SupahSecretPassphrase"
>enable_network 0
>reconnect
Run Code Online (Sandbox Code Playgroud)
如何将此网络导出到 wpa_supplicant 配置文件,该文件包含:
network={
ssid="mynetwork"
psk="SupahSecretPassphrase"
}
Run Code Online (Sandbox Code Playgroud)
如果没有标准的方法,我想我就得回忆了 ~/.wpa_cli_history
PS:
我试过了,save_config
但我总是有一个失败的结果:
> save_config
FAIL
Run Code Online (Sandbox Code Playgroud) krishna@krishna-PC:~/Downloads/wificonnect1$ sudo wpa_cli scan
[sudo] password for krishna:
Selected interface 'wlan0'
OK
krishna@krishna-PC:~/Downloads/wificonnect1$ sudo wpa_cli scan_results
Selected interface 'wlan0'
bssid / frequency / signal level / flags / ssid
fc:0a:81:1d:6d:80 2412 -43 [WPA2-PSK-CCMP][ESS] econsys
00:24:01:ba:b4:65 2437 -72 [WPA-PSK-TKIP][WPA2-PSK-TKIP][WPS][ESS] Test
6c:72:20:f2:1a:6b 2412 -60 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] Hari
c0:ee:fb:31:ec:4a 2447 -76 [WPA2-PSK-CCMP][ESS] Vishal's hotspot
fc:0a:81:1c:6d:f0 2412 -61 [WPA2-PSK-CCMP][ESS] econsys
c4:12:f5:08:10:70 2427 -63 [WPA-PSK-CCMP][WPA2-PSK-CCMP][ESS] GoGreen
f4:f2:6d:6d:23:44 2462 -62 [WPS][ESS] joyglobal
krishna@krishna-PC:~/Downloads/wificonnect1$ sudo wpa_cli add_network
Selected interface 'wlan0'
1
krishna@krishna-PC:~/Downloads/wificonnect1$ sudo wpa_cli set_network 1 ssid "econsys" …
Run Code Online (Sandbox Code Playgroud) 我有一个 raspberrypi ZeroW,我正试图通过隐藏的 ssid 连接到网络。我知道我可以将这一行“scan_ssid=1”添加到我的 wpa_supplicant.conf 文件中以进行设置,但是我想通过 wpa_cli 进行所有网络配置。
手册页似乎没有关于隐藏 ssid 的任何内容,当我运行 set 命令时,它没有提供手册页中所述的所有变量选项的输出,我只是得到:“无效的 SET 命令 - 至少有 2 个参数是必需的。”
tldr:仅通过 wpa_cli 连接到隐藏的 ssid
有没有办法通过 断开网络连接wpa_cli
?我正在阅读手册页,并且已经能够wpa_cli
通过按钮连接 (WPS) 连接到我的路由器;但是我正在尝试编写一个脚本,该脚本将在发生特定事件时断开网络连接。
我尝试通过以下方式找到网络,nmcli
但调用该命令时我所连接的网络甚至没有显示nmcli connection show -active
。非常感谢。
是否可以将 IE 字段附加到我的 WiFi 热点,以便它出现在iwlist
其他机器扫描它的输出中?
例子:
我选择1234567891011121314151617181920
作为我的 wifi 热点的附加字段(MAC 地址11:22:33:44:55:66
)
用户使用命令扫描我的 wifi 热点iwlist wlan0 scan
,应该给出输出:
wlan0 Scan completed :
Cell 01 - Address: 11:22:33:44:55:66
[...]
IE: Unknown 1234567891011121314151617181920
[...]
Run Code Online (Sandbox Code Playgroud)之前systemd
,我只需编辑/etc/wpa_supplicant.conf
文件即可使用预共享密钥添加所需的网络:
$ cat /etc/wpa_supplicant.conf
network={
ssid="TPLINK"
psk="My secret pre-shared key"
}
Run Code Online (Sandbox Code Playgroud)
可是systemd
,我的呢/etc/wpa_supplicant.conf
?如何编辑我的网络和预共享密钥?
wpa-cli ×12
wifi ×8
nmcli ×3
wpa ×3
iwlwifi ×2
access-point ×1
android ×1
debian ×1
debugging ×1
iw ×1
networking ×1
raspberry-pi ×1
raspbian ×1
systemd ×1
wifi-hotspot ×1
wlan ×1