使用Wireshark获取USB HID(Human Interface Device)报告描述符

使用Wireshark选择需要获取的USB进行抓取数据,找到设备(host)接收信息的数据

第二栏出现hid报告,右击选择复制流

将复制的内容粘贴到USB标准请求及描述符在线分析工具 - USB中文网 进行解析

以图中获取手写板的数据为例:

python 复制代码
0x05, 0x0D,        // Usage Page (Digitizer)
0x09, 0x01,        // Usage (Digitizer)
0xA1, 0x01,        // Collection (Application)
0x85, 0x01,        //   Report ID (1)
0x09, 0x02,        //   Usage (Pen)
0xA1, 0x00,        //   Collection (Physical)
0x15, 0x00,        //     Logical Minimum (0)
0x25, 0x01,        //     Logical Maximum (1)
0x75, 0x01,        //     Report Size (1)
0x09, 0x42,        //     Usage (Tip Switch)
0x09, 0x44,        //     Usage (Barrel Switch)
0x09, 0x45,        //     Usage (Eraser)
0x09, 0x3C,        //     Usage (Invert)
0x95, 0x04,        //     Report Count (4)
0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x01,        //     Report Count (1)
0x81, 0x03,        //     Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x32,        //     Usage (In Range)
0x95, 0x01,        //     Report Count (1)
0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x02,        //     Report Count (2)
0x81, 0x03,        //     Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01,        //     Usage Page (Generic Desktop Ctrls)
0x15, 0x00,        //     Logical Minimum (0)
0x35, 0x00,        //     Physical Minimum (0)
0x65, 0x11,        //     Unit (System: SI Linear, Length: Centimeter)
0x55, 0x0F,        //     Unit Exponent (-1)
0x75, 0x10,        //     Report Size (16)
0x95, 0x01,        //     Report Count (1)
0x09, 0x30,        //     Usage (X)
0x26, 0x38, 0x63,  //     Logical Maximum (25400)
0x45, 0x73,        //     Physical Maximum (115)
0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x31,        //     Usage (Y)
0x26, 0x03, 0x3E,  //     Logical Maximum (15875)
0x45, 0x48,        //     Physical Maximum (72)
0x95, 0x01,        //     Report Count (1)
0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x65, 0x00,        //     Unit (None)
0x55, 0x00,        //     Unit Exponent (0)
0x05, 0x0D,        //     Usage Page (Digitizer)
0x09, 0x30,        //     Usage (Tip Pressure)
0x15, 0x00,        //     Logical Minimum (0)
0x26, 0xFF, 0x1F,  //     Logical Maximum (8191)
0x75, 0x10,        //     Report Size (16)
0x95, 0x01,        //     Report Count (1)
0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x3D,        //     Usage (X Tilt)
0x16, 0xD8, 0xDC,  //     Logical Minimum (-9000)
0x26, 0x28, 0x23,  //     Logical Maximum (9000)
0x75, 0x10,        //     Report Size (16)
0x95, 0x01,        //     Report Count (1)
0x55, 0x0E,        //     Unit Exponent (-2)
0x65, 0x14,        //     Unit (System: English Rotation, Length: Centimeter)
0x36, 0xD8, 0xDC,  //     Physical Minimum (-9000)
0x46, 0x28, 0x23,  //     Physical Maximum (9000)
0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x3E,        //     Usage (Y Tilt)
0x16, 0xD8, 0xDC,  //     Logical Minimum (-9000)
0x26, 0x28, 0x23,  //     Logical Maximum (9000)
0x75, 0x10,        //     Report Size (16)
0x95, 0x01,        //     Report Count (1)
0x55, 0x0E,        //     Unit Exponent (-2)
0x65, 0x14,        //     Unit (System: English Rotation, Length: Centimeter)
0x36, 0xD8, 0xDC,  //     Physical Minimum (-9000)
0x46, 0x28, 0x23,  //     Physical Maximum (9000)
0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0,              //   End Collection
0xC0,              // End Collection
0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
0x09, 0x06,        // Usage (Keyboard)
0xA1, 0x01,        // Collection (Application)
0x85, 0x02,        //   Report ID (2)
0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
0x75, 0x01,        //   Report Size (1)
0x95, 0x08,        //   Report Count (8)
0x19, 0xE0,        //   Usage Minimum (0xE0)
0x29, 0xE7,        //   Usage Maximum (0xE7)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0x01,        //   Logical Maximum (1)
0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x0C,        //   Report Count (12)
0x75, 0x08,        //   Report Size (8)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0xFF,        //   Logical Maximum (-1)
0x05, 0x07,        //   Usage Page (Kbrd/Keypad)
0x19, 0x00,        //   Usage Minimum (0x00)
0x29, 0xFF,        //   Usage Maximum (0xFF)
0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0,              // End Collection

// 188 bytes

// best guess: USB HID Report Descriptor

这段是一个USB HID(Human Interface Device)报告描述符 ,用于描述支持**触控笔(Pen Digitizer)键盘(Keyboard)**功能的设备。这种描述符通常用于告诉主机(比如电脑或手机),设备支持哪些功能,并定义输入报告的格式。

1. 触控笔描述符(Report ID 1)

0x05, 0x0D0xC0, 0xC0 是描述触控笔 功能的部分,使用的是报告 ID 1

1.1. 基本描述
python 复制代码
0x05, 0x0D        // Usage Page (Digitizer): 使用 Digitizer(数位板/触控笔)功能页
0x09, 0x01        // Usage (Digitizer): 使用 Digitizer 功能
0xA1, 0x01        // Collection (Application): 开始一个应用集合
1.2. 开关功能(Tip Switch, Barrel Switch, Eraser, Invert)
python 复制代码
0x85, 0x01        // Report ID (1): 报告 ID 为 1
0x09, 0x02        // Usage (Pen): 使用 Pen(触控笔)
0xA1, 0x00        // Collection (Physical): 开始一个物理集合
0x09, 0x42        // Usage (Tip Switch): 笔尖开关(即触摸状态)
0x09, 0x44        // Usage (Barrel Switch): 侧键开关
0x09, 0x45        // Usage (Eraser): 橡皮擦开关
0x09, 0x3C        // Usage (Invert): 翻转检测
  • 这部分定义了触控笔的各种开关,如笔尖、侧键、橡皮擦和翻转状态
1.3. 位置输入(X, Y 坐标)
python 复制代码
0x05, 0x01        // Usage Page (Generic Desktop Ctrls): 通用桌面控制
0x09, 0x30        // Usage (X): X 轴坐标
0x09, 0x31        // Usage (Y): Y 轴坐标
0x26, 0x38, 0x63  // Logical Maximum (25400): X 坐标最大值为 25400
0x26, 0x03, 0x3E  // Logical Maximum (15875): Y 坐标最大值为 15875
  • 定义了触控笔的 X 和 Y 轴坐标输入,分别有 16 位(Report Size 16),逻辑最大值是 25400 和 15875,分别表示最大分辨率
1.4. 压力与倾斜输入(Tip Pressure, X Tilt, Y Tilt)
python 复制代码
0x09, 0x30        // Usage (Tip Pressure): 笔尖压力
0x26, 0xFF, 0x1F  // Logical Maximum (8191): 压力最大值为 8191
0x09, 0x3D        // Usage (X Tilt): X 轴倾斜
0x09, 0x3E        // Usage (Y Tilt): Y 轴倾斜
0x16, 0xD8, 0xDC  // Logical Minimum (-9000): 倾斜最小值 -9000
0x26, 0x28, 0x23  // Logical Maximum (9000): 倾斜最大值 9000
  • 笔尖压力为 16 位输入,逻辑范围是 0-8191。
  • 倾斜输入(X Tilt, Y Tilt)也为 16 位,范围为 -9000 到 9000。

2. 键盘描述符(Report ID 2)

0x05, 0x010xC0 是描述键盘 功能的部分,使用的是报告 ID 2

2.1. 键盘基本描述
python 复制代码
0x05, 0x01        // Usage Page (Generic Desktop Ctrls): 通用桌面控制
0x09, 0x06        // Usage (Keyboard): 键盘功能
0xA1, 0x01        // Collection (Application): 开始一个应用集合
0x85, 0x02        // Report ID (2): 报告 ID 为 2
2.2. 键盘修饰键输入
python 复制代码
0x75, 0x01        // Report Size (1): 每个输入 1 位
0x95, 0x08        // Report Count (8): 有 8 个输入
0x19, 0xE0        // Usage Minimum (0xE0): 使用最小值为 0xE0(修饰键如 Shift, Ctrl)
0x29, 0xE7        // Usage Maximum (0xE7): 使用最大值为 0xE7
  • 这部分描述了 8 位的修饰键输入(如 Ctrl、Shift、Alt、Win 键)。
2.3. 普通键盘按键输入
python 复制代码
0x75, 0x08        // Report Size (8): 每个按键输入 8 位
0x95, 0x0C        // Report Count (12): 支持最多同时 12 个按键输入
0x19, 0x00        // Usage Minimum (0x00): 使用最小值为 0x00
0x29, 0xFF        // Usage Maximum (0xFF): 使用最大值为 0xFF
  • 定义了普通按键的输入,共 12 个按键,每个按键 8 位(1 字节)

  • 报告 ID 1 是用于**触控笔(Digitizer)**的输入:
    • 包含按钮状态(笔尖、侧键、橡皮擦)、X 和 Y 坐标、笔尖压力、X 和 Y 倾斜。
  • 报告 ID 2 是用于键盘 的输入:
    • 包含修饰键(Ctrl、Shift 等)和普通按键的输入,支持最多 12 个按键同时按下。

这个 HID 报告描述符总共占用 188 字节,涵盖了一个带触控笔和键盘功能的设备,适用于像平板电脑或触控显示器这样的输入设备。

相关推荐
p66666666682 小时前
vmware虚拟机的三种网络配置详细介绍,包能解决虚拟机网络问题
网络
赖small强2 小时前
【Linux 网络基础】Linux 平台 DHCP 运作原理与握手过程详解
linux·网络·dhcp
Mu.3872 小时前
计算机网络模型
网络·网络协议·计算机网络·安全·http·https
xixixi777774 小时前
解析一下传输安全——“它是什么”,更是关于“它为何存在”、“如何实现”以及“面临何种挑战与未来”
网络·安全·通信
jerryinwuhan6 小时前
socket由浅入深
网络
xu_yule8 小时前
网络和Linux网络-3(套接字编程)TCP网络通信代码
linux·网络·tcp/ip
程序员念姐9 小时前
软件测试系统流程和常见面试题
测试工具·面试
喜欢吃豆9 小时前
使用 OpenAI Responses API 构建生产级应用的终极指南—— 状态、流式、异步与文件处理
网络·人工智能·自然语言处理·大模型
xixixi777779 小时前
解析一下存储安全——“它是什么”,更是关于“它为何存在”、“如何实现”以及“面临何种挑战与未来”
网络·安全·通信
运维有小邓@9 小时前
实时日志关联分析工具:智能检测潜在安全威胁
运维·网络·安全