为什么 usbmon 在文件夹中的单个总线有多个节点/sys/kernel/debug/usb/usbmon/
(如 2s、2u、2t)?
当我尝试使用我的设备嗅探 USB 流量时,似乎丢失了一些 USB 帧。 (我的应用程序使用U2F-HiD与设备通信,并且一些数据包长度超过128字节。)
嗅探所有流量并将其解析为可用形式的正确方法是什么? (任何教程都会非常有用)现在我只使用cat
重定向到文件。
答案1
来自Documentation/usb/usbmon.txt
内核源代码:
目前支持两种格式:原始格式或“1t”格式和“1u”格式。内核 2.6.21 中已弃用“1t”格式。 “1u”格式添加了一些字段,例如 ISO 帧描述符、间隔等。它产生的行稍长,但在其他方面是“1t”格式的完美超集。
然后它继续解释这些字段的含义。 etc.节点1s
提供某种状态(例如nreaders
= 读者数量 = usbmon 事件的消费者),但我不知道详细信息,也从未使用过它们。
您可以使用类似wireshark
或虚拟分析仪更轻松地分析流量。还可以通过捕获tcpdump
和事后分析进行:wireshark
sudo tcpdump -i usbmon1 -w usbmon.pcap &
编辑
您可以将该usbmon.pcap
文件加载到wireshark中,就像通过tcpdump或其他方式获取的其他pcap文件一样。
IIRC,usbhid-dump
读取并转储 HID描述符 由内核获取(因此它不会通过交换消息来获取它),并且有一些内核 API 更改和/或您必须取消绑定 USB 设备才能访问 HID,但我忘记了详细信息。
您可以通过挂载直接访问 HID 描述符,无论是原始描述符还是内核解析debugfs
mount -t debugfs none /sys/kernel/debug
然后看着/sys/kernel/debug/hid/<dev>/rdesc
。hid-rd
还可以解析原始 HID 描述符。
如果您正在寻找 HID报告,使用相应的hidraw
设备。