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

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

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

Wireshark 2.0. (SVN)
Linux kernel 4.1.

在实际操作过程中,你可以选择使用版本号高于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  Device : 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/-usbmon.rules

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

modprobe usbmon

数据捕捉

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

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

然后呢?

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

使用Wireshark捕捉USB通信数据的更多相关文章

  1. Wireshark 抓取USB的数据包

    需要使用root权限来运行Wireshark,并利用Wireshark来嗅探USB通信数据.当然了,我们并不建议大家利用root权限来进行操作.我们可以使用Linux提供的usbmon来为我们获取和导 ...

  2. 如何用Wireshark捕获USB数据?

    现在越来越多的电子设备采用USB接口进行通讯,通讯标准也在逐步提高.那么,我们就会好奇这些设备是如何工作的?而无论你是一个硬件黑客,业余爱好者或者只是对它有一点兴趣的,USB对我们都是具有挑战性的. ...

  3. VC++ 6.0 C8051F340 USB 通信 CAN 数据解析

    // HelloWorld.cpp : Defines the entry point for the console application. // /*********************** ...

  4. 深入理解USB流量数据包的抓取与分析

    0x01 问题提出 在一次演练中,我们通过wireshark抓取了一个如下的数据包,我们如何对其进行分析? 0x02 问题分析 流量包是如何捕获的? 首先我们从上面的数据包分析可以知道,这是个USB的 ...

  5. Mac OS X 在捕捉AppLAN通信包

    Mac OS X 在捕捉AppLAN通信包 一.拍摄模式 由于工作关系.经常要分析App wifi通讯协议.我的开发电脑是Mac Book. 大体有例如以下几种模式: + App与server进行ht ...

  6. usb通信小结

    2010-07-25 16:52:00 目前了解了usb通信层面的一些基础知识如下.如果有空还要再了解hid报告描述符及协议的数据包波形. 一,USB的一些基本概念 1. 管道(Pipe) 是主机和设 ...

  7. 基于usb4java实现的java下的usb通信

    项目地址:点击打开 使用java开发的好处就是跨平台,基本上java的开发的程序在linux.mac.MS上都可以运行,对应这java的那句经典名言:一次编写,到处运行.这个项目里面有两种包选择,一个 ...

  8. USB:USB通信中的端点(endpoint)和四种传输模式

    USB的传输模式有4种,分别是控制传输(Control Transfer).中断传输(Interrupt Transfer).批量传输或叫块传输(Bulk Transfer).实时传输或叫同步传输(I ...

  9. ARM USB 通信(转)

    ARM USB 通信 采用ZLG的动态链接库,动态装载. ARM是Context-M3-1343. 在C++ Builder 6 中开发的上位机通信软件. USB通信代码如下: //--------- ...

随机推荐

  1. ma

    首页 第一项 上课 哈哈

  2. Java GC系列(1):Java垃圾回收简介

    本文由 ImportNew - 好好先生 翻译自 javapapers. Java的内存分配与回收全部由JVM垃圾回收进程自动完成.与C语言不同,Java开发者不需要自己编写代码实现垃圾回收.这是Ja ...

  3. 通过Sql语句导数据

    在通过SQL Server向导中的SQL语句导数据时,默认情况下源表中的nvarchar字段类型会变成202,解决此问题的方法是,要重新选择一下对应的数据接收表.

  4. memset,memcpy,memcmp用法

    void* memset(void *s, int ch, size_t n); 将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值. 例如:memset(lpMyStruct ...

  5. uva----(10794) A Different Task

      A Different Task  The (Three peg) Tower of Hanoi problem is a popular one in computer science. Bri ...

  6. swfobject2.2

    官方网址:http://blog.deconcept.com/swfobject/ Github地址:https://github.com/swfobject/swfobject 谷歌地址 貌似被和谐 ...

  7. jquery中ajax常用方法

    index.html: <h3>$.get(url, [data], [callback], [type])<br/> $.post(url, [data], [callbac ...

  8. windows下捕获dump之守护进程

    一两个月前为产品写了一个独立的exe,由于产品使用的捕获dump是一个现成的进程外exe,如果以资源的方式集成它容易出现安全警告,由于时间关系没有寻求新的解决方法,还是遵循旧方案,不捕获dump. 最 ...

  9. php定时执行PHP脚本一些方法总结

    本文章总结了php定时执行PHP脚本一些方法总结,有,linux中,windows,php本身的方法,有需要的朋友可参考参考. linux下定时执行php脚本 执行PHP脚本 方法1如果你想定时执行某 ...

  10. 使用OpenGL ES绘制3D图形

    如果应用定义的顶点不在同一个平面上,并且使用三角形把合适的顶点连接起来,就可以绘制出3D图形了. 使用OpenGL  ES绘制3D图形的方法与绘制2D图形的步骤大致相同,只是绘制3D图形需要定义更多的 ...