如何转储USB流量?


9

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

我当时以为

cat /dev/bus/usb/006/003

足够了,但是显然该命令立即返回并打印一些不可读的编码chars。

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

Answers:


11

您可以使用Wireshark捕获USB流量。
从它的维基

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

modprobe usbmon

必须以root身份运行。

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

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

mount -t debugfs / /sys/kernel/debug

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

libpcap 1.0.x中,用于在USB上捕获的设备的名称为usbn,其中n是总线号。在libpcap 1.1.0和更高版本中,它们的名称为usbmonn。

您还需要Wireshark 1.2.x或更高版本


2

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

#usbhid-dump --entity = all

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.