【问题标题】:Is there an API or software to get accurate strength of a WiFi signals on Mac?是否有 API 或软件可以在 Mac 上获得准确的 WiFi 信号强度?
【发布时间】:2015-06-15 07:01:00
【问题描述】:

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

仅供参考,如果有可用的值,我也可以打开浏览器并使用 JavaScript。

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

【问题讨论】:

  • 如果您在单击 WiFi 菜单栏项的同时按 Alt,您将获得连接详细信息。

标签: macos shell applescript


【解决方案1】:

这是一个使用 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()

【讨论】:

    【解决方案2】:

    有一个内置的机场命令可以做到这一点。它的位置是:

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

    为方便起见,您可以创建一个链接,让您可以在任何地方运行命令。

     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/

    假设您已经创建了链接,这是一个将值转换为百分比并显示通知的 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 & "%"
    

    【讨论】:

    • 我尝试从它所在的目录运行该命令,它显示-bash: airport: command not found。如果我列出它说它在那里的目录,ls Info.plist airport airportd.sb version.plist
    • 我的意思是说我必须为命令创建一个别名才能工作吗?如果我将目录更改为 /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/ 然后运行 ​​airport 它会给我这个错误。如果我使用sudo ln -s ... 创建一个符号链接,它就可以工作。无论如何,如果我可以创建一个到机场的链接,它看起来会起作用。
    • 单独指定一个命令将在指定的目录列表中搜索它,('echo $PATH' 来查看它们)。如果你想从当前目录运行命令,一旦你在那个文件夹中:./airport
    • 由于某种原因,添加路径似乎不适用于airport。我必须创建一个符号链接才能使其工作。我可能可以解决这个问题。仅供参考。
    • 在此处查看仅当目录不存在时才添加到路径的方法:superuser.com/a/39995 将其添加到 ~/.bash_profile (OS X 不读取 .bashrc 用于交互式 shell) ,然后使用它:pathadd ...
    【解决方案3】:

    我必须承认,我不知道 OS X 是否有可以轻松访问的接收强度指示器等信息。

    我可以从 RF 通信工程师的角度告诉您的是,显示的信号强度几乎是准确的,而且它更不能用于真正预测通信的工作情况。

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

    我假设您想做类似“如果 WiFi A 很弱,切换到 WiFi B”或类似的操作。我认为正确的做法实际上是至少在 OSI 层模型上升级两步。我个人只是在互联网上的某个地方设置了一个服务器,它回复 UDP 数据包并且可以 ping 通。然后,您只需使用标准 ping 来确定延迟是否仍然可以接受,并使用短 UDP 到服务器数据包来确定您看到多少数据包丢失(您也可以通过 ping 和 ICMP 做到这一点,但是这通常不会让你每秒发送几百个数据包——这是我定期做的)。

    【讨论】:

    • 这与我想要做的非常接近。 “检查 WiFi 强度。如果 WiFi 较弱,请通知用户移动到另一个位置。检查 WiFi 强度。如果 WiFi OK 则不执行任何操作。重复”。
    • 我喜欢 ping 服务器并检查延迟的想法。我可以在我的路由器上设置一个服务器并 ping 它吗?还是我本地主机上的服务器并通过路由器路由它?我熟悉 ping、tracert 和其他一些 shell 命令,但不足以通过 localhost 将其路由回。
    • 噗,这是一个很好的问题。如果你有足够的权限在你的系统中深入地摆弄,你可能会这样做。如果我是你,我只会 ping 路由器。在 OS X 下找到默认路由器应该很容易。对于非超级用户,您应该尝试 OS X 的 ping 作为ping -i <interval> 的最低设置。
    • 顺便说一句,延迟不会有太大的不同。有趣的是必须重新传输的低级别数据包的百分比。在 linux 下,你可以通过 SYSFS 解决类似的问题,但我真的不知道 darwin 或任何 OS X 网络堆栈。
    【解决方案4】:

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

    /System/Library/CoreServices/Applications
    

    然后运行

    Wireless Diagnostics.app
    

    它有很多内置工具。

    点击“继续”之前(在第一个窗口中),您应该检查“窗口”菜单中的可用工具:

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

    回复关于 1.21 吉瓦的问题

    关于以上工具:

    • 只有在您点击第一个屏幕中的“继续”按钮时才会收集报告。
      • 如上所述,您不需要点击它。
      • 可以使用这些工具而无需收集任何报告。

    关于报告发送:

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

    总结:

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

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

    【讨论】:

    • 当您使用它时,您似乎同意向 Apple 发送诊断报告。不,谢谢。 i.stack.imgur.com/VFEFz.png
    • 感谢您清理它。我并不是要散布任何错误信息,但正如您所说,“仅当您单击第一个屏幕中的“继续”按钮时才会收集报告。”我现在看到您无需单击继续即可使用它。我认为这对苹果来说有点欺骗性。但是我可以单击窗口上的红色关闭按钮并在没有它的情况下使用它。
    • 显然您必须先打开一个窗口,然后才能使用“继续”按钮关闭对话框。否则应用程序将关闭。我选择了 Window > Info,然后关闭了对话框。
    • @1.21gigawatts 或者直接离开第一个窗口(不要点击继续)并使用工具:)
    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    相关资源
    最近更新 更多