PCAP File Repairing
In general, there are few investigations about the PCAP file format, and usually can be directly repaired by means of off-the-shelf tools such as pcapfix .
- Tools
General file structure:
The common block types defined are:
Section Header Block: it defines the most important characteristics of the capture file.
Interface Description Block: it defines the most important characteristics of the interface(s) used for capturing traffic.
Packet Block: it contains a single captured packet or a portion of it.
Simple Packet Block: it contains a single captured packet, or a portion of it, with only a minimal set of information about it.
Name Resolution Block: it defines the mapping from numeric addresses present in the packet dump and the canonical name counterpart.
Capture Statistics Block: it defines how to store some statistical data (e.g. packet dropped, etc) which can be useful to understand the conditions in which the capture has been made.
Common Blocks¶
Section Header Block¶
Must exist, indicating the beginning of the file.
Interface Description Block¶
Must exist, describe interface characteristics
Packet Block¶
CTF Example¶
Baidu Cup — Find the Flag¶
First, the challenge title Find the Flag hints that we must find the string contains flag .
First step, search for flag string
We will search for flag string with the strings command. Windows users can use the search function of notepad++ .
The search command:
We found out that a lot of matched strings, but it’s not what we looking for.
Step 2, Repair the Traffic Packets File
We opened this PCAP file with wireshark

However, it displayed an error message and seems corrupted, so we need to fix it.
We used this online tool to helps us quickly fix its PCAP file: http://f00l.de/hacking/pcapfix.php

After the repair is complete, click Get your repaired PCAP-file here. to download the repaired PCAP file, then open it with wireshark .
Since we still have to find the flag , we will analyze traffics with wireshark .
Step 3, Follow the TCP Streams
Let’s follow the TCP Streams and see if there is anything interesting?

By following the TCP streams, we found some version information, cookie, etc. We still found something interesting.
From tcp.stream eq 29 to tcp.stream eq 41 , they show the words where is the flag? . Is it hinting the flag is here?
Step 4, Find the grouped byte stream
When we follow tcp.stream eq 29 , we saw lf in the Identification message. We can continue to follow the next stream, Identification in tcp.stream eq 30 we see ga . We discovered that corresponding Identification fields in the two packets when combined from right to left, becomes flag ! So we can guess the flag is inside the Identification fields.
We can find the remaining parts of the flag by using the search by strings feature in wireshark . Edit → Find Packet → Select Packet bytes → Select Narrow & Wide → Select String, then enter flag in search field.
Here are the screenshots of the search:












So the final flag is: flag
References¶
本页面的全部内容在 CC BY-NC-SA 4.0 协议之条款下提供,附加条款亦可能应用。
Name already in use
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README
About
repair corrupted pcap files
Resources
License
Stars
Watchers
Forks
Releases 6
Packages 0
Contributors 6
Languages
Footer
© 2023 GitHub, Inc.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Практические приёмы работы в Wireshark
Джулия Эванс, автор материала, перевод которого мы сегодня публикуем, решила рассказать об одном из своих любимых сетевых инструментов, который называется Wireshark. Это — мощная и сложная программа, оснащённая графическим интерфейсом, предназначенная для анализа трафика в компьютерных сетях. Джулия говорит, что на практике пользуется лишь немногими возможностями Wireshark, но они обычно оказываются очень кстати. Здесь она хочет поделиться со всеми желающими рассказом о самых полезных приёмах работы с программой и надеется, что они пригодятся не только ей, но и всем, кому приходится решать сетевые проблемы.
Установка Wireshark
Дистрибутивы Wireshark для различных операционных систем можно найти здесь. Для инсталляции программы можно скачать и установить соответствующий файл. Кроме того, если вы пользуетесь дистрибутивами Linux, основанными на Debian, можете воспользоваться командой sudo apt install wireshark . При желании, для того, чтобы найти самую свежую версию программы, вы можете обратиться к персональному архиву пакетов wireshark-dev.
Вот как выглядит интерфейс программы.

Интерфейс Wireshark
На первый взгляд всё это может показаться слишком сложным: длинный список пакетов, таинственное поле для ввода каких-то запросов… Как же работать с Wireshark?
Анализ pcap-файлов
Обычно я использую Wireshark для выяснения причин сетевых неполадок. Последовательность действий, выполняемая в ходе решения подобных задач, выглядит так:
- Захват пакетов с помощью tcpdump (обычно — с помощью команды наподобие sudo tcpdump port 443 -w output.pcap ).
- Копирование pcap-файла на рабочий ноутбук ( scp host:
Анализ TCP-соединений
Часто, когда я анализирую в Wireshark некую ситуацию, мне нужно проверить какое-то конкретное TCP-соединение, с которым, по какой-то причине, что-то не так. Благодаря Wireshark можно проанализировать весь жизненный цикл отдельного TCP-соединения и выяснить причины неправильного поведения системы.
Сделать это можно, щёлкнув правой кнопкой мыши по интересующему вас пакету и выбрав в контекстном меню команду Conversation filter > TCP .

Начало анализа TCP-соединения
После этого Wireshark покажет другие пакеты из того же TCP-соединения, к которому принадлежит тот пакет, по которому вы щёлкнули. На рисунке ниже можно видеть пример успешного SSL-соединения — тут присутствуют пакеты client hello , service hello , certificate , server key exchange , которые используются для установления SSL-соединений.

Анализ TCP-соединения
Рассматриваемую здесь методику анализа TCP-пакетов мне пришлось использовать в день написания этой статьи, на работе. Некоторые соединения сбрасывались, и я заметила, что после отправки пакета client hello клиент отправлял пакет FIN ACK , который завершал TLS-соединение. То, что мне удалось выяснить, оказалось полезным, так как стало ясно, что соединения завершает клиент, а не сервер. В результате я тут же узнала, что проблема кроется на клиенте, и мне нужно обратить внимание именно на него.
Выше описана весьма типичная для меня схема работы с Wireshark. Обычно в соединении участвуют клиент и сервер, и что-то идёт не так либо на клиенте, либо на сервере. Это может быть, например, какой-нибудь сбой или ошибка в настройках системы. В результате Wireshark оказывает мне просто бесценную помощь в деле определения виновника проблем, помогая выяснить — клиент это или сервер.
Команда Decode as
Для того чтобы понять, чем именно является конкретный пакет, Wireshark использует номера портов, и обычно этот подход срабатывает. Например, если программа видит некий трафик на порте 80, она решает, что это HTTP-трафик и обычно так оно и есть.
Однако иногда HTTP-соединения используют необычные порты, в результате, для того, чтобы их распознать, Wireshark нуждается в подсказках. Такие подсказки можно давать программе, вызывая контекстное меню пакета и выбирая там команду Decode as . Далее, можно сообщить Wireshark о том, какой протокол используется для передачи пакетов с использованием некоего порта. Подобные подсказки упрощают анализ данных.
Просмотр содержимого пакетов
В Wireshark имеется просто восхитительный режим просмотра подробных сведений о пакете, с помощью которого можно разобраться в содержимом любого пакета. Возьмём, например, пакет с сообщением client hello из предыдущего примера. Это — первый пакет SSL-соединения, клиент с его помощью как бы говорит: «Привет! Вот он я!».
Wireshark даёт сетевому администратору два невероятно полезных инструмента для исследования содержимого пакетов. Первый — это режим просмотра, в котором можно раскрывать заголовки, имеющиеся у пакета (например — Ethernet-заголовок, IP-заголовок, TCP-заголовок) и просматривать их содержимое.

Анализ заголовков пакета
Второй режим просмотра пакетов — это настоящее чудо. Здесь можно видеть необработанные данные пакета в виде последовательности байтов. И, что особенно приятно, если навести мышь на какой-нибудь байт (например, на рисунке ниже указатель наведён на байт, входящий в tiles.services.mozilla.com ), программа, в строке состояния, сообщит о том, к какому полю относится этот байт (в данном случае это — поле Server Name ), и о кодовом имени, используемом Wireshark для этого поля (в данном случае — ssl.handshake.extensions_server_name )

Анализ необработанных данных пакета
Поиск пакетов
Wireshark поддерживает мощный язык запросов. Это значительно упрощает поиск конкретных пакетов в списках. Обычно я, при работе с программой, использую очень простые запросы. Вот несколько примеров:
- Запрос frame contains «mozilla» позволяет выполнить поиск строки mozilla в любом месте пакета и вывести список найденных пакетов.
- Запрос tcp.port == 443 выводит пакеты, использующие TCP-порт 443.
- Запрос dns.resp.len > 0 выводит все DNS-ответы
- Запрос ip.addr == 52.7.23.87 выводит пакеты, IP-адрес источника или получателя которых равен 52.7.23.87.
Просмотр сведений о продолжительности TCP-соединений
Иногда мне нужно обратить особое внимание на исследование медленных TCP-соединений. Как это сделать, при условии, что в имеющемся у меня файле есть записи о тысячах пакетов? Как найти медленные TCP-соединения?
Если выбрать в главном меню программы пункт Statistics , а в нём — команду Conversations , Wireshark предоставит нам замечательный набор статистических сведений.

Статистические сведения
В частности здесь, в колонке Duration , можно увидеть длительность TCP-соединений, выявить самые длительные из них и внимательно их изучить. Это весьма полезная возможность.
Обновление Wireshark
Если вы давно не обновляли Wireshark — это стоит сделать. Например, недавно я, на рабочем ноутбуке, занималась исследованием HTTP/2-пакетов. Мне тогда пришлось нелегко, и я решила посмотреть документацию. Как оказалось, у меня была старая версия программы. В установленном мной обновлении была серьёзно улучшена поддержка HTTP/2, то есть, там было как раз то, что мне было тогда нужно.
Использование Wireshark для изучения сетевых протоколов
В этом материале встречаются некоторые термины, которые можно отнести к чему-то вроде жаргона сетевых специалистов. Например — кадр (frame), TCP-порт (TCP port), DNS-ответ (DNS response), IP-адрес источника (source IP address), пакет client hello SSL-соединения (SSL client hello). Одной из причин их использования является тот факт, что Wireshark, определённо, не пытается оградить пользователя от тонкостей внутреннего устройства сетевых технологий. Новичка такое положение дел может, поначалу, заставить задуматься о том, что Wireshark — это программа не для него, а лишь для опытных сетевых специалистов.
У такой ориентированности Wireshark на низкоуровневые сетевые механизмы, однако, есть серьёзный плюс. Дело в том, что работая с этой программой, можно узнать что-то новое о сетевых протоколах. Например, я не особенно много знаю о внутренних механизмах протокола TLS/SSL. Однако, анализируя трафик в Wireshark, я обратила внимание на то, что первые два пакета SSL-соединения — это client hello и server hello . В результате протокол, который, если не вникать в детали его работы, кажется чем-то таинственным и недоступным для понимания, начинает обретать более понятную форму, превращается в нечто такое, что можно понять и проанализировать.
Итоги
Wireshark имеет огромнейшие возможности. Здесь мы рассказали лишь о некоторых из них. Однако, те приёмы работы, которые здесь рассмотрены, по словам автора материала, используются примерно в 95% ситуаций, когда возникает необходимость в Wireshark. Поэтому мы надеемся, что даже то немногое, о чём вы сегодня узнали, вам пригодится.
Русские Блоги
Формат сообщения-Подробное объяснение формата файла PCAP
Даже для студентов, которые уже использовали wireshark, многие люди не особенно понимают формат сообщений pcap и значение слоя фрейма, предоставляемого в wireshark. Я считаю, что с помощью этой главы вы сможете получить эти новые знания (эта статья Один из моих столбцов «Wireshark от входа до мастера», заинтересованные могут обратить внимание).
Метод хранения по умолчанию в Wireshark — это формат pcap, а метод хранения по умолчанию в последней версии wireshark — pcapng. ng — это аббревиатура следующего поколения. Существуют определенные различия между файлами формата pcap и pcapng. Поскольку файл формата pcap очень распространен, и после понимания файла .pcap на самом деле очень легко понять файл pcapng, поэтому, чтобы учесть старую версию, в этой главе сначала представлен формат файла .pcap. Как правило, формат файла имеет фиксированный режим, заголовок файла используется для характеристики определенного типа файла, который обычно представляет собой структуру TLV, которая является сокращением типа, длины, значения. тип — это тип файла декодера, длина — длина содержимого файла декодера, а значение — данные конкретного контента.
На рисунке 1 показана принципиальная схема файловой структуры сообщения pcap:
Рисунок 1
- 1. Глобальный заголовок — это заголовок файла всего файла, включая идентификацию формата файла, номер версии формата pcap и другую информацию о файле инструкции.
- 2. Заголовок пакета — это информация заголовка каждого пакета данных, которая представляет собой дополнительную информацию, добавляемую программным обеспечением для захвата пакета во время формирования пакета pcap, например время захвата пакета.
- 3. Пакетные данные — это фактические данные, полученные в процессе связи, включая данные протокола и данные контента.
Структура глобального заголовка в исходном коде wireshark содержит следующие поля:
Значение каждого поля в глобальном заголовке следующее:
- 1. Magic_number имеет две функции: одна — идентификация файла pcap, а другая — системное представление порядка байтов. Следовательно, есть два значения: 0xa1b2c3d4 и 0xd4c3b2a1. 0xa1b2c3d4 представляет систему с прямым порядком байтов, а 0xd4c3b2a1 представляет систему с прямым порядком байтов.
- 2. Version_major и version_minor соответственно используют 2 байта для представления номера версии размера, то есть версии формата pcap, а текущая версия равна 2.4. (ps: здесь относится к версии формата файла pcap вместо версии программного обеспечения wireshark)
- 3. Информация о метке времени в заголовке пакета основана на времени, записанном в часовом поясе локальной системы. Поскольку часовые пояса во всем мире не являются согласованными, для единообразия эта зона используется для обозначения разницы между местным часовым поясом и стандартным UTC в секундах, и значение по умолчанию равно 0. Например, обычно по умолчанию, отображаемым wireshark в столбце Time, указывается местное время, поскольку конфигурация по умолчанию в wireshark показана на рисунке 2:

Рисунок 2
Выбрав Time-> Right-click-> Edit столбец, Absolute в красном поле указывает местный часовой пояс. Если вы выберете начало UTC, вы увидите, что отображаемое время на 8 часов отличается от местного времени, потому что мы используем пекинское время в Восточном восьмом округе, а конкретные расчеты основаны на поле thiszone. (PS: в реальном процессе я обнаружил, что это поле обычно 0, которое записывается в соответствии с временем UTC, но время в заголовке пакета указано по местному времени, и существует противоречие с его определением. Я не знаю, является ли это ошибкой Wireshark) - 4. sigfigs — это точность информации о временной метке в заголовке пакета, длина которой составляет 4 байта, обычно по умолчанию 0.
- 5. Максимальная длина привязки составляет 4 байта, которая описывает максимальную длину каждого пакета данных, который может быть захвачен.Как правило, по умолчанию используется значение ffff 0000, которое составляет 65535 байтов. Для семейства протоколов TCP / IP, поскольку MTU обычно ограничивается примерно 1500, настройка по умолчанию определенно достаточна для ежедневного использования. Конечно, эта длина может быть установлена в wireshark.
- 6. Сеть имеет 4-байтовый тип связи, например, значение общего Ethernet равно 1. Существует 288 известных типов канальных слоев, подробности см.Вот。
Позвольте мне взять конкретное сообщение, захваченное в Windows x86, в качестве примера для дальнейшего объяснения вышеуказанных полей. Следующий поток кода — это первая часть пакетных данных файла, открытого с помощью редактора шестнадцатеричных файлов HxD (обратите внимание, что если вы используете nodepadd ++ для открытия, в китайской операционной системе соответствующий метод кодирования ANSI должен быть gbk. Просмотр , Первые два китайских символа будут отображаться как «болезнь Юэ», потому что в кодировке gbk у Юэ есть значение Oxd4c3, а болезнь — 0xb2a1, а последующее — много искаженных символов, потому что оно декодирует поток кода. Это использует шестнадцатеричный редактор, такой как HxD):
Вы можете видеть, что magic_number равен 0xd4c3b2a1, что указывает на то, что это сообщение pcap в системе с прямым порядком байтов, и все последующие данные должны быть декодированы с использованием функции с прямым порядком байтов Следовательно, version_major и version_minor соответственно 0000002 (обратите внимание на порядковый номер). И thiszone, и sigfigs имеют значение 0000 0000, указывая время записи в соответствии со стандартным GMT. snaplen равен 0004 0000, что указывает на то, что максимальная длина захвата одного пакета данных составляет 2 ^ 19 -1. сеть 0000 0001, что означает Ethernet.
Структура заголовка пакета в исходном коде wireshark содержит следующие поля:
Значение каждого поля в заголовке пакета следующее:
- ts_sec и ts_usec используют 4 байта для представления секунд и миллисекунд метки времени захвата соответственно.
- incl_len использует 4 байта для представления длины пакета, фактически захваченного программным обеспечением.
- orig_len использует 4 байта для представления длины исходного сообщения.Из-за ограничения snaplen в глобальном заголовке, фактический incl_len может быть меньше, чем orig_len.
Взяв в качестве примера вышеупомянутые пакетные данные, открытые с использованием программного обеспечения HxD, за заголовком пакета следует часть заголовка пакета первого пакета. Согласно порядку байтов с прямым порядком байтов ts_sec и ts_usec равны 5ad2 b4de и 0008 e678 соответственно, преобразованное время — 15 апреля 2018 10: 11: 42.583288000. Incl_len и orig_len имеют значение 0000 00ff в соответствии с порядком байтов, который имеет длину 255 байтов. Остальное содержимое пакета данных.
Для получения информации в глобальном заголовке и заголовке пакета wireshark добавляет дополнительный уровень кадра для каждого пакета при отображении и анализе данных пакета. Приведенные выше данные пакета отображаются в wireshark, как показано на рисунке 3:
Рисунок 3
Как видно из рисунка 3, информация, предоставляемая этим слоем, включает два типа, один тип не имеет квадратных скобок, этот тип информации означает, что он может быть извлечен из текста дейтаграммы pcap Немного информации.
- 1. Тип инкапсуляции: Ethernet (1) указывает тип канала Ethernet, то есть содержимое сети глобального заголовка.
- 2. Время прибытия 15 апреля 2018 г. 10: 11: 42.583288000 и Epoch Time: 1523758302.583288000 секунд указывают время получения сообщения, только два разных формата времени. Информация о времени получается из полей ts_sec и ts_usec заголовка пакета.
- 3. Длина кадра: 255 байтов (2040 битов) указывает длину данных, то есть длину, полученную из поля orig_len заголовка пакета, которое немного отличается от следующей длины захвата.
- 4. Длина захвата: 255 байт (2040 битов) представляет фактическую длину данных, захваченных на сетевой карте, которая является полем incl_len заголовка пакета. Обычно длина кадра и длина захвата одинаковы, но если данные, полученные с помощью длины захвата, имеют ограничение по длине, длина захвата меньше, чем длина кадра.
Другой тип — с квадратными скобками.Этот тип информации представляет собой вспомогательную информацию, представленную на основе общего анализа сообщения. Как и [Протоколы в фрейме: eth: ethertype: ip: tcp: ssl], это информация протокола, полученная на основе последующего декодирования и анализа пакета. Сам файл pcap не содержит этой информации поля.
Хотя кадр не является частью сетевого протокола, wireshark предоставляет фильтры отображения для уровня кадра, как и каждый протокол для фильтрации пакетов (выравнивание данных уровня IP, уровня TCP и уровня HTTP), как показано на рисунке 4:
Рисунок 4
Я считаю, что благодаря вышеприведенному введению у вас должно появиться новое понимание информации, предоставляемой слоем фрейма и форматом файла pcap.
Эта статья является оригинальной статьей молодого мальчика из CSDN Village.Вот。