使用PyUSB重放Wireshark捕获的数据包

5 投票
1 回答
2296 浏览
提问于 2025-04-18 03:20

我用Wireshark抓取了一个URB数据包:

219774  438.775555000   host    31.0    USBVIDEO    66  SET CUR Request  [Brightness]

然后Wireshark显示了以下的十六进制偏移文本:

0000   c0 f6 0b a3 00 88 ff ff 53 02 00 1f 01 00 00 00  ........S.......
0010   2c a1 51 53 00 00 00 00 57 5e 0b 00 8d ff ff ff  ,.QS....W^......
0020   02 00 00 00 02 00 00 00 21 01 00 02 00 02 02 00  ........!.......
0030   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0040   00 00                                            ..

现在我想用PyUSB重放这个数据包,方法如下:

device = usb.core.find(idVendor=0x04f2, idProduct=0xb2ea)
device.detach_kernel_driver(0)
cfg = device.get_active_configuration()
intf = cfg[(0,0)]
ep = intf[0]
data = 'c03998300288ffff5302000401000000d78f51530000000084ad08008dffffff02000000020000002101000200020200000000000000000000000000000000003200'
data = [ int(''.join([data[i], data[i+1]]), base=16) for i in range(0, len(data), 2)]
print '%d/%d written' %(ep.write(object_to_write), len(object_to_write))

输出结果是:

11/66 written

这让我觉得我不太明白PyUSB在数据前面加了多少元数据,Wireshark又省略了多少元数据等等。有没有什么办法可以解决这个问题?

1 个回答

0

我快速看了一下,发现变量数据挺长的。你发送的变量数据可能是一个数据包,但必须经过格式化。URB数据包的结构是由不同的数据格式组成的,比如 _URB_HEADER,_URB_HEADER 等等。

看看这个链接,可能会解释得更清楚一些。https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/usb/ns-usb-_urb

撰写回答