在Mac OS X上通过shell脚本获取无线SSID

80
有没有办法在Mac OS X上通过shell脚本获取当前无线网络的SSID?
3个回答

149

这个命令

/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I

这将为您提供有关当前无线网络连接的详细信息。

要获取特定的SSID,请使用此命令:

/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I | awk -F: '/ SSID/{print $2}'

为了获取可能包含冒号和空格的SSID名称:

/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -I  | awk -F' SSID: '  '/ SSID: / {print $2}'

当我执行第二个命令时,它不能正常工作。我连接的SSID中有空格,而该命令只显示第一个单词。 - Mark Szymanski
1
@Mark:我已经更新了第二个命令,使其适用于带有空格的SSID。希望这可以帮到你! - Chetan
1
告诉awk使用:作为分隔符,你就可以得到完整的SSID:awk -F':' '/ SSID/ {print $2}' - johnsyweb
1
@Johnsyweb:根据802.11标准,SSID也可以包含字段分隔符“:”。 - youfu
如果在开头和结尾有空格,请使用以下命令 awk -F' SSID: ' '/ SSID: / { print "x",$2,"x"}' - A.D.

50

有哪些领域不需要重复造轮子?

networksetup -getairportnetwork en1 | cut -c 25-

在10.6中您可以使用该方法,而在10.7中,“硬件端口”更名为“Wi-Fi”,因此您需要少切一个字母。

aru$ networksetup -getairportnetwork en1 | cut -c 24-
Yorimichi

如果设备名称不是en1,则需要先获取正确的设备名称,然后获取相应的SSID:

networksetup -listallhardwareports | awk '/Wi-Fi/{getline; print $2}' | xargs networksetup -getairportnetwork

12
请注意Johnsyweb在上面的评论中提到了awk;相比使用cut命令,你可以运行networksetup -getairportnetwork en1 | awk -F": " '{print $2}'命令,这将适用于标签中是否包含“Airport”或“Wi-Fi”。 - larsks
5
这里的缺点是你需要知道你的 WLAN 接口名称。我曾经在具有内置以太网(分配为 e0)的 Mac 上看到过 e1,这使得 WiFi 接口成为 e1,这似乎是本答案的情况。其他人可能是 e0。这当然很容易编辑,但如果你试图让它更通用,@Chetan 的答案似乎更简单。 - nhed
或者,使用:networksetup -getairportnetwork en1 | cut -d':' -f2 | cut -c 2- - RichS
2
networksetup -getairportnetwork en1 | cut -d ' ' -f 4 运行良好,不依赖于操作系统版本。 - aymericbeaumet
1
甚至更好的是使用“networksetup -getairportnetwork en1 | awk '{print $NF}'”命令,无需计数,因为它总是获取最后一个字段(以空格分隔)。 - Michele Dall'Agata
1
这应该是被接受的答案,因为当脚本在非交互模式下运行时,使用/System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport的被接受答案不起作用。 - et071385

7
下面的内容已在OS X上进行了测试,可以打印出SSID而不需要硬编码列宽:
system_profiler SPAirPortDataType | awk -F':' '/Current Network Information:/ {
    getline
    sub(/^ */, "")
    sub(/:$/, "")
    print
}'

基本上,这个操作会获取 system_profiler SPAirPortDataType 的输出,并打印出 "Current Network Information:" 后面的一行,去掉前导空格和尾随冒号(因为 SSID 可能包含 :)。

3
system_profiler在我的OS X 10.8上有一点延迟。networksetup需要机场接口名称。我更喜欢使用airport | sed -n 's/^ *SSID: //p' - youfu
谢谢。在macOS Sierra上,它是airport --getinfo | sed -n 's/^ *SSID: //p' - thisleejones
适用于苹果网络适配器,这很顺畅,除非你正在使用一个有损坏的网络卡的MacBook上的USB网卡。 - ipatch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接