USB抓包(1)

最近从客户那边拿到一个usb抓包,让我们自己看,一个td s文件,刚开始有点懵圈,后面找了半天原来要用Data Cen ter软件打开。在国内好像都是wireshark?

打开之后大概如下:

  • 同步数据包(SYNC):标识数据包的开始。
  • 标识数据包(PID, Packet Identifier):表明这是一个数据包,比如0xA1表示数据IN包。
  • 地址域(ADDR):键盘设备的地址,比如0x03
  • 端点域(ENDP):键盘设备的端点号,比如0x01
  • 数据域(DATA):实际传输的数据,比如按下'A'键的数据。
  • 循环冗余校验(CRC, Cyclic Redundancy Check):用于校验数据包的完整性。

数据格式:

SYNC | PID | ADDR | ENDP | DATA | CRC

从上面转包的数据来看,ADDR | ENDP | DATA都是有的。ADDR是04,ENDP是00,DATA就是Record的部分。CRC应该是没显示,估计还是解析工具的问题。

按照USB协议,PID是标注这个表的用途,比如令牌,数据,握手,特殊。不知道为什么这边也没显示。

Data的部分,貌似这个工具会解析Data的内容,并且在summary中显示,这点还是不错。

刚打开真的一头懵,不过好在Get Max这些认识,因为在代码里面写过。看看Get Max分成三部分,一个是SETUP Txn,一个是IN Txn,还有一个STATUS Txn。每个部分里面还有很多细节。

不过感觉看外面的就好,里面的以后再学习吧,A1  83 00 0A 00 02 02 00,然后对应的就是上面解析好的内容,ProcessingUnitID那些。

下面的IN Txn,IN的话应该就是设备到服务端(一般是PC),也就是返回值,这里是64 19。

再说说Txn,查了下这个其实是transactions的缩写,也就是事务,一个事务包含一个或者多个数据包Package。用上面的SETUP事务举例。数据包里面有不同的域,比如PID这些。SETUP事务包含如下数据包:

  • SETUP Token Packet(令牌包)

    • 用于标识一个SETUP事务的开始。
    • 包含设备地址和端点号。
    • PID(Packet Identifier):表示这是一个SETUP包(0x2D)。
    • 地址(Address):目标设备的地址。
    • 端点号(Endpoint Number):目标设备的端点号。
    • PID: 0x2D (SETUP)
      ADDR: Device Address
      ENDP: Endpoint Number
      CRC: Cyclic Redundancy Check
      
  • Data Packet(数据包)

    • 包含具体的控制请求信息,例如请求类型、请求码、值、索引和长度等。
    • PID:表示这是一个DATA0包(0xC3)。
    • 数据(Data):包含请求类型(Request Type)、请求码(Request)、值(Value)、索引(Index)、长度(Length)等。
    • PID: 0xC3 (DATA0)
      Data: {
          bmRequestType: Request Type
          bRequest: Request
          wValue: Value
          wIndex: Index
          wLength: Length
      }
      CRC: Cyclic Redundancy Check
      
  • Handshake Packet(握手包)

    • 用于确认数据包的正确接收。
    • 常见的握手包有ACK(确认),NAK(否认)和STALL(停止)。
    • PID:表示确认包(ACK,0xD2)。
    • PID: 0xD2 (ACK)
      

一个数据包中大概有这些域:

  • 同步数据包(SYNC):标识数据包的开始。
  • 标识数据包(PID, Packet Identifier):表明这是一个数据包,比如0xA1表示数据IN包。
  • 地址域(ADDR):键盘设备的地址,比如0x03
  • 端点域(ENDP):键盘设备的端点号,比如0x01
  • 数据域(DATA):实际传输的数据,比如按下'A'键的数据。
  • 循环冗余校验(CRC, Cyclic Redundancy Check):用于校验数据包的完整性。

事务之外还有阶段。比如SETUP是一个阶段stage,后续还有数据阶段(Data Stage)和状态阶段(Status Stage)。这个就和上面的显示一致了。

从目前工作的需要来说,倒是没必要关注Stage和Transaction这个层面,看看工具解析好的数据即可。

好吧,就先写这么多,年纪大了弄太多也记不住反而搞得很累,后面再写吧。

就酱。。。

参考:

USB协议分析

USB协通讯议--深入理解_uvc set interface返回stall pid-CSDN博客

USB UVC实战笔记第3篇—枚举与Processing Unit描述符的关系详解_uvcview.x86-CSDN博客

uvc 扩展单元-CSDN博客

相关推荐

  1. Fiddler测试

    2024-07-14 04:16:01       56 阅读
  2. 测试:工具

    2024-07-14 04:16:01       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 04:16:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 04:16:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 04:16:01       58 阅读
  4. Python语言-面向对象

    2024-07-14 04:16:01       69 阅读

热门阅读

  1. 变分法笔记2

    2024-07-14 04:16:01       21 阅读
  2. 爬虫:Sentry-Span参数逆向

    2024-07-14 04:16:01       20 阅读
  3. android 嵌套webview,软键盘遮挡输入框

    2024-07-14 04:16:01       23 阅读
  4. ref和reactive区别

    2024-07-14 04:16:01       21 阅读
  5. 【随想】闲聊、沟通和谈判

    2024-07-14 04:16:01       20 阅读
  6. nginx防盗链

    2024-07-14 04:16:01       26 阅读
  7. 【C++编程】类的静态 static 成员 & 常 const 函数

    2024-07-14 04:16:01       19 阅读
  8. Python自定义可切片的类

    2024-07-14 04:16:01       20 阅读
  9. 力扣题解(最长的斐波那契子序列的长度)

    2024-07-14 04:16:01       24 阅读
  10. Mojo: 轻量级Perl框架的魔力

    2024-07-14 04:16:01       21 阅读
  11. 最长上升子序列(最长递增子序列,LIS)

    2024-07-14 04:16:01       20 阅读