android usb抓数据工具

514 阅读3分钟

Linux下USB抓包工具UsbMon和Sniff Master的使用与数据格式解析

一、USB抓包工具的选择与使用

在Linux环境下进行USB协议分析时,我们主要有两种选择:系统自带的UsbMon工具和功能更强大的Sniff Master抓包工具。

1. UsbMon的使用步骤

UsbMon是Linux内核自带的USB抓包工具,使用步骤如下:

  1. 挂载debugfs

    # mount -t debugfs none_debugs /sys/kernel/debug
    
  2. 加载usbmon模块

    # modprobe usbmon
    
  3. 确认usbmon是否可用

    # ls /sys/kernel/debug/usb/usbmon
    
  4. 确认usb设备挂在哪条总线

    # cat /proc/bus/usb/devices
    
  5. 使用usbmon抓取通讯数据包

    # cat /sys/kernel/debug/usb/usbmon/3u > /tmp/usbmon_log.txt
    

2. Sniff Master的优势

对于更专业的USB协议分析需求,推荐使用Sniff Master抓包工具,它相比UsbMon有以下优势:

  • 提供图形化界面,操作更直观
  • 支持多种USB协议版本的解析
  • 可以实时显示和过滤数据包
  • 支持高级分析功能,如流量统计和协议解码

二、抓取的数据包格式解析

1. UsbMon数据包格式

UsbMon抓取的数据包格式示例:

ffff9bbbaf235b00 1482700625 C Ii:3:001:1 0:2048 1 = 04

各字段含义:

  • 第一个字段:URB标识符
  • 第二个字段:时间戳
  • 第三个字段:事件类型(C=回调,S=提交)
  • 第四个字段:URB类型和端点信息
  • 第五个字段:状态和长度信息
  • 第六个字段:数据长度
  • 第七个字段:实际数据

2. Sniff Master的数据解析

Sniff Master提供了更直观的数据解析方式:

  • 自动识别URB类型(控制传输、批量传输、中断传输、等时传输)
  • 彩色标记不同类型的URB
  • 支持对特定端点的数据过滤
  • 提供协议层的详细解析

三、URB传输异常分析

常见的URB传输错误状态码:

  • -EINPROGRESS (-115):URB已提交给USB控制器
  • -EPROTO (-71):传输过程中出现位填充错误或超时
  • -EILSEQ (-84):CRC校验错误
  • -ECOMM (-70):数据接收速度过快
  • -ENOSR (-63):数据发送速度跟不上
  • -EPIPE (-32):管道halt状态
  • -EOVERFLOW (-75):数据包长度超过端点限制
  • -ENODEV (-19):设备已移除

四、URB取消场景分析

URB被取消的几种情况:

  1. 主动取消

    • usb_unlink_urb():status = -104 (ECONNRESET)
    • usb_kill_urb():status = -2 (ENOENT)
  2. 设备移除

    • status = -108 (ESHUTDOWN)
  3. autosuspend场景

    • 设备进入suspend状态时,未完成的URB会被取消

五、工具选择建议

对于日常USB调试:

  • 简单场景使用UsbMon即可满足需求
  • 复杂协议分析推荐使用Sniff Master等专业工具
  • 生产环境建议结合两种工具进行交叉验证

无论使用哪种工具,理解USB协议和URB机制都是进行有效分析的基础。建议先从UsbMon开始熟悉基本原理,再根据需要升级到更专业的抓包工具。