使用Wireshark捕捉USB通信数据

简介: USB,是英文Universal Serial Bus(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB接口支持设备的即插即用和热插拔功能,是应用在PC领域的接口技术。

USB,是英文Universal Serial Bus(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。USB接口支持设备的即插即用和热插拔功能,是应用在PC领域的接口技术。

现在,越来越多的人喜欢使用USB设备了。很多的设备都会选择使用USB接口来作为设备的通信端口,而这也是一种流行的趋势,这有助于不同设备之间标准的统一。那么,你对USB设备的工作方式和运行机制真的了解吗?无论你是一个硬件黑客,还是一名对外围设备感兴趣的技术爱好者,USB设备都是一个非常具有挑战性的领域。在Wireshark的帮助下,我们不仅可以嗅探并截获到USB设备所发送的数据流信息,而且我们还可以将这些捕获到的数据存储至我们的主机中。我们实验所使用的主机安装的操作系统为Windows或者Linux。

在这篇文章中,我们将会讨论如何使用Wireshark来捕捉USB设备的通信数据。在我撰写这篇文章的过程中,我使用到了下列材料:

Wireshark 2.0.1 (SVN)
Linux kernel 4.1.6

在实际操作过程中,你可以选择使用版本号高于1.2.0的任意版本Wireshark来进行操作。在此,我并没有在本文中提供Windows系统的操作步骤,我会在实验操作完成之后的第一时间给大家提供这部分的信息。

一些背景知识

在我们开始操作之前,我觉得还是得给大家介绍一些有关USB设备的基础知识。USB有其自己的标准和规范。基本而言,我们可以通过以下三种方式来使用USB:

USB UART接口
USB HID(交互设备)
USB存储设备

UART,即通用异步接收/发送器。这类设备只能够利用USB来进行数据的接收和发送操作。实际上,这类设备与普通的通信设备并没有本质上的区别。

HID,即人机交互设备。这也是USB作为接口来使用的一种典型应用。这类设备包括键盘,鼠标,游戏控制器,以及很多简单的显示设备等等。

最后就是USB存储设备,这也是最常见的一种USB使用形式。比如说外接硬盘,U盘和闪存驱动器等等,这些都属于USB存储设备这一类。

正如你所了解的那样,USB交互设备和USB存储器这两大类USB设备是目前我们使用最为广泛的。

现在,每一种USB设备,尤其是人机交互设备和存储设备,都有一串特殊的数字,这串数字被称为厂商ID和产品ID。这两个数字一般是成对出现的。厂商ID用于标明该产品是由哪一个制造商所生产的,而产品ID是产品的标识符。需要注意的是,产品ID并不是序列号。具体情况如下图所示:

上图所显示的是连接至我这台计算机的USB设备信息。我们可以调用lsusb命令来查看系统中的USB设备信息。

首先,我们要选择一个设备来进行实验。我有一个罗技无线鼠标,这是一种人机交互设备。而这个鼠标中也配备有一个数据接收装置,所以我决定将这个无线鼠标作为我的实验对象。你能从上图所示的信息中找到这个鼠标吗?没错,就是第四个。该设备的具体信息如下:

Bus 003 Device 010: ID 046d:c52f Logitech, Inc. Unifying Receiver

ID部分所显示的数据为046d:c52f,这是厂商ID和产品ID(厂商ID: 产品ID)。很明显,厂商ID为046d,产品ID为c52f。

除此之外,我们可以看到开头的“Bus 003 Device 010”。这段信息告诉我们这一USB设备所连接的是哪一条总线。这是一条非常重要的信息。

准备工作

现在,我们需要使用root权限来运行Wireshark,并利用Wireshark来嗅探USB通信数据。当然了,我们并不建议大家利用root权限来进行操作。我们可以使用Linux提供的usbmon来为我们获取和导出数据信息的操作赋予足够的权限。具体请参考Linux-udev。我们所要做的就是创建一个usbmon group,然后将我们的账号加入这个组,最后生成相应的udev规则。相关操作命令如下:

addgroup usbmon
gpasswd -a $USER usbmon
echo 'SUBSYSTEM=="usbmon", GROUP="usbmon", MODE="640"' > /etc/udev/rules.d/99-usbmon.rules

接下来,我们需要使用usbmon的内核模块。如果系统还未加载该模块,我们可以使用root权限并运行下列命令来进行加载。

modprobe usbmon

数据捕捉

打开Wireshark之后,我们可以看到如下图所示的接口列表。你应该能看到形如usbmonX的信息,其中X为数字。下图显示的是我的信息(没错,我使用了root权限):

如果Wireshark检测到了接口中有数据流信息,它会以波形图的形式将信息显示给我们。那么,我们该选择哪一个呢?还记得我之前说过的吗?没错,数字“X”所对应的就是设备所连接的USB总线。在我的操作过程中,目标设备为usbmon3。我们打开它之后,就可以看到其中的数据流信息了。点击usbmon接口,然后点击那个蓝色的鱼鳍图标。

然后呢?

我们在成功捕获了数据流信息之后,我们能做什么呢?这一切都将取决于我们自己。通常情况下,我们可以通过这些信息来了解设备与主机的通信机制。而且在某些情况下,我们还可以利用这些信息并结合我们自己的知识来对其进行逆向工程分析。

相关文章
|
测试技术
西门子S7-200 SMART自由口通信,如何编写发送程序,使用超级终端发送测试
今天我们学习编写西门子S7-200 SMART自由口通信的发送程序,并使用超级终端进行发送功能测试。首先设置参数,打开STEP7 Micro/WIN SMART编程软件,右键单击项目树中的CPU,选择打开,在打开的系统块中选择CPU类型和信号板类型。设置信号板,串口的类型为RS232,地址为2,波特率为9600。
西门子S7-200 SMART自由口通信,如何编写发送程序,使用超级终端发送测试
|
8月前
|
物联网 开发工具 芯片
BLE蓝牙连接不稳定以及突然断开的原因和解决方法
在开发BLE的时候经常会遇到连接突然断开的情况,比如刚连接上就断开、连接成功之后传输数据随机断开(有时候连接很稳定不断开)。以上这些断开连接的情况或多或少都遇到过,很是让人头疼。当然咸鱼也不例外,也碰到过BLE突然断开的问题。咸鱼根据自己的经验做一些这方面的总结,希望能对大家有所帮助。
1053 0
BLE蓝牙连接不稳定以及突然断开的原因和解决方法
|
8月前
|
监控 网络协议 测试技术
优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具
- 监视串行线路或以太网上的通信数据 - 支持多达 28 种数据格式,包括:Signed、Unsigned、Hex、Binary、Long、Float、Double等 - 支持 Modbus 协议地址和 PLC 地址相互切换 - 对任意数量寄存器中的数据绘制实时图表,监控数据的变化趋势 - 支持同时创建多个连接网络和大量从站设备 - 通过多个标签页进行管理,快速在从站设备之间进行切换 - 通过表格的形式管理寄存器,支持添加变量名和注释,支持切换背景与前景颜色 - 导出/导出从站设备寄存器数据到Excel - 内置字节转换工具,方便将Long、Float、Double类型数据转换为寄存器中的数据
227 0
优秀的 Modbus 从站(从机、服务端)仿真器、串口调试工具
|
Java
UVCCamera向USB设备发送命令
UVCCamera向USB设备发送命令
175 0
|
编解码 算法 安全
蓝牙通讯数据传输,蓝牙UUID,BluetoothAdapter;adb input 模拟系统输入,adb logcat:抓包,抓日志,蓝牙通讯,adb命令实现
蓝牙通讯数据传输,蓝牙UUID,BluetoothAdapter;adb input 模拟系统输入,adb logcat:抓包,抓日志,蓝牙通讯,adb命令实现
321 0
|
Ubuntu Linux C语言
用C写蓝牙通讯程序:扫描、读取、发送
在Linux下,通过bluez 蓝牙库可以用C语言轻松实现蓝牙通信。在ubuntu下可以用 apt-get install libbluetooth-dev 安装该库。下面是几个简单示例。
1913 0
|
网络协议
求助:寻找一款采集数据类硬件,能够通过GPRS发送数据到现有服务器
我所开发的是工厂的MES系统,但是现在需求是要对一台原始冲压机床的工作次数进行计数,并把发工作次数到系统里   冲压机床是最原始的机器,没有任何可直接对接开发地方,只能考虑另外加装这么一款硬件实现计数和通讯。
2353 0