Многопоточность Scapy для анализа PCAP - PullRequest
0 голосов
/ 02 мая 2019

Я пишу программу на Python (python 3.7.3) для чтения файла PCAP со значениями Scapy и дополнительными данными, такими как количество пакетов / кадров, временная метка каждого пакета, размер каждого пакета и т. Д. Затем эти значения будут использоваться для дианостика - как пиковый объем трафика, периоды заторов и т. д.,

Ядро программы выглядит так:

X = sniff(offline =File, prn=create_list, store=0)

def create_list(packet):
    key = tuple([packet[0].time, len(packet[0])])
    then append a list L1 with key

Теперь программа работает абсолютно нормально. Но анализ PCAP 150 МБ занимает около 1 минуты. Фактические сетевые PCAP будут в ГБ, поэтому мы рассчитываем на 10 секунд для каждой итерации.

Я думал об использовании потоков, чтобы сделать эту программу быстрее. Но я не могу найти логику, на которой основаны потоки.

Как:

  1. Файл PCAP не проиндексирован. Таким образом, невозможно построить потоки на основе номеров пакетов.

  2. Рассматривается разделение PCAP на более мелкие куски и параллельное использование нити на них. Но:

а.

split-pcap.py

медленнее, чем моя оригинальная программа: (

б.

filesplit 2.0.0

делает грубое разделение. Таким образом, Scapy не может прочитать результирующие файлы расщепления как PCAP. Я пробовал разные кодировки в:

splitbyencoding (rencoding=“here”, wencoding=“here”, include_header=True, callback=None)

Но положительного результата нет.

Поиск предложений от сообщества о том, как я могу сделать свою программу быстрее - Советы по нарезке логики - Использование разных модулей / функций - Метод кодирования, который можно использовать для разделения PCAP

Примечание: я использую sniff (), а не rdpcap (), чтобы избежать перегрузки памяти. Идея состоит в том, чтобы преобразовать эту программу в .exe или скрипт для конечных пользователей. На их компьютерах может не хватить памяти для загрузки всего pcap через rdpcap ().

Спасибо!

...