Как читать из стандартного ввода с помощью dpkt.pcap.Reader?

В настоящее время я пытаюсь проанализировать входящий USB-трафик, используя USBPcap + Python / dpkt, с оптической 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)

К сожалению, у меня проблема с LIVE-анализом захваченных данных. Как я могу заставить dpkt.pcap.Reader() работать с sys.stdin вместо open ('foo.pcap')?

PS я конечно могу сделать

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

как показано в официальном мини-руководстве, но я хотел бы выполнять USB-трафик в режиме реального времени, используя USB-сниффер + Python.

PPS Python/PyUSB + libusb-win32 работает отлично, но мне нужен USBPcap!:)

1 ответ

Для этого вы можете использовать именованный канал (буфер FIFO) ( https://en.wikipedia.org/wiki/Named_pipe), см. createNamedPipe в python и именованные каналы Windows на практике

вы создаете именованную трубу, открываете USBpcap из вашей программы на Python и перенаправьте вывод в только что созданный именованный канал ( Как запустить файл.exe в Python, как запустить exe-файл с аргументами, использующими python), затем вы читаете из именованного канала с помощью 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

Другие вопросы по тегам