在windows上有不少抓取USB包的工具,但有种情况程序是基于linux开发的,所以。
这里内核的一个工具usbmon 和 tcpdump,这里在Ubutu下测试,其他嵌入式设备并没有测试,相信只要内核支持了问题就不大。
1. 配置内核
Device Driver ---->
[*] USB support --->
<M> USB Monitor
2.加载模块
modprobe usbmon 后者 sudo insmod 路径/usbmon.ko
mount -t debugfs none_debugs /sys/kernel/debug
检查是否存在目录 /sys/kernel/debug/usb/usbmon
ls /sys/kernel/debug/usb/usbmon
0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u
如果总线号是1,则是1u,如果总线号是2,则是2u,依次类推。特殊情况是0u表示监听所有的
lsusb 确认需要监听的usb设备的pid 和vid
cat /sys/kernel/debug/usb/devices
# cat /sys/kernel/debug/usb/devices 确定你要监视的usb设备所在总线号和设备号
# 选择包含有 : Vendor=148f ProdID=5370 Rev= 1.01 的段落
# as follows:
# T: Bus=01Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
# D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
# P: Vendor=148f ProdID=5370 Rev= 1.01
# S: Manufacturer=Ralink
# S: Product=802.11 n WLAN
# S: SerialNumber=1.0
# C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=450mA
# I:* If#= 0 Alt= 0 #EPs= 5 Cls=ff(vend.) Sub=ff Prot=ff Driver=rtusbSTA
# E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
# E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
# E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
# E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
# E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
# 可以从第一行看到 Bus= 01,设备号是2
根据pid vid 得知 bus 和设备号,从而知道是1u 或者其他的文件
抓包:
cat /sys/kernel/debug/usb/usbmon/2u > ./log.txt
这里需要注意,由于我们的这个抓包命令,只能指定是抓哪个总线上,但同一个总线通常会有很多usb设备的,
如果我们只是关注特定的某个usb设备的话,我自己就需要留意设备地址字段,通过这个字段,我们就可以区分这个传输是不是我们要监听的设备发送出来的。
还有一个tcpdump 工具抓出来的包可以结合wireshark 工具来查看
下载tcpdump工具,
wireshark ,如果嵌入式设备不方面弄这个程序,可以在宿主机上装wireshark
tcpdump -D
1.usbmon1 (USB bus number 1)
2.usbmon2 (USB bus number 2)
3.eth4
4.any (Pseudo-device that captures on all interfaces)
5.lo
我们这里抓取usb2
tcpdump -i usbmon2 -w /data/usblog.pcap &
killall tcpdump
wireshark usblog.pcap
//-----------------------------------------------------------------------------------
挂载debugfs
[root@szclou /sys/kernel]# mount -t debugfs none_debugs /sys/kernel/debug
[root@szclou /sys/kernel/debug]#ls
bdi gpio memblock sched_features
clk hid pinctrl usb
extfrag iio pwm
输出设备信息:
#cat /sys/kernel/debug/usb/devices
T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0001 Rev= 3.10
S: Manufacturer=Linux 3.10.32 ohci_hcd
S: Product=Nuvoton NUC970 OHCI Host Controller
S: SerialNumber=nuc970-ohci
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 2
B: Alloc= 0/800 us ( 0%), #Int= 1, #Iso= 0
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev= 3.10
S: Manufacturer=Linux 3.10.32 ehci_hcd
S: Product=Nuvoton NUC970 EHCI Host Controller
S: SerialNumber=nuc970-ehci
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=480 MxCh= 4
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=14cd ProdID=8601 Rev= 0.00
S: Manufacturer=USB Device
S: Product=USB 2.0 Hub
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=256ms
T: Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0403 ProdID=6001 Rev= 6.00
S: Manufacturer=FTDI
S: Product=FT232R USB UART
S: SerialNumber=A600aJhL
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 90mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=ftdi_sio
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
T: Bus=01 Lev=02 Prnt=02 Port=01 Cnt=02 Dev#= 5 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=1221 ProdID=3234 Rev= 0.00
S: Manufacturer=USB2.0
S: Product=Flash Disk
S: SerialNumber=1000000000007B54
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
查看总线类型:
[root@szclou /sys/kernel/debug/usb/usbmon]#ls
0s 0u 1s 1t 1u 2s 2t 2u
查看接口设备:
[root@szclou /sys/kernel/debug/usb/usbmon]#/mnt/ext/tcpdump -D
1.usbmon1 (USB bus number 1)
2.usbmon2 (USB bus number 2)
3.any (Pseudo-device that captures on all interfaces)
4.lo
启动抓包工具:
[root@szclou /sys/kernel/debug/usb/usbmon]#/mnt/ext/tcpdump -i usbmon1 -w /mnt/data/usblog.cap &
在linux运行时出现了一个问题,应该是tcpdump导致。直接导出文件到windows环境下通过wireshark打开:
[root@szclou /mnt/app]#/mnt/ext/tcpdump -r /mnt/data/usblog.cap
reading from file /mnt/data/usblog.cap, link-type USB_LINUX_MMAPPED (USB with padded Linux header)
tcpdump: packet printing is not supported for link type USB_LINUX_MMAPPED: use -w
wireshark解析报文: