Способы чтения файлов PCAP на Python используя Scapy

Python

В процессе создания инструмента для извлечения информации из файлов pcap, я столкнулся с ситуацией, когда время обработки было медленным, а расход памяти рос. В поиске различных способов использованием Scapy я научился профилировать код Python.

Еще по теме: Сканер Wi-Fi сетей на Scapy Python

Способы чтения pcap-файлов на Python используя Scapy

Чтение файла .pcap с помощью Scapy обычно выполняется с использованием функции rdpcap(). Эта функция читает весь файл и загружает его в память. В зависимости от размера файла, который вы пытаетесь прочитать, это может занять много памяти.

Маленький пример скрипта с использованием этой функции занимал значительное количество времени, поэтому я решил найти другую альтернативу. Я начал тестировать PcapReader(). Он в плане потребления памяти, но у него есть свои особенности.

Итак предлагаю две версии скрипта для выполнения одной и той же задачи. Оба скрипта открывают pcap, считывают все пакеты и извлекают урлы в текстовый файл. Поведение одинаковое, но время выполнения и потребление памяти немного отличаются.

Использование rdpcap():

Документация Scapy объясняет, что rdpcap() — это способ чтения фалов pcap. Эта функция читает весь файл и загружает его в память. Если файл достаточно большой, возможны некоторые проблемы с производительностью.

Первая версия скрипта, которую я использовал, была похожа на приведенную ниже. Я оставил использование memory_profiler, так как полагался на него для сравнения этого скрипта с другой альтернативой. Больше информации о профилировании памяти Python будет представлено в следующей статье.

Здесь представлен пример скрипта с использованием rdpcap()

Использование PcapReader():

Scapy также имеет другую функцию для чтения pcap — PcapReader(). Она позволяет итерировать по захваченным пакетам в файле и разбирать их. Файл не загружается полностью в память. Это немного более эффективно по памяти.

Здесь представлен пример скрипта с использованием PcapReader()

Выходные данные: URL-адреса

Я скачал несколько pcap-файлов с Malware Traffic Analysis и сравнил их выводы. Изначально я тестировал с двумя файлами.

Скрипты принимают 2 параметра на вход, путь к входному файлу и путь к выходному файлу. Я рекомендую создать виртуальное окружение Python и установить необходимые библиотеки для тестирования.

Пример запуска скриптов:

Один из простых способов проверить соответствие выводов — это сравнить хеши файлов:

Заключение

Оба способа чтения PCAP и извлечения урлов кажутся достаточно хорошими. Тем не менее, при работе с большими файлами .pcap возникают некоторые проблемы при использовании rdpcap().

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

ПОЛЕЗНЫЕ ССЫЛКИ:

Ban32

Хакер-самоучка, который может взломать тостер и настроить его на отправку вам утреннего приветствия в коде Морзе.

Добавить комментарий