发新帖本帖赏金 100.00元(功能说明)我要提问
返回列表
打印
[资料干货]

玩过USB协议抓包吗?Wireshark工具带你一起实现

[复制链接]
1960|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dffzh|  楼主 | 2025-4-11 15:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dffzh 于 2025-4-14 17:13 编辑

#技术资源# #申请原创#
@21小跑堂   

之前在我发的一篇帖子([size=1em]USB的HID协议怎么会这么复杂??,https://bbs.21ic.com/icview-3444392-1-1.html)里通过一个设备描述符协议简单说明了USB协议的复杂性;那到底怎么样对USB协议数据进行抓包和解析呢?今天就带大家一起,通过使用网络抓包常用的Wireshark工具对USB鼠标进行抓包,并执行简单的解析学习。
以下将从三个方面逐步进行,先搭建抓包环境,再设置抓包过滤条件,最后再解析几条USB报文。
一、安装Wireshark和USBPcap
可以从官网https://www.wireshark.org/下载Wireshark的最新版本:

然后按以下步骤进行:




可以勾选一下安装桌面图标和快速启动图标:

指定安装路径,尽量不要放到带有中文字符的路径下面:

如果没有安装Npcap,这里勾选安装:

勾选安装USBPcap




安装USBPcap:


安装路径保持和Wireshark的安装路径在同一个根目录下面



以上软件安装完成后,立即重启电脑:
至此,软件安装完成。

二、确认安装环境
重启电脑后,打开USBPcap的安装路径下的USBPcapCMD.exe并执行:
如果界面如下,即可以识别到电脑上已连接的USB设备,说明安装成功:
该界面会按USB类型将USB设备显示到不同的端口号里面。
再打开Wireshark的安装路径下的文件夹extcap,查看是否有USBPcapCMD.exe:
执行后,如果也成功,说明Wireshark软件里已经包含有USBPcap的插件了。
打开Wireshark,进入以下页面:
即可看到USBPcap的插件信息了。


在Wireshark主界面的输入捕获接口选项(网卡)里,也可以看到USBPcap:
在以下界面,也可以看到或者重新选择输入捕获接口:

三、USB鼠标抓包测试
1、进入抓包操作
进入Wireshark的安装路径下的文件夹extcap,在该文件夹路径下鼠标右键打开“在终端中打开”命令窗口:
运行“.\USBPcapCMD.exe”命令后,可以查看当前已连接的USB设备属于哪个分支和端口:
在抓包和实际调试、测试时,如果发现USB设备异常了,可以执行一下,以确认USB设备是否和主机处于正常连接状态。

从以上命令执行接口可以看出,目前USB设备都挂载在USBPcap2上面,并且鼠标设备属于端口1的USB输入设备,USB串口属于端口4。
在Wireshark主界面里,在输入捕获接口选项里选择网卡USBPcap2并双击打开,可以看到正在通讯的USB协议数据包:
其中目的地址/或源地址2.12.0的数字结构含义如下:
2:PORT2
12:USB设备地址
0:端点地址

这里简单介绍一下URB:
USB Request Block  USB请求数据块  可变长度
是USB设备驱动中用来描述与USB设备通信所用的基本载体和核心数据结构;
是USB主机与设备之间传输数据的封装
一个URB包含了执行USB传输所需要的所有信息;
进行数据传输时,需要分配一个URB结构体,并对其进行初始化,并将其提交给USB核心;

USB核心解析URB,将控制信息提交给主机控制器,由其负责数据到设备的传输。

2、设置抓包的过滤条件
有时候由于设备太多,报文太多,但我们只需要查看和分析指定USB设备的报文时,可以通过设置过滤过滤器的方式来拦截不需要显示的报文,常见的过滤条件包括:
usb.device_address == x  按设备地址过滤,其中x表示设备地址的值
备注:过滤条件的输入框显示为绿色:过滤条件符合语法要求,红色:不符合;
usb.bus_id == x 按总线ID过滤
usb.src == x.x.x 按源地址过滤
usb.dst == “x.x.x” 按目的地址过滤,一定要加英文双引号,否则会查不到报文
usb.endpoint_address == x 按端点地址过滤,其中x表示端点地址的值
usb_endpoint_address_direction == x  按报文的传输方向过滤
x=0,表示过滤掉主机到设备的报文

x=1,表示过滤掉报备到主机的报文
其他的过滤条件:
在过滤条件输入框里输入信息时,会显示所有子成员信息供选择:
另外,可以通过运算符“&&”来组合过滤条件:
比如过滤出设备地址为19,由主机到设备的报文:


3、抓包分析

以我们常用的USB鼠标为例
开启wireshark抓包=>插入USB鼠标=>关闭wireshark抓包,经过以上操作后即可显示主机和鼠标的通信报文:
第1条报文(host->device, h2d,请求设备描述符)
主机向设备请求(Request)设备描述符信息(Device Descriptor)
设备描述符介绍:
设备描述符说明了USB设备的通用信息,提供了关于设备、设备的配置以及任何设备所归属的类的信息;
USB设备只有一个设备描述符,并且是在设备连接时主机读取到的第一个描述符;
设备描述符所含的信息,被主机用来取得设备的额外内容。
如下:
主机向设备请求(Request)设备描述符信息(Device Descriptor)
设备描述符介绍:
设备描述符说明了USB设备的通用信息,提供了关于设备、设备的配置以及任何设备所归属的类的信息;
USB设备只有一个设备描述符,并且是在设备连接时主机读取到的第一个描述符;
设备描述符所含的信息,被主机用来取得设备的额外内容。
主机请求设备的设备描述符的报文解析如下:

第2条报文(device->host, d2h,响应设备描述符)
设备响应(Response)主机的获取设备描述符信息(Device Descriptor)

设备响应主机请求的设备描述符的报文解析如下:

其中设备描述符的帧格式如下:


以下链接可以查阅上述各字段的详细说明:
https://blog.csdn.net/u012028275/article/details/109272115


第3条报文(host->device, h2d,请求配置描述符)
主机向设备请求(Request)配置描述符信息(Configuration Descriptor)
配置描述符介绍:
描述了USB配置,包含有关配置及其接口、备用配置等信息。
主机请求设备的配置描述符的报文解析如下:
与主机请求设备描述符的报文格式一致,都占36字节,数据内容有不同,区别在于:
1、 USB URB包的IRP ID(帧ID)字段数据不同;
2、 Setup Data包的bDescriptorType字段数据不同,为“CONFIGURATION(0x02)”.;

3、 Setup Data包的wLength字段数据不同,为9,表示请求的包数据长度为9个字节。

第4条报文(device->host, d2h,响应配置描述符)
设备响应(Response)主机的获取配置描述符信息(Configuration Descriptor)
设备响应主机请求的配置描述符的报文解析如下:

第5条报文(host->device, h2d,请求多个描述符)
主机向设备请求(Request)配置描述符、接口描述符、HID描述符和端点描述符信息
备注:
主机发送获取配置描述符请求时,USB设备会返回整个配置描述符的集合,通常包括:
配置描述符、接口描述符、端点描述符及其他可选描述符等。

与主机请求配置描述符的报文格式一致,都占36字节,数据内容有不同,区别在于:
1、Setup Data包的wLength字段数据不同,为34,表示请求的包数据长度为9个字节。

第6条报文(device->host, d2h,响应配置描述符)
设备响应(Response)主机的获取配置描述符、接口描述符、HID描述符和端点描述符信息。
配置描述符:报文格式已在前文说明;

接口描述符:INTERFACE DESCRIPTOR

HID描述符:HID DESCRIPTOR

描述HID设备的特性,比如报告描述符的数量、报告描述符的长度等。

端点(终结点)描述符:ENDPOINT DESCRIPTOR
描述了USB规范定义的端点信息,包含有端点的带宽等信息。

四、USB协议包在线分析工具
为了便于大家进一步分析USB协议数据包,推荐一个USB协议包在线分析工具,也是偶然一次在网上发现的,链接如下:
https://www.usbzh.com/tool/usb.html
只要把数据包按要求的格式拷贝到窗口里,然后选择指定的解析方式,即可输出结果;
比如如果是电脑向USB鼠标发送 请求HID报告描述符,则需要选择的解析方式是“USB标准请求”,解析结果如下:
然后USB鼠标响应电脑的HID报告描述符请求,则需要选择的解析方式是“HID报告描述符”,解析结果如下:
这个工具会以类似结构体的方式直观地显示数据包结构,有助于开发者更好地去理解!

以上主要介绍了6种电脑(主机)和USB鼠标(从机)之间常见的通信协议数据包,其他的还有很多协议数据包,就不一一介绍了!

总之,如果要想深入理解类似于USB这种比较复杂的协议,还是需要自己实际动手操作,并逐个字节数据分析,才能真正理解和掌握!

7401367f8c0da010fb.png (190.55 KB )

7401367f8c0da010fb.png

6522167f8c0f54297f.png (387.12 KB )

6522167f8c0f54297f.png

4531067fc619e6e649.png (88.07 KB )

4531067fc619e6e649.png

1993567fc61e0c12dd.png (219.32 KB )

1993567fc61e0c12dd.png

2983167fc61fb24151.png (109.46 KB )

2983167fc61fb24151.png

230467fc6201a7109.png (243.76 KB )

230467fc6201a7109.png

1337167fc621f03907.png (116.51 KB )

1337167fc621f03907.png

297667fc6226a2bd9.png (100.04 KB )

297667fc6226a2bd9.png

6926267fc62443f95e.png (109.59 KB )

6926267fc62443f95e.png

3250367fc624c6fcbe.png (237.01 KB )

3250367fc624c6fcbe.png

使用特权

评论回复

打赏榜单

21小跑堂 打赏了 100.00 元 2025-04-28
理由:恭喜通过原创审核!期待您更多的原创作品~~

评论
21小跑堂 2025-4-28 10:24 回复TA
使用Wireshark工具实现USB协议抓包,作者从软件的安装入手,从头开始一步步实现,密集图文,逐帧讲解,并对抓包数据进行描述,一起来学习,再也不怕USB协议的复杂, 

相关帖子

沙发
qiangtech| | 2025-4-11 16:18 | 只看该作者
谢谢分享。

使用特权

评论回复
板凳
arima| | 2025-4-12 08:43 | 只看该作者
谢谢分享,学习了,网络抓包用得多。。。

使用特权

评论回复
地板
goyhuan| | 2025-4-12 09:08 | 只看该作者
Wireshark免费的?

使用特权

评论回复
5
Wxy8030| | 2025-4-12 09:30 | 只看该作者
这个必须要顶一下!

使用特权

评论回复
6
丙丁先生| | 2025-4-13 11:02 | 只看该作者
这个网上很火,不知道可以抓包视像头吗?是不是需要一个路由器?连接电脑和视像头?

使用特权

评论回复
7
yzdel7| | 2025-4-13 21:46 | 只看该作者
也可以用BusHound,我在2008年的时候开发USB接口的时候用的是BusHound。

使用特权

评论回复
8
dffzh|  楼主 | 2025-4-14 08:46 | 只看该作者

一起学习

使用特权

评论回复
9
dffzh|  楼主 | 2025-4-14 08:47 | 只看该作者
arima 发表于 2025-4-12 08:43
谢谢分享,学习了,网络抓包用得多。。。

嗯,Wireshark工具的功能比较多,UI界面也还行

使用特权

评论回复
10
dffzh|  楼主 | 2025-4-14 08:48 | 只看该作者
goyhuan 发表于 2025-4-12 09:08
Wireshark免费的?

是的,可以在官网下载

使用特权

评论回复
11
dffzh|  楼主 | 2025-4-14 08:48 | 只看该作者
Wxy8030 发表于 2025-4-12 09:30
这个必须要顶一下!

使用特权

评论回复
12
dffzh|  楼主 | 2025-4-14 08:51 | 只看该作者
丙丁先生 发表于 2025-4-13 11:02
这个网上很火,不知道可以抓包视像头吗?是不是需要一个路由器?连接电脑和视像头? ...

摄像头通过网线与电脑网口连接应该就可以,网络摄像机(IPC)都有ip地址的

使用特权

评论回复
13
dffzh|  楼主 | 2025-4-14 08:54 | 只看该作者
yzdel7 发表于 2025-4-13 21:46
也可以用BusHound,我在2008年的时候开发USB接口的时候用的是BusHound。

BusHound也可以的,技多不压身

使用特权

评论回复
14
丙丁先生| | 2025-4-14 13:44 | 只看该作者
dffzh 发表于 2025-4-14 08:54
BusHound也可以的,技多不压身

Windows下的用哪个软件呢?

使用特权

评论回复
15
dffzh|  楼主 | 2025-4-14 13:59 | 只看该作者
丙丁先生 发表于 2025-4-14 13:44
Windows下的用哪个软件呢?

Wireshark和BusHound都可以的

使用特权

评论回复
16
丙丁先生| | 2025-4-14 14:31 | 只看该作者
dffzh 发表于 2025-4-14 13:59
Wireshark和BusHound都可以的

感谢回复,希望继续更详细的博文。比如Windpws10如何用使用。

使用特权

评论回复
17
丙丁先生| | 2025-4-14 14:32 | 只看该作者
嵌入式能否使用呢?

使用特权

评论回复
18
飞思啦| | 2025-4-14 15:22 | 只看该作者
一直用这个抓网络包,没想到还嫩抓usb的,厉害了

使用特权

评论回复
19
dffzh|  楼主 | 2025-4-14 15:59 | 只看该作者
丙丁先生 发表于 2025-4-14 14:32
嵌入式能否使用呢?

涉及到网络层的应用,就可以呀

使用特权

评论回复
20
dffzh|  楼主 | 2025-4-14 16:01 | 只看该作者
飞思啦 发表于 2025-4-14 15:22
一直用这个抓网络包,没想到还嫩抓usb的,厉害了

是的,只要安装了USBPcap插件驱动就可以,捕获选项里会显示是否安装成功:

使用特权

评论回复
发新帖 本帖赏金 100.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

202

帖子

3

粉丝