Попытка установить отрицательный индекс при чтении файлов 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. Он делает свою работу и очень прост в использовании.