我有一个来自snoopypro的usb嗅探我正在尝试与之通信的设备。我发现设置完成后我可以通过批量消息与它通信,但是我无法复制设置消息。其中一些消息在snoopy中被标记为'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]其他错误'。管道错误似乎表明设备不支持该命令。我不确定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)
答案 0 :(得分:0)
所以,我的建议是尽可能避免使用snoopypro。它已经很老了,显然甚至不能在Win7,8或10上运行。[我最初使用Winxp在虚拟机中运行。]我最终使用Microsoft Message Analyzer(MMA)在运行Windows 10时重新窥探并找到了关于发生了什么的更多信息。
其中一个关键问题是,史努比将相关数据包识别为VENDOR_DEVICE消息,但没有为该bRequestType指示正确的HEX字节。当它应该是'40'(0x40)时,它只显示'00'。顺便说一句,在互联网上的其他地方,我发现了一篇关于VENDOR_DEVICE如何只是一个请求类型为0x20的控制传输消息的帖子,所以在我尝试使用它的努力中更早。好吧,我想假设0x2在技术上是正确的,如果您只查看位5,6,但是当您查看整个半字节时,它将是0x4。在后面的视线中,看一下USB控制包图,这一切都是有道理的。对于哪些重要的数据包导致我的问题,以及其他一些小的误解。在这种情况下,我的问题中显示的set address命令实际上并不是必需的。我能够使用一些简单的控制传输命令初始化此设备,该命令指向正确的请求类型。例如:
dev.ctrl_transfer(0x40, 0x03, 0x0034, 0x0000, 0x0000)
MMA从微软免费获得,并于2017年初更新。我怀疑他们会继续保持最新状态。与snoopypro和其他一些相比,它需要一些工作才能进行设置,但它具有很多特性和功能。
https://blogs.msdn.microsoft.com/usbcoreblog/2013/11/08/capturing-usb-etw-traces-with-microsoft-message-analyzer-mma/