如何通过 MACOS cli 确定 nss(空间流数)
How to determine the nss (number of spatial streams) via MACOS cli
在 MACOS (MacBook Pro) 上,我正在尝试确定一种通过 cli 导出 wifi 空间流数量的方法。生成 wifi 详细信息的终端命令是:
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I
...但是nss不是细节制作的一部分
nss 似乎只能通过 GUI 显示,方法是按住选项键并单击 wifi 图标。
目标是将其添加到我的 BASH 脚本中。
如果您将 -x
标志添加到 airport
实用程序,您将获得更详细的 XML 输出:
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I -x
示例输出
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AUTH_LOWER</key>
<integer>1</integer>
<key>AUTH_UPPER</key>
<integer>8</integer>
<key>BANDWIDTH</key>
<integer>80</integer>
<key>CHANNEL</key>
<integer>100</integer>
<key>CHANNEL_FLAGS</key>
<integer>1040</integer>
<key>GI</key>
<integer>400</integer>
<key>MCS_INDEX</key>
<integer>3</integer>
<key>NOISE_CTL_AGR</key>
<integer>-93</integer>
<key>NOISE_UNIT</key>
<integer>0</integer>
<key>NSS</key> <--- HERE IT IS
<integer>3</integer>
<key>RSSI_CTL_AGR</key>
<integer>-60</integer>
<key>RSSI_CTL_LIST</key>
<array>
<integer>-61</integer>
<integer>-57</integer>
<integer>-62</integer>
</array>
<key>RSSI_EXT_AGR</key>
<integer>0</integer>
<key>RSSI_EXT_LIST</key>
<array>
<integer>0</integer>
<integer>0</integer>
<integer>0</integer>
</array>
<key>RSSI_UNIT</key>
<integer>0</integer>
</dict>
</plist>
您可以将其定向到一个文件,然后使用 PlistBuddy
解析该文件 - 虽然可能有更优雅的方式我不知道(如果有人知道请联系我):
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I -x > /tmp/airport.plist
/usr/libexec/PlistBuddy /tmp/airport.plist -c "Print :NSS"
3
似乎 PlistBuddy
拒绝读取除真实可靠文件以外的任何内容,并且不会接受 bash
“处理替换” 作为输入...所以,我可以解决的唯一不使用临时文件的解决方案是:
airport -I -x | awk '/<key>NSS<\/key>/{getline; gsub(/[^0-9]/,""); print; exit}'
更新
我已经找到了一种可靠的方法,作为一个单行,没有使用 Python 的中间文件。 plistlib
模块在标准 Python 库中,因此无需安装 :-)
airport -I -x | python3 -c 'import plistlib, sys; pl=plistlib.loads(sys.stdin.buffer.read()); print(pl["NSS"])'
关键词: macOS, wifi, wi-fi, airport, airport utility, NSS, spatial streams, command-line, commandline, CLI, XML, PlistBuddy , plistlib.
plutil
是一个读取 plist 文件(-
for STDIN)的工具,并以另一种格式打印它或从中提取部分信息。
示例:
转换为JSON
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I -x \
| plutil -convert json - -o -
{...,"NSS":2,...}
提取一把钥匙
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I -x \
| plutil -extract NSS raw -
2
在 MACOS (MacBook Pro) 上,我正在尝试确定一种通过 cli 导出 wifi 空间流数量的方法。生成 wifi 详细信息的终端命令是: /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I
...但是nss不是细节制作的一部分
nss 似乎只能通过 GUI 显示,方法是按住选项键并单击 wifi 图标。
目标是将其添加到我的 BASH 脚本中。
如果您将 -x
标志添加到 airport
实用程序,您将获得更详细的 XML 输出:
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I -x
示例输出
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AUTH_LOWER</key>
<integer>1</integer>
<key>AUTH_UPPER</key>
<integer>8</integer>
<key>BANDWIDTH</key>
<integer>80</integer>
<key>CHANNEL</key>
<integer>100</integer>
<key>CHANNEL_FLAGS</key>
<integer>1040</integer>
<key>GI</key>
<integer>400</integer>
<key>MCS_INDEX</key>
<integer>3</integer>
<key>NOISE_CTL_AGR</key>
<integer>-93</integer>
<key>NOISE_UNIT</key>
<integer>0</integer>
<key>NSS</key> <--- HERE IT IS
<integer>3</integer>
<key>RSSI_CTL_AGR</key>
<integer>-60</integer>
<key>RSSI_CTL_LIST</key>
<array>
<integer>-61</integer>
<integer>-57</integer>
<integer>-62</integer>
</array>
<key>RSSI_EXT_AGR</key>
<integer>0</integer>
<key>RSSI_EXT_LIST</key>
<array>
<integer>0</integer>
<integer>0</integer>
<integer>0</integer>
</array>
<key>RSSI_UNIT</key>
<integer>0</integer>
</dict>
</plist>
您可以将其定向到一个文件,然后使用 PlistBuddy
解析该文件 - 虽然可能有更优雅的方式我不知道(如果有人知道请联系我):
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I -x > /tmp/airport.plist
/usr/libexec/PlistBuddy /tmp/airport.plist -c "Print :NSS"
3
似乎 PlistBuddy
拒绝读取除真实可靠文件以外的任何内容,并且不会接受 bash
“处理替换” 作为输入...所以,我可以解决的唯一不使用临时文件的解决方案是:
airport -I -x | awk '/<key>NSS<\/key>/{getline; gsub(/[^0-9]/,""); print; exit}'
更新
我已经找到了一种可靠的方法,作为一个单行,没有使用 Python 的中间文件。 plistlib
模块在标准 Python 库中,因此无需安装 :-)
airport -I -x | python3 -c 'import plistlib, sys; pl=plistlib.loads(sys.stdin.buffer.read()); print(pl["NSS"])'
关键词: macOS, wifi, wi-fi, airport, airport utility, NSS, spatial streams, command-line, commandline, CLI, XML, PlistBuddy , plistlib.
plutil
是一个读取 plist 文件(-
for STDIN)的工具,并以另一种格式打印它或从中提取部分信息。
示例:
转换为JSON
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I -x \
| plutil -convert json - -o -
{...,"NSS":2,...}
提取一把钥匙
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I -x \
| plutil -extract NSS raw -
2