【问题标题】:Get wireless SSID through shell script on Mac OS X在 Mac OS X 上通过 shell 脚本获取无线 SSID
【发布时间】:2011-05-27 17:32:13
【问题描述】:

有没有什么方法可以在 Mac OS X 上通过 shell 脚本获取当前无线网络的 SSID?

【问题讨论】:

    标签: macos shell


    【解决方案1】:

    命令

    /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:我已经更新了第二个命令以适用于其中包含空格的 SSID。希望这会有所帮助!
    • 告诉awk 使用: 作为分隔符,您将获得整个SSID:awk -F':' '/ SSID/ {print $2}'
    • @Johnsyweb:根据802.11标准,SSID还可以包含字段分隔符':'
    • 如果您在开头和结尾都有空格,请使用awk -F' SSID: ' '/ SSID: / { print "x",$2,"x"}'
    【解决方案2】:

    哪里不是有一个轮子需要重新发明吗?

    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
    

    【讨论】:

    • 请注意上面 Johnsyweb 的评论:awk;而不是使用cut,你可以运行networksetup -getairportnetwork en1 | awk -F": " '{print $2}',无论标签包含“机场”还是“Wi-Fi”,它都可以工作。
    • 这里的缺点是您必须知道您的 wlan 接口名称。我在具有内置以太网(分配 e0)的 Mac 上看到了 e1,使 WiFi 接口 e1 在这个答案中似乎是这种情况。其他人有e0。这当然是一个简单的编辑,但如果您尝试使其通用,@Chetan 的答案似乎更容易
    • networksetup -getairportnetwork en1 | cut -d ' ' -f 4 工作正常,它不依赖于操作系统版本
    • 或者使用“networksetup -getairportnetwork en1 | awk '{print $NF}'” 甚至更好,因为它总是获取最后一个字段(同时由空格分隔)。
    • 这应该是公认的答案,因为当脚本在非交互模式下运行时,使用 /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport 的公认答案不起作用。跨度>
    【解决方案3】:

    以下内容已在 OS X 上进行了测试,打印的 SSID 没有任何硬编码的列宽:

    system_profiler SPAirPortDataType | awk -F':' '/Current Network Information:/ {
        getline
        sub(/^ */, "")
        sub(/:$/, "")
        print
    }'
    

    本质上,这会获取system_profiler SPAirPortDataType 的输出,并在“Current Network Information:”修剪前导空格和尾随冒号后打印行(因为SSID 可以包含:s)。

    【讨论】:

    • system_profiler 在我的 OS X 10.8 上有一点延迟。 networksetup 需要机场接口名称。我更喜欢airport | sed -n 's/^ *SSID: //p'
    • 谢谢。在 macOS Sierra 上是 airport --getinfo | sed -n 's/^ *SSID: //p'
    • 适用于不是 PITA 的苹果网络适配器,除非您在网卡损坏的 macbook 上使用 USB nic。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2019-08-05
    • 1970-01-01
    • 2011-03-02
    • 2015-11-05
    • 2011-07-04
    • 2014-09-19
    相关资源
    最近更新 更多