linux下USB抓包和分析流程
在windows下抓取usb包时可以通过wireshark安装时安装USBpcap来实现usb抓包,linux下如何操作呢?
是基于usbmon,本博客简单描述基于usbmon在linux系统上对通过usb口进行发送和接收的数据的抓包流程,分别描述了tcpdump支持usbmon和不支持usbmon的场景下,解析usb数据流的流程。部分系统环境中的tcpdump默认不支持usbmon,而在一般的centos系统和debian系统中是可以支持的。
整体流程图如下:

1. 挂载debugfs虚拟文件系统用于内核调试
2. 加载usbmon内核模块
sudo modprobe usbmon
3. 查看usbmon监控可以识别到的设备号。如下图,生成了几个usb设备号。
说明:
①、数字后面的s/t/u表示抓包保存的数据格式;我们使用u格式,其他2项忽略即可;
②、数字1/2/3分别表示所在的当前平台所拥有的USB总线,调试的usb设备挂在哪条总线下,就用哪个; 那么0数字表示什么含义呢?它表示抓所有总线上的包;
4. 找出你需要监控的总线编号
通过列举全部的usb/devices设备,确认Manufacturer,Vendor和Product之类的信息中是否有对应的需要监控的设备,这里Bus=02就是我们需要监控的USB总线号,Dev 20就是我们感兴趣的设备节点。
注意一个总线上可以有多个设备。
5. 使用usbmon抓取通讯数据包
(将抓取到的数据保存在 /tmp/usbmon_log.txt中,也是通过 Ctrl+C打断输出)
6. 这里抓取的是原始的usb包,可以通过 tcpdump –D list interface列出所有接口,来确认是否支持通过tcpdump抓取 usbmon的包。
如下输出则意味着可以通过tcpdump来抓取usbmon1/2的包,抓包结果输出到 xxx.pcap中,可以再在wireshark中打开,按照分析windows端抓取的usb包的方式进行解析。
通过如下命令进行抓包,然后将 .pcap文件拷贝到windows上,用wireshark打开即可进行解析。这里是暂存到 tmp目录下,也可以暂存到其他目录下。
7. 如何解析原始的 usbmon中输出的包格式
如果tcpdump中不支持 usbmon的接口,那么就只能去解析上述usbmon中输出的包格式。
包格式的解析可以参考如下博客:https://www.cnblogs.com/tzj-kernel/p/15256390.html
这里截取了一些关键字段的含义描述

所以这里的第1-2行是一个usb包的描述,第3-4行是另一个usb包的描述,前者是发送数据,后者是接收数据。
8. 如何过滤原始的 usbmon 包
在查看usbmon的数据时,存在较多的无效数据是我们不关心的,一方面是同一总线上其他设备的数据,一方面usb默认的test unit ready 包的请求和回应
可以通过如下的方式对总线上输出的内容进行过滤
参考
抓包流程介绍:https://blog.csdn.net/hdmsfhfg1/article/details/
抓包流程介绍:https://blog.csdn.net/faithzzf/article/details/
USBMON格式解析:https://www.kernel.org/doc/Documentation/usb/usbmon.txt
包格式介绍:https://www.cnblogs.com/tzj-kernel/p/15256390.html
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/14504.html