如何转储 USB 流量?

如何转储 USB 流量?

我有一个 USB 游戏手柄,我想查看和检查该外围设备实际发送到我的 PC/内核的信号和命令:我该如何做到这一点?

我假设类似的事情

cat /dev/bus/usb/006/003

已经足够了,但显然这个命令立即返回并打印一些不可读的编码字符。

有没有办法像这样“调试”USB 设备?

答案1

您可以使用 Wireshark 捕获 USB 流量。
从其维基百科:

要在 Linux 上转储 USB 流量,您需要该usbmon模块,该模块自 Linux 以来就已存在2.6.11。有关该模块的信息可在/usr/src/linux/Documentation/usb/usbmon.txtLinux 源代码树中找到。根据您使用的发行版以及该发行版的版本,该模块可能内置于内核中,也可能是可加载模块;如果它是可加载模块,则可能会或可能不会为您加载它,具体取决于您使用的发行版以及该发行版的版本。如果它是可加载模块,但未加载,则必须使用以下命令加载它

modprobe usbmon

必须以 root 身份运行。

1.0 之前的 libpcap 版本不包括 USB 支持,因此您需要至少libpcap1.0.0

对于内核版本21年6月21日之前,唯一可用的 USB 流量捕获机制是基于文本的机制,它将每个原始 USB 块捕获的数据总量限制为大约 30 字节。如果不修补内核,就无法改变这一点。如果 debugfs 尚未安装在 上/sys/kernel/debug,请通过以 root 身份发出以下命令来确保已安装它:

mount -t debugfs / /sys/kernel/debug

对于内核版本2.6.21 及更高版本,有一个用于跟踪 USB 数据包的二进制协议,该协议没有大小限制。对于该内核版本,您将需要 libpcap1.1.0 或更高版本,因为 libpcap 1.0.x USB 支持使用 USB 流量的内存映射机制,但没有正确处理,如果可用,libpcap 将使用该机制 - 它不能变得不可用,因此 libpcap 将始终使用它。

在 libpcap 1.0.x 中,用于在 USB 上捕获的设备的名称为,其中usbnn是公交车的号码。在 libpcap 1.1.0 及更高版本中,它们的名称为。usbmonn

您还需要一个 Wireshark1.2.x 或更新版本

答案2

更新是因为这是我查找时发现的第一个结果。我在 Debian Stretch 上找到的最佳方法如下:

# usbhid-dump --entity=all

这将转储从所有 USB 设备传入的数据。像对待美食一样拿起我的键盘,我可以读取流中的每个操作码。

相关内容