打印
[资料干货]

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

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

#技术资源# #申请原创#@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)
设备响应主机请求的配置描述符的报文解析如下:
以上介绍了4种电脑(主机)和USB鼠标(从机)之间的通信协议数据包,其他的还有很多协议数据包,不一一介绍!

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

7401367f8c0da010fb.png (190.55 KB )

7401367f8c0da010fb.png

6522167f8c0f54297f.png (387.12 KB )

6522167f8c0f54297f.png

使用特权

评论回复

相关帖子

沙发
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 | 只看该作者
这个必须要顶一下!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

90

帖子

2

粉丝