Я пишу программу на 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 секунд для каждой итерации.
Я думал об использовании потоков, чтобы сделать эту программу быстрее. Но я не могу найти логику, на которой основаны потоки.
Как:
Файл PCAP не проиндексирован. Таким образом, невозможно построить потоки на основе номеров пакетов.
Рассматривается разделение 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 ().
Спасибо!