Как читать поток файлов pcapng из kismet

Я использую 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 ответ

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

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

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

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