2

我目前正在尝试使用 USBPcap + Python/dpkt 分析传入的 USB 流量,并以光学 USB 鼠标作为示例输入设备。

启动包含命令的批处理文件后

USBPcapCMD.exe -d \\.\USBPcap7 -o - | pipetest.py

以下代码完美运行:

# pipetest.py
# sniffing for USB-mouse activities
import sys
import dpkt, struct

try:
    f = open('c:\\users\\user\\downloads\\test.pcap','wb')
    while True:
        inpt = sys.stdin.read(34)        # package length
        f.write(inpt)
except KeyboardInterrupt:
   f.close()

f = open('c:\\users\\user\\downloads\\test.pcap','rb')
pcap = dpkt.pcap.Reader(f)
print

for ts, buf in pcap:
    data = struct.unpack("b"*7, buf[-7:]) # 7-byte leftover with mouse info
    print data 

f.close()

输出是:

34
34
34
34
34
34
34
34
34
34
34
34
^C
(3, 4, 0, 0, 0, 0, 0)  <---|
(3, 0, 0, 0, 0, 0, 0)      |
(3, 4, 0, 0, 0, 0, 0)  <---|
(3, 0, 0, 0, 0, 0, 0)      |------ Four clicks with mouse wheel
(3, 4, 0, 0, 0, 0, 0)  <---|
(3, 0, 0, 0, 0, 0, 0)      |
(3, 4, 0, 0, 0, 0, 0)  <---|
(0, 0, 0, 9, 0, 1, 7)

不幸的是,我在对捕获的数据进行实时分析时遇到了问题。如何让 dpkt.pcap.Reader() 使用sys.stdin而不是 open('foo.pcap')?

PS我当然可以

USBPcapCMD.exe -d \\.\USBPcap2 -o - | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -

官方迷你教程所示,但我想使用 USB 嗅探器 + Python 执行实时 USB 流量。

PPS Python/PyUSB + libusb-win32 完美运行,但我确实需要 USBPcap!:)

4

1 回答 1

0

您可以为此使用命名管道 (FIFO 缓冲区)https://en.wikipedia.org/wiki/Named_pipe#In_Windows),请参阅python 中的 createNamedPipeWindows 命名管道在实践中

您创建命名管道,USBpcap从您的 python 程序中打开并将输出通过管道传输到您刚刚创建的命名管道(如何在 Python 中运行 .exe 文件如何使用 python 运行带有参数的 exe 文件),然后您阅读来自命名管道dpkt.pcap.Reader()

https://msdn.microsoft.com/de-de/library/windows/desktop/aa365590%28v=vs.85%29.aspx

https://msdn.microsoft.com/de-de/library/windows/desktop/aa365592%28v=vs.85%29.aspx

于 2017-02-19T10:00:45.767 回答