Попытка установить отрицательный индекс при чтении файлов PCAP

У меня случайно возникает проблема с набором файлов PCAP. Я пытаюсь проанализировать все пакеты из записанных файлов PCAP, используя SharpPcap и PacketDotNet. Ошибки кажутся случайными.

Я не делаю ничего особенного. Ниже приведен мой код для загрузки из файла PCAP:

ICaptureDevice device;
try
{
    device = new CaptureFileReaderDevice(pcapFiles[i].FullName);
    device.Open();
}
catch (Exception ex)
{
    Console.WriteLine("Error opening PCAP file " + ex.ToString());
}
RawCapture packet;
while ((packet = device.GetNextPacket()) != null)
    ProcessPacket(packet);
device.Close();

в ProcessPacket метод я получаю

Попытка установить отрицательный индекс

при выполнении следующей строки:

var packet = PacketDotNet.Packet.ParsePacket(Packet.LinkLayerType, Packet.Data);

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

Файлы PCAP были сгенерированы Suricata IDS, если это что-то значит.

редактировать

Я сделал простой тест, используя следующий код:

    class Program
    {
        static void Main(string[] args)
        {
            FileInfo[] allFiles = new DirectoryInfo(@"D:\PCAP").GetFiles();
            FileInfo[] pcapFiles = allFiles.Where(x => x.Name.Contains("pcap") && x.Length > 0).ToArray();
            for (int i = 0; i < pcapFiles.Length; ++i)
            {
                ICaptureDevice device;
                try
                {
                    device = new CaptureFileReaderDevice(pcapFiles[i].FullName);
                    device.Open();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error opening PCAP file " + ex.ToString());
                    return;
                }
                RawCapture packet;
                while ((packet = device.GetNextPacket()) != null)
                {
                    try
                    {
                        ProcessPacket(packet);
                    }
                    catch
                    {
                        Console.WriteLine(pcapFiles[i]);
                        break;
                    }
                }
                device.Close();
            }
            Console.WriteLine("Done.");
            Console.ReadLine();
        }

        public static void ProcessPacket(RawCapture Packet)
        {
            if (Packet.LinkLayerType == PacketDotNet.LinkLayers.Ethernet)
            {
                var packet = PacketDotNet.Packet.ParsePacket(Packet.LinkLayerType, Packet.Data);
                var ethernetPacket = (PacketDotNet.EthernetPacket)packet;
            }
        }
    }

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

Любая помощь будет принята с благодарностью.

1 ответ

Решение

Я решил проблему, изменив библиотеку, которую я использовал. Вместо SharpPcap я использовал библиотеку EasyPcap. Он делает свою работу и очень прост в использовании.

Другие вопросы по тегам