是否有 API 或软件可以获取 Mac 上 WiFi 信号的准确强度?

Is there an API or software to get accurate strength of a WiFi signals on Mac?

是否有 API、shell 命令或 AppleScript 可以准确读取 Mac OSX 中的当前 WiFi 强度?

仅供参考,我还可以打开浏览器并使用 JavaScript(如果它具有可用的值)。

我想做的是检查厨房或客厅不同位置的 WiFi 强度。我需要检查每个地点的 WiFi 强度。如果它很低,我会搬到一个新的地方。 OSX 显示的 WiFi 条对我来说数据不足。

我必须承认,我不知道 OS X 是否具有易于访问的接收强度指标等信息。

我可以从 RF 通信工程师的角度告诉您,显示的信号强度完全不准确,更不能真正预测通信的效果。

如您所说,条形图对任何人来说都不够信息 -- 事实上,您已经可以拥有五种不同数量的条形图,这通常会大大夸大这些东西可用于操作系统的准确性. WiFi 质量远远超过接收到的信号强度,因此您无法直接将条形图映射到质量。我真的不知道为什么 GUI 会继续包含该措施而不是例如衡量沿途丢失了多少数据包(这实际上是 OS 可以观察到的东西)。

我假设您想做类似 "if WiFi A is weak, switch to WiFi B" 或类似的事情。我认为这样做的正确方法实际上至少是 OSI 层模型的两个步骤。我个人只是在互联网上的某个地方设置了一个服务器,它可以回复 UDP 数据包并且可以 ping 通。然后,您只需使用标准 ping 来确定延迟是否仍然可以接受,并对服务器数据包使用短 UDP 来计算您看到的数据包丢失量(您也可以通过 ping 和 ICMP 来做到这一点,但这通常不允许您每秒发送几百个数据包——我会定期这样做)。

这是一个使用 CoreWLAN 框架的简单 Python 脚本:

#!/usr/bin/python

from AppKit import CWInterface

IFACE = 'en0'
NAME  = 'MyWifiNetwork'

interface      = CWInterface.interfaceWithName_(IFACE)
results, error = interface.scanForNetworksWithName_error_(NAME, None)

for result in results:
    print 'SSID:', result.ssid()
    print 'RSSI:', result.rssiValue()

这是一个隐藏得很好的gem。只需在 Finder 中导航到文件夹

/System/Library/CoreServices/Applications

和运行

Wireless Diagnostics.app

它有很多内置工具。

你点击"Continue"之前(在第一个window)你应该检查"Window" 可用工具的菜单:

  • 精确频道的 WiFi 嗅探器 ⌘6
  • 性能分析器(signal/Noise)⌘5
  • Wifi 扫描器(可用网络)⌘4
  • 某些协议的记录器(如 DHCP、DNS 等)⌘3
  • 有关已连接 WiFI 的信息 ⌘2(与按住 Alt 键并单击菜单栏 WiFi 时相同)

回复关于1.21吉瓦的问题

关于以上工具:

  • 仅当 您单击第一个屏幕中的 "continue" 按钮时,才会收集报告
    • 正如我上面所说,您不需要点击它。
    • 可以使用这些工具而无需收集任何报告。

关于报告发送:

  • 该应用会警告您有关数据收集的信息。
  • 报告已放入您的桌面。 (作为一个名为 date_string.wdmon 的文件)
  • 应用程序不会自动向 Apple 发送报告的任何部分。
  • 如果需要,您可以将它发送给苹果 - 我个人也不想。 :)
  • 如果用户愚蠢到双击报告文件(触发报告发送的原因),在他之后,阅读第一个屏幕上的警告他自己的错。
  • 您可以监控自己完成了哪些传出连接

总结:

  • 甚至不需要开始收集报告。 (只是不要点击继续按钮)
  • 可以使用 工具 而无需 报告收集 - 正如我所说,它们在 Window menu 中可用它已经在我的答案中了。
  • 如果您不知道发生了什么,请不要双击文件

警告用户数据收集是一件好事。感谢您的明确警告。

有一个内置的机场命令可以执行此操作。它的位置是:

/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport

为方便起见,您可以创建一个 link,这样您就可以从任何地方 运行 命令。

 sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/sbin/airport

获取有关当前无线网络的信息

airport -I

http://osxdaily.com/2007/01/18/airport-the-little-known-command-line-wireless-utility/

假设您已经创建了 link,一个将值转换为百分比并显示通知的 AppleScript:

set wirelessRSSI to do shell script "airport -I | grep CtlRSSI | sed -e 's/^.*: //g'"
set wirelessStrength to (wirelessRSSI + 100) * 2
display notification "Wireless sigal quality: " & wirelessStrength & "%"