一、UsbMon的使用步骤

一般linux内核提供了usbmon这个工具,想要启用UsbnMon,必须挂载debugfs并加载usbmon模块;之后确认usbmon是否可用及USB设备所在总线分支,最后使用usbmon抓包并分析;
对应步骤命令如下:

1、挂载debugfs

# mount -t debugfs none_debugs /sys/kernel/debug (这个也可以在内核配置中直接使能挂载);

2、加载usbmon模块

# modprobe usbmon (如果usbmon已编译到内核,本步骤可以忽略,至于modprobe的作用,请参见该博客

3、确认usbmon是否可用

# ls /sys/kernel/debug/usb/usbmon
# 0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u
说明:
①、数字后面的s/t/u表示抓包保存的数据格式;我们使用u格式,其他2项忽略即可;
②、数字1/2/3分别表示所在的当前平台所拥有的USB总线,调试的usb设备挂在哪条总线下,就用哪个; 那么0数字表示什么含义呢?它表示抓所有总线上的包;

4、确认usb设备挂在哪条总线

运行”cat /proc/bus/usb/devices”, 就会发现设备T开头的行.T行有1个bus字段, Bus=03 说明它在bus3口上;如下所示:
T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0557 ProdID=2004 Rev= 1.00
S: Manufacturer=ATEN
S: Product=UC100KM V2.00

5、使用usbmon抓取通讯数据包

# cat /sys/kernel/debug/usb/usbmon/3u > /tmp/usbmon_log.txt
(将抓取到的数据保存在 /tmp/usbmon_log.txt中)

二、UsbMon抓取的数据包格式解析

  1. 可以参见这篇文章详解usbmon抓取的log各字段的含义

  2. 类似: ffff9bbbaf235b00 1482700625 C Ii:3:001:1 0:2048 1 = 04的字段解析以及Co/Ci / Ii/Io等含义参见以下网址: USB抓包usbmon在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐