在计算机原理与应用课程中,我们学习了USB接口的基本工作原理。“百闻不如一见,百见不如一干。”有没有办法能够分析和观察USB设备的传输过程呢?有!最简单的办法就是使用Wireshark软件。
1
安装Wireshark和USBPcap
Wireshark是目前最为流行的网络抓包分析软件,可以从https://www.wireshark.org网站下载最新的软件包。Wireshark的下载页面一般会包括多个版本,可以选择Stable Release的最新版本。在本文写作时,最新的版本是3.0.7。在Windows上安装最新版本的Wireshark时,它会自动安装USB抓包软件USBPcap。
如果你的Wireshark没有包括USBPcap软件,你也可以直接访问https://desowin.org/USBPcap/去下载并安装USBPcap软件,这是一个开源的USB协议抓包软件。
Linux下也有一个类似的软件,叫usbmon。
2
抓取USB数据
如果使用最新版本的Wireshark,启动软件后,点击“捕获|选项”菜单,在“捕获接口”对话框中(图1)选择”USBPcap1”作为要监听的网口。然后点击“开始”按钮就可以抓取USB数据。图 2是Wireshark中抓取到的USB鼠标的操作。
图1在捕获接口对话框中选择USBPcap1
图2 Wireshark中抓取的USB鼠标操作
更多的USBPcap软件的操作方法请参见:https://desowin.org/USBPcap/tour.html。
3
分析USB数据
3.1. USB鼠标数据分析
只要移动鼠标,我们就可以在Wireshark的分组列表中看到几条USB消息(图3)。在消息中host表示是主机,而1.1.1是USB鼠标的地址,其中第一个数是总线编号(bus id),第二个数是设备地址(device address),第三个数是端点号(endpoint number)。
图3 Wireshark的分组列表中显示的USB鼠标消息
这些消息都是从鼠标传递给主机的,而且都是以中断方式传输的。USB支持4种传输方式,其中鼠标、键盘这类设备主要以中断方式进行传输,特点是数据包很小,实时性好。
点击任意一条USB协议数据,在下面的协议分析窗口都可以看到数据分析的结果。
图 4 Wireshark中对USB数据的分析
对于每种类型的USB设备,在USB标准组织的网站上都可以找到详细的文档:https://www.usb.org/documents。对于鼠标、键盘设备可以参考《Universal Serial Bus (USB) Device Class Definition for HumanInterface Devices (HID)》的标准。图5给出了鼠标消息的定义,字节0表示是否有按键,接下来的两个字节表示X和Y方面的偏移量。图4这条消息表示用户按下了鼠标的左键,但是没有移动鼠标的位置。
图 5 USB标准中对鼠标消息的定义
3.2. U盘数据分析
我们尝试将U盘插入电脑,并观察Wireshark的抓包结果(图6)。
图 6 U盘插入电脑的信令
和鼠标不同,这里的消息是双向的,既有U盘发给主机的,也有主机发给U盘的。这些消息的传输类型也和鼠标不同,都是控制传输。这些消息是设备刚插入时,主机查询设备信息并对设备进行配置的消息。其实鼠标刚插入时也是有这些消息的,只是我们没有抓到。
我们在过滤器中输入下面的表达式:
usb.idVendor
我们就可以在消息窗口看到U盘返回给主机的设备信息(图7)。在其中我们可以看到U盘的产商和型号。
图7 U盘的设备信息
这些消息后面的一些消息属于USBMS协议(图8),这是Mass Storage设备特有的消息,U盘和USB硬盘都属于Mass Storage设备。
图8USBMS消息
这些USBMS消息的传输类型基本上都是Bulk传输,这是一种大数据量的传输,你可以看到一次传输几k到几十k字节。
4
结束语
使用Wireshark可以清晰地看到USB设备传输的情况,对于我们深入理解USB协议会很有帮助。欢迎同学们用Wireshark来分析手边的USB设备,并和我们分享你的结果。
公众号近期内容回顾去冬游啦 |洛阳· 遇见九朝古都
移动通信网络TDOA定位的新型小波去噪预处理算法
课题组同学在2019年中国研究生电子设计竞赛中取得佳绩
VDES陆地子系统物理层设计与实现
通信辐射源个体识别技术
多载波专用移动通信系统数字预失真功放线性化技术研究
使用Iperf进行网络性能测试
我是怎么发现程序抄袭的
微信号: bitpmcrg 欢迎关注北京理工大学专业移动通信组的公共号“北理工通信课题组”