C# 试图在读取PCAP文件时设置负索引
我在一组PCAP文件上遇到了一个随机出现的问题。我正在尝试使用SharpPcap和PacketDotNet解析记录的PCAP文件中的所有数据包。这些错误似乎是随机发生的 我没有做任何花哨的事。以下是我从PCAP文件加载的代码:C# 试图在读取PCAP文件时设置负索引,c#,pcap,packet-capture,sharppcap,packetdotnet,C#,Pcap,Packet Capture,Sharppcap,Packetdotnet,我在一组PCAP文件上遇到了一个随机出现的问题。我正在尝试使用SharpPcap和PacketDotNet解析记录的PCAP文件中的所有数据包。这些错误似乎是随机发生的 我没有做任何花哨的事。以下是我从PCAP文件加载的代码: ICaptureDevice device; try { device = new CaptureFileReaderDevice(pcapFiles[i].FullName); device.Open(); } catch (Exception ex)
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;
}
}
}
类程序
{
静态void Main(字符串[]参数)
{
FileInfo[]allFiles=newdirectoryinfo(@“D:\PCAP”).GetFiles();
FileInfo[]pcapFiles=allFiles.Where(x=>x.Name.Contains(“pcap”)&&x.Length>0.ToArray();
对于(int i=0;i
有趣的是,错误发生的文件数量因运行而异。然而,它似乎随着每次跑步而增加
任何帮助都将不胜感激。我已通过更改正在使用的库解决了此问题。我没有使用SharpPcap,而是使用了library。它完成了它的工作,而且使用非常简单。这是一个很好的库。我已经试过了。但是,我不确定它是否支持Mono。