Как извлечь данные из Link-Layer из Packet Data в файл pcap-ng?

У меня есть файл pcap-ng, и я хотел бы извлечь IP-адреса источника / назначения.

В соответствии с форматом файла дампа winpcap, данные, которые я ищу, находятся в разделе Packet Data расширенного блока пакета.

Я использую эту библиотеку в C# для анализа файла pcap-ng. И хотя мне удалось успешно выйти из Enhanced Packet Block, я действительно не уверен, как туда попасть.

Текущие Расширенные Пакетные Пакетные Данные Пакета выходят как байтовый массив, используя следующий метод.

private static void extractEnhancedPacketBlock()
{
    var myFile = "\\path\\to\\my.pcapng"

    using (StreamWriter file = new StreamWriter(myFile))
    {
        foreach (var enhancedPacketBlock in reader.EnhancedPacketBlocks)
        {
            byte[] packetData = enhancedPacketBlock.Data;

            Console.WriteLine(BitConverter.ToString(packetData));
        }
    }
}

Что выводит то, что вы ожидаете, похоже на следующее:

79-2C-C8-80-A8-65-00-00-BC-C4-2F-65-09-00-42-00-01-5E...etc

Хороший ответ на это может быть несколько разных вещей, например, руководство о том, где искать, чтобы узнать больше о том, что мне нужно делать дальше. Библиотека, которая уже делает то, что я мог бы использовать (я пробовал много библиотек, и ни одна из них, похоже, не зашла так глубоко). Или, если у вас уже есть код, который делает это, это было бы здорово. Я также открыт для перехода на Python, если это необходимо.


Дополнительная информация.

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

0 ответов

Используйте https://github.com/chmorgan/packetnet для анализа пакетных данных

Пример:

var packet = Packet.ParsePacket(LinkLayers.Ethernet, enhancedPacketBlock.Data);
var ip = packet.Extract<IPPacket>();
Другие вопросы по тегам