Как прочитать поток файлов pcapng из kismet - PullRequest
0 голосов
/ 16 октября 2019

Я использую kismet на Raspberry Pi для сбора сетевых данных, которые мне нужно анализировать в реальном времени на другом устройстве. API-интерфейс Kismet имеет конечную точку для приема потока двоичных данных в формате pcapng . Я успешно смог прочитать поток, но я не могу найти никакой документации по получению полезных данных из потока, кроме фактического стандарта pcapng. Это было бы хорошо, но поступающие данные не соответствуют формату, и я не нашел библиотек, которые смогли бы успешно проанализировать этот поток. Я думаю, что проблема заключается в том, что при чтении потока дополнительные данные вставляются между каждым захваченным пакетом, поэтому определение начала пакета является основной проблемой. В настоящее время я использую python, но я открыт для других языков, если они могут легко решить эту проблему или если библиотеки уже написаны.

Это код, который я использую для передачи данных в python, где print(line.hex()) будет гдеЯ получил доступ к соответствующим данным.

import requests
r = requests.get(url, stream=True)
for line in r.iter_lines():
    print(line.hex())

1 Ответ

0 голосов
/ 21 октября 2019

Похоже, ошибка заключалась в том, что модуль запросов Python не захватывал весь поток, а некоторые байты отсутствовали. Используя

curlSubProcess = subprocess.Popen(['curl', 'url/pcap/all_packets.pcapng'], stdout=subprocess.PIPE, bufsize=1)
curlSubProcess.stdout.read(lengthnext)

в цикле while, где lengthnext - длина следующего пакета, я смог правильно его прочитать. Затем я проанализировал эти двоичные данные блока с классом, который я написал, и пакетными данными с scapy, и он работает, как и ожидалось.

...