事实上通过wireshark,我们可以捕获到usb设备发送给我们主机的数据,这样就可以进一步研究了。
本文中,我们将向大家介绍怎样通过wireshark捕获usb数据,使用的环境如下:
l Wireshark 2.0.1(SVN)l Linux kernel 4.1.6
你也可以用其他版本的wireshark,只要是1.2.0以上的都行。这里并没有测试window上能不能行。
简介
在开始前,我们先介绍一些USB的基础知识。USB有不同的规格,以下是使用USB的三种方式:
l USB UART l USB HID l USB Memory
UART或者UniversalAsynchronousReceiver/Transmitter。这种方式下,设备只是简单的将USB用于接受和发射数据,除此之外就再没有其他通讯功能了。
HID是人性化的接口。这一类通讯适用于交互式,有这种功能的设备有:键盘,鼠标,游戏手柄和数字显示设备。
最后是USBMemory,或者说是数据存储。ExternalHDD,thumbdrive/flashdrive,等都是这一类的。
其中使用的最广的不是USBHID就是USBMemory了。
每一个USB设备(尤其是HID或者Memory)都有一个供应商ID(VendorId)和产品识别码(ProductId)。VendorId是用来标记哪个厂商生产了这个USB设备。ProductId用来标记不同的产品,他并不是一个特殊的数字,当然最好不同。如下图:
上图是连接在我电脑上的USB设备列表,通过lsusb查看命令。
例如说,我有一个无线鼠标Logitech。它是属于HID设备。这个设备正常的运行,并且通过lsusb这个命令查看所有usb设备,现在大家能找出哪一条是这个鼠标吗??没有错,就是第四个,就是下面这条:
Bus003Device010:ID046d:c52fLogitech,Inc.UnifyingReceiver
其中,ID046d:c52f就是Vendor-ProductId对,VendorId的值是046d,并且ProductId的值是c52f。Bus003Device010代表usb设备正常连接,这点需要记下来。
准备
我们用root权限运行Wireshark捕获USB数据流。但是通常来说我们不建议这么做。我们需要给用户足够的权限来获取linux中的usb数据流。我们可以用udev来达到我们的目的。我们需要创建一个用户组usbmon,然后把我们的账户添加到这个组中。
addgroup usbmon gpasswd -a $USER usbmonecho SUBSYSTEM=="usbmon", GROUP="usbmon", MODE="640" > /etc/udev/rules.d/99-usbmon.rules
接下来,我们需要usbmon内核模块。如果该模块没有被加载,我们可以通过以下命令家在该模块:
modprobe usbmon
捕获
打开wireshark,你会看到usbmonX其中X代表数字。下图是我们本次的结果(我使用的是root):
如果接口处于活跃状态或者有数据流经过的时候,wireshark的界面就会把它以波形图的方式显示出来。那么,我们该选那个呢?没有错,就是我刚刚让大家记下来的,这个X的数字就是对应这USBBus。在本文中是usbmon3。打开他就可以观察数据包了。