usb串口数据抓取方式
usbmon + tcpdump + wireshak
查看串口设备文件
root@gb-Default-string:/home/gb/work/test/test4/bin#ls -ltr /dev/
.......
crw-rw---- 1 root dialout 166, 0 Jul 10 21:04 ttyACM0
.......
检查usbmon模块
如果没有则加载usbmon模块,则进行加载
root@gb-Default-string:/home/gb/work/test/test4/bin#lsmod | grep usbmon
或者
root@gb-Default-string:/home/gb/work/test/test4/bin#ls /sys/module/usbmon/
或者
root@gb-Default-string:/home/gb/work/test/test4/bin#ls -tlr /sys/kernel/debug/usb/
root@gb-Default-string:/home/gb/work/test/test4/bin# modprobe usbmon
root@gb-Default-string:/home/gb/work/test/test4/bin#lsmod | grep usbmon
usbmon
root@gb-Default-string:/home/gb/work/test/test4/bin# ls /sys/module/usbmon/
coresize holders initsize initstate notes refcnt sections srcversion taint uevent
root@gb-Default-string:/home/gb/work/test/test4/bin# ls -tlr /sys/kernel/debug/usb/
total 0
-r--r--r-- 1 root root 0 Jul 10 21:04 devices
drwxr-xr-x 3 root root 0 Jul 10 21:04 xhci
drwxr-xr-x 2 root root 0 Jul 10 21:04 uhci
drwxr-xr-x 2 root root 0 Jul 10 21:04 ohci
drwxr-xr-x 2 root root 0 Jul 10 21:04 ehci
drwxr-xr-x 2 root root 0 Jul 11 02:31 usbmon
查看usb设备总线
root@gb-Default-string:/home/gb/work/test/test4/bin# lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 10000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/7p, 480M
|__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/7p, 480M
|__ Port 3: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 6, If 0, Class=Communications, Driver=cdc_acm, 12M
|__ Port 3: Dev 6, If 1, Class=CDC Data, Driver=cdc_acm, 12M
|__ Port 7: Dev 5, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 2: Dev 7, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 2: Dev 7, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
|__ Port 3: Dev 8, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
root@gb-Default-string:/home/gb/work/test/test4/bin# lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 008: ID 413c:301a Dell Computer Corp.
Bus 001 Device 007: ID 413c:2113 Dell Computer Corp.
Bus 001 Device 005: ID 214b:7250
Bus 001 Device 006: ID 0483:5740 STMicroelectronics STM32F407
Bus 001 Device 004: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 003: ID 1a40:0201 Terminus Technology Inc. FE 2.1 7-port Hub
Bus 001 Device 002: ID 1a40:0201 Terminus Technology Inc. FE 2.1 7-port Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@gb-Default-string:/home/gb/work/test/test4/bin# ls -tlr /sys/kernel/debug/usb/devices
-r--r--r-- 1 root root 0 Jul 10 21:04 /sys/kernel/debug/usb/devices
root@gb-Default-string:/home/gb/work/test/test4/bin# cat /sys/kernel/debug/usb/devices
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh=12
B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=1d6b ProdID=0002 Rev= 4.15
S: Manufacturer=Linux 4.15.0-142-generic xhci-hcd
S: Product=xHCI Host Controller
S: SerialNumber=0000:00:14.0
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=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 7
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=02 MxPS=64 #Cfgs= 1
P: Vendor=1a40 ProdID=0201 Rev= 1.00
S: Product=USB 2.0 Hub [MTT]
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=01 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=256ms
I:* If#= 0 Alt= 1 #EPs= 1 Cls=09(hub ) Sub=00 Prot=02 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=256ms
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 3 Spd=480 MxCh= 7
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=02 MxPS=64 #Cfgs= 1
P: Vendor=1a40 ProdID=0201 Rev= 1.00
S: Product=USB 2.0 Hub [MTT]
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=01 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=256ms
I:* If#= 0 Alt= 1 #EPs= 1 Cls=09(hub ) Sub=00 Prot=02 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=256ms
T: Bus=01 Lev=01 Prnt=01 Port=02 Cnt=03 Dev#= 4 Spd=480 MxCh= 4
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=1a40 ProdID=0101 Rev= 1.11
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=04 Port=02 Cnt=01 Dev#= 6 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=02(comm.) Sub=02 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0483 ProdID=5740 Rev= 2.00
S: Manufacturer=STMicroelectronics
S: Product=ALIENTEK STM32F4 Virtual COM
S: SerialNumber=367835693031
C:* #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=01 Driver=cdc_acm
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=16ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm
E: Ad=01(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
T: Bus=01 Lev=01 Prnt=01 Port=06 Cnt=04 Dev#= 5 Spd=480 MxCh= 4
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS=64 #Cfgs= 1
P: Vendor=214b ProdID=7250 Rev= 1.00
S: Product=USB2.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=05 Port=01 Cnt=01 Dev#= 7 Spd=1.5 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=413c ProdID=2113 Rev=33.09
S: Product=Dell KB216 Wired Keyboard
C:* #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
T: Bus=01 Lev=02 Prnt=05 Port=02 Cnt=02 Dev#= 8 Spd=1.5 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=413c ProdID=301a Rev= 1.00
S: Manufacturer=PixArt
S: Product=Dell MS116 USB Optical Mouse
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=10ms
T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=10000 MxCh= 6
B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 3.10 Cls=09(hub ) Sub=00 Prot=03 MxPS= 9 #Cfgs= 1
P: Vendor=1d6b ProdID=0003 Rev= 4.15
S: Manufacturer=Linux 4.15.0-142-generic xhci-hcd
S: Product=xHCI Host Controller
S: SerialNumber=0000:00:14.0
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
root@gb-Default-string:/home/gb/work/test/test4/bin#
注:Bus 001 Device 006: ID 0483:5740 STMicroelectronics STM32F407 就是我们要找一个usb串口
tcpdup抓取usb包
从上面设备总线上看出usb串口位于总线1上,所以用usbmon1
root@gb-Default-string:/home/gb/work/test/test4/bin# tcpdump -i usbmon1 -s0 -w usbmon1.pcap
tcpdump: listening on usbmon1, link-type USB_LINUX_MMAPPED (USB with padded Linux header), capture size 262144 bytes
^C545 packets captured
545 packets received by filter
0 packets dropped by kernel
如果tcpdump抓包出现下面错误,需要安装libpcap库
root@gb-Default-string:/home/gb/work/test/test4/bin# tcpdump -i usbmon1 -s0 -w usbmon1.pcap
tcpdump: usbmon1.pcap: No such file or directory
用wireshark分析usb包数据
从上面信息得到bus总线为1,deviceid为6,所以可以用usb.device_address == 6 && usb.bus_id==1的过滤条件去过滤包
参考文献
https://blog.csdn.net/qq_41782149/article/details/129021400
https://www.ngui.cc/zz/1997653.html?action=onClick
https://zhuanlan.zhihu.com/p/267820933
https://www.cnblogs.com/yhuse/p/LibPCap.html