如何使用 pyusb 复制 USB 侦听 0017 VENDOR_DEVICE消息?



我有一个来自snoopypro的USB嗅探器,用于我正在尝试与之通信的设备。我发现一旦设备设置好,我就可以通过批量消息与它通信,但我在复制设置消息时遇到问题。其中一些消息在史努比中标记为"VENDOR_DEVICE",我不知道如何使用pyusb将这些消息作为控制传输消息发送;甚至如何破译什么数据是什么。 我怀疑我误解了嗅探(或史努比的解释(还是pyusb有问题?

这是嗅闻。

82    in down    n/a    13.669    VENDOR_DEVICE    -    
URB Header (length: 80)
SequenceNumber: 82
Function: 0017 (VENDOR_DEVICE)
PipeHandle: ff98e578
SetupPacket:
0000: 00 05 00 00 00 00 02 00 
bmRequestType: 00
DIR: Host-To-Device
TYPE: Standard
RECIPIENT: Device
bRequest: 05  
SET_ADDRESS

No TransferBuffer

以下是我尝试过的几条不同的线路。 每个组合都会给我"[errno 32] 管道错误"或"[Errno None] 其他错误"。 管道错误似乎指示设备不支持该命令。 我不确定错误无错误。

dev.ctrl_transfer(0x00, 0x05, 0x0000, 0x0000, 0x0200)
dev.ctrl_transfer(0x20, 0x05, 0x0000, 0x0000, 0x0200)
dev.ctrl_transfer(0x80, 0x05, 0x0000, 0x0000, 0x0200)
dev.ctrl_transfer(0x20, 0x05, 0x0000, 0x0000, 0x0002)

相反,我可以向0x80发送获取状态消息,然后它就会通过。

dev.ctrl_transfer(0x80, 0x00, 0x0000, 0x0000, 0x0000)

所以,我的建议是尽可能避免使用snoopypro。 它很旧,显然甚至不适用于 Win7、8 或 10。 [我最初在虚拟框中运行的Winxp一起使用了它。 我最终使用Microsoft消息分析器(MMA(在运行Windows 10时重新窥探,并找到了有关正在发生的事情的更多信息。

其中一个关键问题是 snoopy 将有问题的数据包识别为VENDOR_DEVICE消息,但没有指示该 bRequestType 的正确十六进制字节。 它只显示"00",而它应该是"40"(0x40(。 顺便说一句,在互联网的其他地方,我发现了一篇关于VENDOR_DEVICE如何只是请求类型为 0x20 的控制传输消息的帖子,因此在我努力的早期我尝试使用它。 好吧,我想,如果您只查看第 5,6 位,那么0x2技术上是正确的,但当您查看整个半字节时,它会0x4。事后看来,看看USB控制包图,这一切都是有道理的。这个,以及其他一些关于哪些重要的数据包是导致我的问题的小误解。 在这种情况下,我的问题中显示的设置地址命令实际上不是必需的。 我能够使用一些简单的控制传输命令来初始化此设备,这些命令指示正确的请求类型。 例如:

dev.ctrl_transfer(0x40, 0x03, 0x0034, 0x0000, 0x0000)

MMA没有Microsoft,并在2017年初进行了更新。 我怀疑他们会继续保持最新状态。 与snoopypro和其他一些相比,设置它需要一些工作,但它有很多特性和功能。
https://blogs.msdn.microsoft.com/usbcoreblog/2013/11/08/capturing-usb-etw-traces-with-microsoft-message-analyzer-mma/

相关内容

  • 没有找到相关文章

最新更新