v0x6splus 是一个用于模拟和测试 USB 设备行为的命令行工具,常用于开发 USB 协议、驱动程序或进行硬件兼容性测试,它的 -d 参数是 最核心、最常用的参数之一,用于 指定要模拟的设备描述符。
-d 参数的核心作用
-d 参数告诉 v0x6splus:“请模拟一个具有这些特定属性的 USB 设备”,这些属性通常包括:
- Vendor ID (VID) 和 Product ID (PID):设备的唯一标识符。
- 设备类、子类和协议:定义设备的功能类型(如 HID、CDC Mass Storage 等)。
- 端点配置:设备用于数据输入输出的管道。
-d 参数的基本语法
-d 参数后面通常跟一个设备描述符字符串,格式如下:
-d "vid:pid,mi,cd,cs,cp[,iProduct][,iManufacturer]"
让我们逐一解析这个格式中的每个部分:
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
vid |
Vendor ID | 16位厂商ID,通常是十六进制格式。 | 0x1d6b (Linux Foundation) |
pid |
Product ID | 16位产品ID,通常是十六进制格式。 | 0x0002 (Ethernet Gadget) |
mi |
Interface Index | 接口索引,对于复合设备(如一个设备既有网卡又有串口),mi 用于指定你要配置的是哪个接口。mi=0 表示第一个接口,mi=1 表示第二个,以此类推,如果只有一个接口,可以省略。 |
0 |
cd |
Class Code | 设备类,这是一个单字节值,定义了设备的主要功能,常见的有:0x00: 按需配置0x02: 通信设备0x03: HID设备0x08: 大容量存储0xef: 应用特定0xff: 厂商特定 |
0x02 |
cs |
Subclass Code | 子类代码,在设备类下的进一步细分。 | 0x06 (Ethernet) |
cp |
Protocol Code | 协议代码,在子类下的具体协议。 | 0x00 |
iProduct |
Product String | 产品字符串,可选参数,用于为设备指定一个可读的产品名称,如果包含空格,通常需要用引号括起来。 | "My Virtual Ethernet" |
iManufacturer |
Manufacturer String | 制造商字符串,可选参数,用于指定制造商名称。 | "My Company" |
常见使用示例
理解了语法后,我们来看几个非常实用的例子。
示例 1:模拟一个虚拟网卡(最常见)
这是 v0x6splus 最经典的用途,用于模拟一个 USB 以太网适配器,方便在没有物理网卡的环境下进行网络测试或网络启动。
sudo ./v0x6splus -d "0x1d6b:0x0002,0,0x02,0x06,0"
解析:
vid:pid = 0x1d6b:0x0002: 这是 Linux Foundation 的标准以太网 Gadget 的 VID/PID,被广泛使用。mi = 0: 配置第一个(也是唯一的)接口。cd = 0x02: 设备类为“通信设备”。cs = 0x06: 子类为“以太网”。cp = 0x00: 协议为“未指定”(对于以太网 Gadget,这通常是正确的)。
执行此命令后,你的系统会检测到一个新的 USB 网卡设备,通常可以配置一个静态 IP 或通过 DHCP 获取 IP。
示例 2:模拟一个 HID 设备(如键盘或鼠标)
如果你想模拟一个 USB 键盘,可以使用以下命令:
sudo ./v0x6splus -d "0x05ac:0x021a,0,0x03,0x01,0"
解析:
vid:pid = 0x05ac:0x021a: 这是 Apple Inc. 的一个标准键盘 PID,很多系统都能识别,你也可以使用自己的 VID/PID。cd = 0x03: 设备类为“人机接口设备”。cs = 0x01: 子类为“Boot Interface”,这表示设备支持 Boot 协议,可以在操作系统启动阶段被识别,常用于键盘、鼠标等。cp = 0x00: 协议为“None”,对于键盘,也可以是0x01(Keyboard) 或0x02(Mouse)。
示例 3:模拟一个带描述字符串的设备
为了让设备在设备管理器中显示更友好的名称,可以添加产品字符串。
sudo ./v0x6splus -d "0x1234:0x5678,0,0x02,0x06,0,MyTestNIC"
解析:
vid:pid = 0x1234:0x5678: 使用一个自定义的 VID/PID。- 其他参数与网卡示例相同。
iProduct = MyTestNIC: 当你查看设备属性时,其产品名称会显示为 "MyTestNIC"。
示例 4:模拟一个复合设备(多个接口)
一个 USB 设备可以同时提供多种功能,一个设备同时有网卡和串口功能,这需要为每个功能分别指定一个 -d 参数。
# 模拟一个带串口的复合设备 sudo ./v0x6splus -d "0x1d6b:0x0104,0,0x02,0x06,0" -d "0x1d6b:0x0104,1,0x0a,0x00,0"
解析:
- 第一个
-d:mi=0,cd=0x02-> 配置第一个接口为 以太网。 - 第二个
-d:mi=1,cd=0x0a-> 配置第二个接口为 CDC-ACM (虚拟串口)。cs=0x00,cp=0x00是 CDC-ACM 的标准值。
这样,一个设备就会同时出现一个网卡和一个串口。
如何获取 VID/PID 和其他参数?
- 标准设备: 对于常见的设备类型(如网卡、键盘),可以直接使用业界广泛接受的 VID/PID(如示例中的
0x1d6b:0x0002)。 - 自定义设备: 如果你正在为自己的硬件开发驱动,你需要向 USB-IF 申请一个唯一的 VID,PID 则由你自己分配,只要在你的 VID 范围内不重复即可。
- 分析现有设备: 你可以使用
lsusb(Linux) 或设备管理器 (Windows) 来查看真实设备的 VID/PID 和类信息,然后模仿它。- Linux:
lsusb -v会显示非常详细的设备描述符信息,包括idVendor,idProduct,bDeviceClass,bDeviceSubClass等。
- Linux:
| 参数 | 关键点 |
|---|---|
| 核心作用 | 指定要模拟的 USB 设备的属性。 |
| 语法 | -d "vid:pid,mi,cd,cs,cp[,iProduct][,iManufacturer]" |
| 必填项 | vid, pid, cd, cs, cp |
| 可选项 | mi (多接口时必填), iProduct, iManufacturer |
| 最常见用途 | -d "0x1d6b:0x0002,0,0x02,0x06,0" (虚拟网卡) |
掌握 -d 参数是使用 v0x6splus 的第一步,通过组合不同的 vid, pid, cd, cs, cp 值,你可以模拟几乎任何标准的 USB 设备,为你的开发和测试工作提供极大的便利。
