PCAP ファイルのセットでランダムに発生する問題があります。SharpPcap と PacketDotNet を使用して、記録された PCAP ファイルからすべてのパケットを解析しようとしています。エラーはランダムに発生するようです。
派手なことはしていません。以下は、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;
}
}
}
これについて興味深いのは、エラーが発生するファイルの数が実行ごとに異なることです。ただし、実行するたびに増加しているようです。
どんな助けでも大歓迎です。