Как я могу разобрать файл Pcapng в C#? - PullRequest
0 голосов
/ 13 марта 2020

Я новичок в файлах Pcapng. Я прочитал статью с 40+ страницами и все еще чешу голову и потею. Я понимаю, что файл Pcapng:

  1. Состоит из блока заголовка раздела - это начало каждого файла Pcapng.

Вопрос 1: Насколько большой это?

Похоже, что это BlockType (4 байта) + BlockTotalLength (4 байта) + Magi порядка байтов c (4 байта) + версия Mahor и Minor (всего 4 байта, каждый по 2 байта) + длина секции ( 4 байта) + Опции (переменная) + Блок Общая длина (снова 4 байта).

Если я создаю парсер, как я узнаю, сколько байтов мне нужно пропустить, чтобы получить мои первые данные кадр кадра?

Вопрос 2: Где хранятся данные? Под данными я подразумеваю весь кадр, который содержит данные Ethe rnet, IP и TCP, как показано на рисунке ниже (рисунок 1).

enter image description here

В документации указано, что:

Раздел включает данные, разделенные двумя блоками заголовка раздела.

При выполнении ручной проверки (да, я прошел побайтово файл, чтобы увидеть, сколько байтов l ie между двумя кадрами: '(), я заметил, что между каждым сообщением было 35 байтов (каждое сообщение, отображаемое в wireshark, содержало 35 байтов между ними). ​​Связаны ли эти байты с pcapng block?

Как только я пойму, как добраться до первого кадра tcp и сколько байтов мне нужно пропустить, чтобы перейти к следующему, я могу собрать свой синтаксический анализатор.

Я готов отправить Биткойн / Монеро любому, кто поможет мне понять, как мне лучше всего разобрать эти сообщения pcapng. Спасибо!

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Я думаю, что @ tee-zad-awk нашел ответ, который помог на https://ask.wireshark.org/question/15159/how-can-i-display-as-much-pcapng-information-as-possible/, но в интересах любого, кто ищет ответ на этот вопрос, я связал его здесь и предоставил мой ответ ниже, на случай, если когда-нибудь ссылка когда-нибудь будет разорвана.


Кажется, что после прочтения 40-страничного документа на Pcapng ...

Текущий формат файла захвата PCAP Next Generation (pcapng) составляет 52 страницы, так что, возможно, вы не смотрите самую последнюю версию? Существуют и другие версии, такие как https://tools.ietf.org/html/draft-tuexen-opswg-pcapng-00, https://pcapng.github.io/pcapng/ или https://www.tcpdump.org/pcap/pcap.html и, возможно, другие, но все они устарели.

Если вы ищете анализатор pcapng, который поможет вам расшифровать файл, то не ищите ничего, кроме самого Wireshark. Если вы загрузили файл pcapng в Wireshark, вы можете использовать «Вид -> Перезагрузить как формат файла / захват» (Ctrl+Shift+F), чтобы Wireshark загружал и отображал сам файл необработанного содержимого, а не загрузить и отобразить пакеты из файла. Это должно позволить вам видеть различные блоки pcapng и углубляться в них. Например:

Frame 1: 184 bytes on wire (1472 bits), 184 bytes captured (1472 bits)
MIME file
PCAPNG File Format
    Block: Section Header Block 1
    Block: Interface Description Block 0
    Block: Enhanced Packet Block 1

Вы также можете взглянуть на исходный код Wireshark, такой как epan / disctors / file-pcapng. c и wiretap / pcapng. c files.

Кстати, если вы хотите поддерживать все расширения, у Wireshark [вики-страница PcapNg] (https://wiki.wireshark.org/Development/PcapNg) есть ссылка на расширенную страницу формата файла дампа следующего поколения PCAP , на которую вы также можете взглянуть. Я не знаю, сколько других расширений могло быть реализовано, но не включено в основную спецификацию формата файла pcapng, но, надеюсь, не так много, поскольку это может быстро стать проблематичным c с разными проектами, возможно, использующими один и тот же тип блока для разных блоков. , Эта практика не должна поощряться.

0 голосов
/ 15 марта 2020

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

Это не так, как вы это делаете.

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

Прежде всего, он должен смотреть на Заголовок раздела Блок (SHB), чтобы определить порядок байтов данных во всех последующих блоках путем просмотра поля Byte-Order Magi c.

После этого вам нужно просмотреть все последующие блоки, ища Интерфейс Описание Блоки и Расширенные пакетные блоки (EPB), Простые пакетные блоки (SPB) и, возможно, Пакетные блоки (PB) (они устарели, поэтому ни одна программа не должна записывать их, но программы должны быть готовы читать их). Каждый EPB или PB имеет идентификатор интерфейса, который относится к IDB, который должен был появиться перед рассматриваемым EPB или PB; SPB неявно ссылается на первый IDB, который, опять же, должен был появиться до рассматриваемого SPB.

Формат данных пакета в EPB, SPB или PB зависит от указанного типа канального уровня IDB, к которому он относится, поэтому вам необходимо прочитать рассматриваемый IDB.

И, как указано выше, не имеет фиксированного числа байтов между SHB и первый EPB, SPB или PB, поэтому нет простого фиксированного числа байтов, которое нужно пропустить, чтобы добраться до первого блока кадра данных. Во-первых, есть переменное число байтов, которое вы можете определить, только прочитав все блоки перед первым EPB, SPB или PB. С другой стороны, вы не можете пропустить их, вы должны прочитать их, чтобы получить достаточно информации для интерпретации в них пакетных данных.

Где хранятся данные? Под данными я подразумеваю весь кадр, содержащий данные Ethe rnet, IP и TCP, как показано на рисунке ниже (рисунок 1).

Он хранится в EPB, SPB или PB. Смотрите описания этих трех типов блоков; кадры находятся в полях «Packet Data» этих блоков.

Так что я нахожусь в моем блоке описания интерфейса и 64-битном числе, которое содержит разрешение временной метки 9 (10 ^ -9, Наносекунды?) И 6 (10 ^ -6, микросекунды).

Как указал Кристофер Мейнард, 9 не является разрешением временной метки, это тип параметра. Блоки Pcapng имеют как фиксированную информацию в начале, так и опции ; опция начинается с типа опции и длины значения опции, за которой следуют данные опции. Опция IDB if_tsresol имеет

  • 2 байта типа опции со значением 9;
  • 2 байта длины значения опции со значением 1;
  • 1 байт значения параметра со значением, указанным в описании этого параметра.

Значение 6 означает, что разрешение метки времени составляет 1/10 ^ 6 секунды, что означает 1 микросекунду.

...