Как объединить pcap файлы

Обновлено: 04.07.2024

Я уже знаю, как читать файл pcap и получать его пакеты. Ut Как я могу написать пакеты в новый файл pcap? Мне нужно это, чтобы объединить два файла pcap в один.

Согласно моему комментарию, libpcap/WinPcap - это библиотека, а не программа, поэтому для использования файлов libpcap/WinPcap для объединения файлов захвата вам нужно написать свой собственный код для слияния, используя libpcap/WinPcap для чтения входных файлов и написать выходные файлы.

Вы можете использовать существующий инструмент, такой как tracemerge или mergecap Wireshark, чтобы объединить захваты.

Предполагая, что цель состоит в объединении пакетов двух файлов по метке времени, тогда, если вы хотите написать свой собственный код, вы должны:

  • попытаемся открыть два файла и сбой, если вы не можете;
  • Если у двух файлов разные типы заголовков или длины снимков, вы должны записать файл pcap-ng для его обработки, а libpcap/WinPcap еще не поддерживает это;
  • Если файлы имеют одинаковые типы заголовков и длины снимков на уровне канала, откройте выходной файл, используя один из pcap_t s (неважно, какой из них: pcap_t делает это pcap_dump_open () , какой тип заголовка и длина снимка для использования);

и у вас есть петля, где вы:

  • если пакет уже не прочитан из первого файла, а первый файл все еще открыт, прочитайте пакет из него - если он получает EOF, закройте первый файл;
  • , если нет пакета, уже прочитанного из второго файла, а второй файл все еще открыт, прочитайте пакет из него - если он получает EOF, закройте второй файл;
  • Если у вас есть два пакета, выпишите тот, у кого есть старая отметка времени, и отметьте этот пакет, поскольку он больше не существует, поэтому вы читаете другой пакет из файла, из которого он пришел;
  • , если у вас есть только один пакет, запишите его и пометьте его, поскольку он больше не существует, поэтому вы читаете другой пакет из файла, из которого он пришел;
  • Если у вас нет пакетов, все готово - выйдите из цикла;

и затем, когда вы выходите из цикла, закройте файл дампа. В этот момент все готово.

Как фильтровать, разделять и объединять файлы pcap под Linux

Если ты тестСистема обнаружения вторженийИли некоторые сетевые администраторы политик контроля доступа к сети, тогда вам часто нужно захватывать пакеты данных и анализировать эти файлы в автономном режиме. Когда нам нужно сохранить захваченные пакеты, мы обычно сохраняем их в формате pcap пакета libpcap, который широко используется многими инструментами сниффинга с открытым исходным кодом и программами захвата пакетов. Если файлы pcap используются для тестирования вторжений или автономного анализа, добавьте их.инъекцияПеред подключением к сети обычно необходимо выполнить некоторые операции с файлом pcap.


В этой статье я расскажу о некоторых инструментах для работы с файлами pcap и о том, как их использовать.

Editcap и Mergecap

Wireshark, самый популярный инструмент для сниффинга графического интерфейса, на самом деле поставляется с очень полезным набором инструментов командной строки. К ним относятся editcap и mergecap. editcap - это универсальный редактор pcap, он может фильтровать и разделять файлы pcap разными способами. mergecap может объединять несколько файлов pcap в один. Эта статья основана на этих инструментах командной строки Wireshark.

Если вы уже установили Wireshark, то эти инструменты уже есть в вашей системе. Если он еще не установлен, тогда мы установим инструмент командной строки Wireshark. Следует отметить, что в дистрибутивах на основе Debian мы можем установить только инструменты командной строки без установки графического интерфейса Wireshark, но в Red Hat и дистрибутивах на его основе нам нужно установить весь пакет Wireshark.

Debian, Ubuntu или Linux Mint

Fedora, CentOS или RHEL

После установки инструментов вы можете начать использовать editca и mergecap.

фильтрация файлов pcap

С помощью editcap мы можем фильтровать содержимое файла pcap с помощью множества различных правил и сохранять результаты фильтрации в новый файл.

Сначала отфильтруйте файлы pcap по «времени начала и окончания». Опции «-A <время начала> и» -B <время окончания> могут отфильтровывать пакеты данных, поступающие в этот период времени (например, с 2:30 до 2:35). Формат времени: «ГГГГ-ММ-ДД ЧЧ: ММ: СС».

  1. $ editcap -A '2014-12-10 10:11:01' -B '2014-12-10 10:21:01' input.pcap output.pcap

Вы также можете извлечь из файла указанные N пакетов. Следующая командная строка извлекает 100 пакетов (от 401 до 500) из файла input.pcap и сохраняет их в output.pcap:

Используйте опцию «-D <dup-window>» (dup-window можно рассматривать как размер окна сравнения и сравнивать только с пакетами в этом диапазоне) опцию для извлечения повторяющихся пакетов. Каждый пакет сравнивается с предыдущими пакетами <dup-window> -1 в последовательности с длиной и значением MD5, и если есть совпадение, он отбрасывается.

Было пройдено 37568 пакетов, и в 10 окнах был только один повторяющийся пакет, и он был отброшен.

Вы также можете определить <dup-window> как временной интервал. Используйте параметр «-w <dup-time-window>» для сравнения пакетов, которые прибывают в течение времени <dup-time-window>.

Было получено 50000 пакетов, 0,5 с использовалось в качестве окна повтора, и не было обнаружено никаких повторяющихся пакетов.

Разделить файл pcap

Когда большой файл pcap необходимо разделить на несколько небольших файлов, editcap также может сыграть большую роль.

Разделить файл pcap на несколько файлов с одинаковым количеством пакетов

  1. $ editcap -c <packets-per-file> <input-pcap-file> <output-prefix>

Каждый выходной файл имеет одинаковое количество пакетов и имеет имя в форме <выходной-префикс> -NNNN.

Разделить файлы pcap через определенные промежутки времени

  1. $ editcap -i <seconds-per-file> <input-pcap-file> <output-prefix>

Слияние файлов pcap

Если вы хотите объединить несколько файлов в один, очень удобно использовать mergecap.

При объединении нескольких файлов mergecap по умолчанию отсортирует внутренние пакеты данных в хронологическом порядке.

  1. $ mergecap -w output.pcap input.pcap input2.pcap [input3.pcap . . .]

Если вы хотите игнорировать временную метку и просто хотите объединить файлы в порядке, указанном в командной строке, используйте параметр -a.

Например, следующая команда запишет содержимое файла input.pcap в output.pcap и добавит содержимое input2.pcap на задний план.

  1. $ mergecap -a -w output.pcap input.pcap input2.pcap

подводить итоги

В этом руководстве я продемонстрировал несколько примеров файлов pcap editcap и mergecap. Кроме того, есть другие связанные инструменты, такие какreordercapИспользуется для изменения порядка пакетов данных,text2pcapИспользуется для преобразования файлов pcap в текстовый формат,pcap-diffИспользуется для сравнения сходств и различий файлов pcap и т. Д. При проведении тестирования на проникновение в сеть и решении сетевых проблем эти инструментыИнструмент для инъекции пакетовОчень практично, поэтому лучше их понять.

Вы использовали инструмент pcap? Если вы его использовали, что вы с ним сделали?

Этичный хакинг и тестирование на проникновение, информационная безопасность

В одном файле захвата сетевых данных (формат pcap) может содержаться более чем одно рукопожатие (handshake). Такое можно происходить, например, при продолжительной работе Airodump-ng, в результате чего она может перехватить несколько рукопожатий от одной или разных точек доступа. Рукопожатия из файлов, захваченных в «шумных» условиях нуждаются в дополнительной проверке и очистке.

Несколько рукопожатий в одном файле можно получить искусственно, просто объединяя их в один файл. К примеру, программа Besside-ng (автоматически захватывает рукопожатия от всех дочек доступа в пределах досягаемости, для этого проводит атаку деаутентификация) создаёт единый файл .cap для всех захваченных пакетов рукопожатий.

Т.е. это не редкая ситуация, и для проведения атаки на сети, чьи рукопожатия находятся в одном файле, может потребоваться извлечь каждое рукопожатие.

Как разделить рукопожатия по разным файлам

Важно понимать разницу между файлом, в котором просто слито несколько рукопожатий, и файлом захвата в шумной среде. Пример анализа файла первого типа (с помощью aircrack-ng):


Пример файла второго типа:


Видно, что во втором файле имеется много мусора, и во всём файле всего два пригодных для взлома рукопожатия. Среди мусора много отдельных фреймов EAPOL (составляющих хендшейка), которые непригодны для подбора пароля.

Для просмотра содержимого файла можно использовать Wireshark. После открытия файла установите фильтр:

Ручное разбитие файлов рукопожатий с помощью Wireshark

Если вы работаете с файлом из слитых рукопожатий, то с ним не должно быть особых проблем. Открываем файл в Wireshark:


Можно использовать фильтр

Но он может оказаться и не нужным, поскольку и без того имеются только нужные пакеты.

Чтобы отфильтровать пакеты для определённой точки доступа, укажите её BSSID со следующим фильтром:


Теперь с помощью CTRL+m выделите нужные пакеты:


И в меню File выберите Export Specified Packets:


Введите имя файла и поставьте переключатель на Marked packets only:


Проверяем наш файл:


Всё отлично. Можно сделать ещё одну проверку с помощью coWPAtty, запустив команду вида:

Например, в моём случае:


Фраза «Collected all necessary data to mount crack against WPA2/PSK passphrase» означает, что собраны все необходимые данные для взлома пароля.

Для вычленения рукопожатия из захвата, выполненного в шумных условиях, необходимо приложить некоторые усилия. Начинам с фильтрации (замените 84:C9:B2:52:F6:37 на BSSID интересующей вас сети):

Хендшейк подходит для взлома пароля если:

  • обязательно включает в себя второй элемент (M2), а также третий (M3) (гарантирует, что было сделано подключение к сети) или вместо третьего элемента содержит первый элемент (M1) (рукопожатие подходит для взлома пароля, но нет гарантий, что было выполнено подключение и что вообще был введён верный пароль). Лучше, если удалось захватить все четыре элемента;
  • элементы рукопожатия должны следовать в нужном порядке;
  • между ними не должно быть слишком большого интервала времени (измеряется миллисекундами и микросекундами).

Смотрим следующий пример.


Выделяем и сохраняем нужные фреймы (я также выделил фрейм Beacon):


Наш файл проходит проверки:


Выделение рукопожатия с помощью tshark

tshark – это Wireshark, но без графического интерфейса. Эту программу можно также использовать для разделения большого файла захвата на отдельные рукопожатия. Для этого команда запускается следующим образом:

В ней нужно вставить свои значения для:

  • ИСХОДНЫЙ_ФАЙЛ.cap – файл с несколькими хендшейками
  • BSSID – MAC-адрес интересующей точки доступа
  • ИТОГОВЫЙ_ФАЙЛ.cap – файл, куда будет сохранено выделенное рукопожатие

Пример реальной команды:

Решение ошибки Unsupported file format (not a pcap or IVs file). Read 0 packets. No networks found, exiting.

У некоторых пользователей при использовании tshark, а затем последующем открытии полученного файла в aircrack-ng возникает ошибка:

Чтобы этой ошибки не было, во время сохранения программой tshark к ней нужно указывать опцию -F pcap, которая задаёт правильный формат файла.

Скрипт для разделения рукопожатий

Для автоматизации разделения одного файла на рукопожатия, я написал скрипт. Помните, что если вы разбиваете файл полученный с помощью Besside-ng или искусственно при слиянии хендшейков, то скрипт отработает без проблем.

Если вы разделяете на отдельные хендшейки файл захвата, полученный в шумных условиях (например, во время длительной работы Airodump-ng), то скрипт будет работать так:

  • если для какой-либо точки доступа не найдено ни одного рабочего хендшейка, то все данные для неё будут отброшены (не будет создаваться файл вывода)
  • если для точки доступа найдено хотя бы одно рабочее рукопожатие, то все фреймы EAPOL будут сохранены в один файл.

Т.е. вам нужно будет самостоятельно открыть файлы вывода и проверить, нет ли в них лишних данных.

Хотя aircrack-ng вроде бы правильно находит нужный хендшейк, но с cap2hccapx (из набора hashcat-utils, используется для конвертации в формат хеша Hashcat) замечены проблемы, если предварительно не почищены ненужные фреймы EAPOL от непригодных хендшейков.

Создайте файл handshakes_extractor.sh:

И скопируйте туда:

Для запуска укажите .(p)cap файл, из которого нужно извлечь рукопожатия.

Пример работы программы:


Выводится информация об имени файла с сохранёнными фреймами, а также информация о самих сохранённых фреймах.

Когда не нужно разделять файл на отдельные рукопожатия

Вам необязательно предварительно разделять файл на отдельные хендшейки, если вы собираетесь использовать программу aircrack-ng. Для выбора цели вы можете воспользоваться опциями:

Программа cap2hccapx запишет все хеши (для взлома в Hashcat) в один файл .hccapx.


Чтобы записать хеш только для одной ТД, укажите её ESSID:

У меня есть программное обеспечение, которое может эмулировать такие вещи, как BER и задержки в сети. Мне нужен способ протестировать модуль BER программного обеспечения, чтобы убедиться, что он действительно работает правильно. Мое решение состоит в том, чтобы создать программу, которая отправляет необработанные кадры Ethernet с полем типа, установленным в неиспользуемый тип. Внутри кадра Ethernet просто случайные биты. Для каждого отправленного кадра мне нужно записать кадр в файл pcap . На другой стороне сетевого канала будет получающее приложение, которое просто записывает каждый увиденный пакет в свой собственный pcap журнал. После того, как тест завершен, два журнала pcap будут сравниваться, чтобы получить BER.

Я использую модуль Python Scapy и до сих пор он сделал все, что мне нужно. Я могу отправлять необработанные кадры Ethernet со случайными данными и видеть их в Wireshark. Однако я не знаю, как заставить метод wrpcap() добавлять в файл pcap вместо перезаписи. Я знаю, что могу написать список пакетов в wrpcap , но это приложение должно работать в течение неопределенного времени, и я не хочу ждать, пока приложение закроется, чтобы записать все пакеты отправлено на жесткий диск. Так как это будет много для хранения в памяти, и если что-то случится, мне придется начинать тестирование с нуля.

Мой вопрос: как мне добавить файл pcap , используя scapy вместо перезаписи файла pcap ? Это вообще возможно? Если нет, то какой модуль может делать то, что мне нужно?

Ища что-то с возможностями Scapy , я столкнулся с dpkt , но я не нашел много документации для этого. Может ли dpkt сделать то, что я прошу, и если да, то где я могу получить хорошую документацию для этого?

4 ответа

Есть способ сделать то, что вы хотите, но это означает либо:

[Захват памяти с одним большим pcap ]: прочитайте существующий pcap с диска с rdpcap() в scapy PacketList() и затем записайте кадры в > как они получены. Вы можете выборочно сохранить промежуточный PacketList в pcap по своему желанию, но я не думаю, что есть что-то вроде возможности добавления в scapy wrpcap() . Как вы упоминали, этот метод также означает, что вы сохраняете весь PacketList в памяти до завершения.

[Склеивать отдельные файлы pcap вместе]: Хранить в памяти только небольшие снимки пакетов . Вы должны сохранять pcap снимки на X-минутной основе на диск, а затем объединять эти отдельные файлы вместе когда сценарий заканчивается.

Вы можете объединить pcap файлы в Linux с mergecap из пакета wireshark . Следующая команда объединит pak1.pcap и pak2.pcap в all_paks.pcap :

Что касается dpkt , я просмотрел их источник, и он мог бы пошаговая запись пакетов, но я не могу говорить о том, насколько стабильной или поддерживаемой является их кодовая база . она выглядит немного игнорируемой в журналах фиксации (последняя фиксация была 9 января 2011 г.).

Функция wrpcap() может использоваться для добавления, если вы включаете ключевое слово аргумент append=True . Например:

Примечание: wrpcap открывает и закрывает дескриптор файла при каждом вызове. Если у вас есть дескриптор открытого файла для файла pcap, он будет закрыт после вызова wrpcap() .

Для потомков PcapWriter или RawPcapWriter выглядит более простым способом решения этой проблемы в scapy 2.2.0. Не могу найти много документации, кроме просмотра источника, хотя. Краткий пример:

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

Я не уверен, если это отвечает на ваш вопрос или помогает вообще, если нет, дайте мне знать, и я могу настроить его для удовлетворения ваших потребностей. В этом примере я установил порог, чтобы создать новый pcap для всех 500 прослушиваемых пакетов. Будьте осторожны, если вы запустите это дважды, поскольку ваши pcaps могут быть перезаписаны на втором ходу.

Это должно дать вам немного рычагов, однако последние несколько пакетов могут быть потеряны (уменьшите значение в операторе if, чтобы уменьшить это.) Предложите использовать его с обеих сторон одновременно, чтобы каждый pcap выстраивался в линию. Позже вы можете использовать mergepcap, как предлагает Майк, если хотите. Дайте мне знать, если это работает для вас.

Читайте также: