在 osx 上嗅探 usb 串行通信的方法

method to sniff usb-serial communication on osx

在 windows,有几个不错的替代品(大部分是付费的)可以让您监控串行端口通信。在 OSX 上有很多终端应用程序可以让您与串行设备通信,但我还没有找到监视串行端口通信的机制。

具体用例是: 我有一个位于 /dev/tty.usbmodem99999

上的 USB 串行设备

我已经编写了一个 运行 多个命令(成功)的集成测试。

但是在重新运行命令时设备没有响应。我已经(尽我所能)确认该设备没有问题。它按预期在其他平台上工作。但是在 OSX 我只能在重置设备(电源循环)后重新 运行 测试。

我的理论是我的代码没有正确释放设备,但是当我看不到我的设备和我的应用程序之间的通信时很难确认。

此应用程序:“http://www.aggsoft.com/serial-port-monitor.htm”有一个 'spy' 功能,我一直无法在 OSX 上找到类似的功能。我已经在 osx 上试验过 'serial tools',但它看起来不像是在单个端口上进行间谍操作,在那种情况下,它看起来像是两个设备之间的直通而不是而不是在端口监控。

非常感谢任何想法。

正在使用的串行库是: https://github.com/jacobsa/go-serial

你用过DTrace吗?

我用它来监控 FTDI USB/serial 转换器和第 3 方 'Black Box' 应用程序之间的 USB 通信。所以我可以获得应用程序发送到 USB 串行端口的 一切

这非常简单,因为我知道应用程序的名称,所以 DTrace 可以观察到它。我编写了 DTrace 脚本来观察应用程序打开的文件描述符(寻找“/dev/tty.usbmodem...”)然后观察与该文件描述符的交互。

我没有观察到设备驱动程序。原则上,如果内核或设备驱动程序被编译为与 DTrace 一起工作,DTrace 就可以做到这一点,尽管不确定是否如此。 Apple 还可以构建对 DTrace 'invisible' 的代码(例如,我相信 iTunes 对 DTrace 是不透明的,以保护其 DRM 机制。)

所以一个可能的起点是观察所有 OS open/creat 调用,寻找 /dev/tty.usbmodemXXX,并尝试识别子系统并观察它。您可能会发现可以观察子系统,这应该有助于了解 OS+设备驱动程序在做什么。

这不是微不足道的。如果您的时间有任何价值,获得硬件 USB 嗅探器并将其放入电缆中可能更便宜且更可靠,尤其是如果它只有 1.2Mbits 或 12MBits USB(对于更高的数据速率,嗅探器要贵得多)。

这些链接可能有帮助:
About DTrace
DTrace Guide
DTrace book
Brendan Gregg's Top 10 DTrace scripts for Mac OS X
Apple DTrace manual
Hooked on DTrace