在 Linux 上,iw
当iwlist
它们扫描可用的 WiFi 网络时提供大量信息。我想说的是太多了信息。 2,308 行对于人类来说解析起来太多了。诚然,我在一栋繁忙的公寓楼里,但更重要的是,冗长的输出实际上对我来说是一个障碍。
$ sudo iw dev wlp8s0 scan | wc -l
2308
我更喜欢更简单的输出。一个相对简短的表格,显示附近接入点的简明概述。此输出仅显示人们可能期望从 GUI WiFi 实用程序获得的各种字段(SSID、信号强度、加密类型),但在终端中。
似乎类似的用户已经在我之前完成了同样的任务,并且在编写复杂的脚本和程序来解析 Linux 无线工具(如iw
.1,2,3,4,5,6,7,8,9,10,11,12,13,14
iw
我发现的这个问题的几乎每个答案都建议解析诸如和iwlist
使用grep
、sed
、 之类的工具的输出awk
,但这似乎不是一个很好的答案。特别是因为iw
明确指出其输出应该不是被刮掉。
不要对这个工具进行屏幕抓取,我们认为它的输出不稳定。
我想说nmcli
来了八九不离十到我想要的,除了我认为仅仅NetworkManager
为了通过nmcli
.而且,iw
和iwlist
似乎比nmcli
我在谷歌搜索中更普遍。
WiFi扫描输出如果配置在 FreeBSD 上看起来完美的。我不确定该实现是否在所有 BSD 风格中都很常见,但它正是我希望在 Linux 中使用的工具。
是否有一个类似的库存/标准工具适用于几乎每个版本的 Linux,可以扫描 WiFi 网络并列出简单的输出如上?
答案1
大多数 Linux 平台都附带wpa_supplicant
,它可以独立使用,也可以由其他“框架”(如 NetworkManager 及其 CLI 工具)使用wpa_cli
。我不知道更新的 systemd 方法(它们往往会取代其他所有方法......)。
# wpa_cli
wpa_cli v2.6
[...]
Selected interface 'wlan0'
Interactive mode
> scan
OK
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>CTRL-EVENT-NETWORK-NOT-FOUND
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>CTRL-EVENT-NETWORK-NOT-FOUND
> scan_results
bssid / frequency / signal level / flags / ssid
xx:xx:xx:xx:xx:xx 2412 -39 [WPA2-PSK-CCMP][ESS]
xx:c7:29:xx:xx:xx 2462 -56 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] SomeSSID
xx:e9:dd:xx:xx:xx 2412 -57 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] OtherSSID
xx:8e:78:xx:xx:xx 2412 -65 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] AthirdSSID
[...]
或非交互式:
# wpa_cli scan_results
Selected interface 'wlan0'
bssid / frequency / signal level / flags / ssid
xx:xx:xx:xx:xx:xx 2412 -40 [WPA2-PSK-CCMP][ESS]
[...]
(仅供参考,这是一个隐藏的 ssid)。
答案2
我看到有人提供了BusyBox兼容版本这里。我对其进行了改进,使其以 JSON 格式输出并且兼容 unicode。请检查它出去。
下面是将 的输出解析为 JSON 的示例iw
。
wifiscan wlan0 | jq
结果
[
{
"mac": "c2:4b:e6:1e:95:b3",
"ssid": "Angel 的 Chromecast",
"freq": "2412",
"sig": "-62.00 dBm",
"sig%": "63.3333",
"wpa": "n",
"wpa2": "y",
"wep": "n",
"tkip": "n",
"ccmp": "y"
},
{
"mac": "1c:49:7b:30:23:3f",
"ssid": "TAO",
"freq": "2412",
"sig": "-56.00 dBm",
"sig%": "73.3333",
"wpa": "n",
"wpa2": "y",
"wep": "n",
"tkip": "n",
"ccmp": "y"
}
]
答案3
我在使用 Raspberry Pi OS 的 Raspberry Pi 上使用它,我最喜欢它,因为它为每个网络提供一行输出以及我通常感兴趣的信息:BSSID、SSID 和 2.4 GHz 与 5 GHz:
sudo wpa_cli -i wlan0 scan; sleep 5; sudo wpa_cli -i wlan0 scan_results
笔记:
-i
对我来说,尽管我只有一个 WiFi 接口,但指定使用的接口是必要的。- 您可以省略
sleep
并简单地运行该命令几次。几秒钟后,网络将出现。