首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在读取PCAP文件时尝试设置负索引

在读取PCAP文件时尝试设置负索引
EN

Stack Overflow用户
提问于 2014-04-26 21:15:46
回答 1查看 329关注 0票数 0

我在一组PCAP文件上有一个随机出现的问题。我正在尝试使用SharpPcap和PacketDotNet解析来自记录的PCAP文件的所有数据包。这些错误似乎是随机发生的。

我没做什么花哨的事。下面是我从PCAP文件加载的代码:

代码语言:javascript
复制
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方法中,我得到了

试图设置负索引

执行以下行时:

代码语言:javascript
复制
var packet = PacketDotNet.Packet.ParsePacket(Packet.LinkLayerType, Packet.Data);

我正在使用这两个库的最新版本,但我尝试了使用旧版本的实现,并遇到了同样的问题。

PCAP文件是由Suricata生成的,如果有任何意义的话。

编辑

我使用以下代码进行了一个简单的测试:

代码语言:javascript
复制
    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;
            }
        }
    }

有趣的是,错误发生的文件数量因运行而异。然而,它似乎是随着每次运行而增加的。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-01 12:47:59

我已经通过改变我正在使用的库来解决这个问题。我没有使用SharpPcap,而是使用了EasyPcap库。它做它的工作,是非常简单的使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23316600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档