【问题标题】:How to use SharpPcap to dump packets fast如何使用 SharpPcap 快速转储数据包
【发布时间】:2016-02-13 22:51:13
【问题描述】:

我正在使用 SharpPcap 将数据包转储到 .pcap 文件。我的问题是,捕获任何数量的网络流量都在减慢速度,最终内存不足。 如何加快文件写入过程?

这是我正在使用的代码:

    private void WriteToPCAPThread(object o)
    {
        this.WritePcapThreadDone.Reset();
        string captureFileName = (string)o;
        CaptureFileWriterDevice captureFileWriter = new CaptureFileWriterDevice(this.device, captureFileName);
        captureFileWriter.Open();
        RawCapture packet;
        bool success;
        while (this.capturing)
        {
            success = this.captures.TryDequeue(out packet);
            if (success)
            {
                captureFileWriter.Write(packet);
            }
            else
            {
                // Queue emptied
                Thread.Sleep(50);
            }
        }
    }

提前感谢您的任何想法。

【问题讨论】:

    标签: c# .net file winpcap sharppcap


    【解决方案1】:

    我最终编写了自己的 StreamWriter。现在,我的 SSD 发挥了 100% 的性能。

    public PcapStream
    {
        private Stream BaseStream;
        public PcapStream(Stream BaseStream)
        {
            this.BaseStream=BaseStream;
        }
        public void Write(RawCapture packet)
        {
            byte[] arr = new byte[packet.Data.Length + 16];
            byte[] sec = BitConverter.GetBytes((uint)packet.Timeval.Seconds);
            byte[] msec = BitConverter.GetBytes((uint)packet.Timeval.MicroSeconds);
            byte[] incllen = BitConverter.GetBytes((uint)packet.Data.Length);
            byte[] origlen = BitConverter.GetBytes((uint)packet.Data.Length);
            Array.Copy(sec, arr, sec.Length);
            int offset = sec.Length;
            Array.Copy(msec, 0, arr, offset, msec.Length);
            offset += msec.Length;
            Array.Copy(incllen, 0, arr, offset, incllen.Length);
            offset += incllen.Length;
            Array.Copy(origlen, 0, arr, offset, origlen.Length);
            offset += origlen.Length;
            Array.Copy(packet.Data, 0, arr, offset, packet.Data.Length);
            BaseStream.Write(arr, 0, arr.Length);
        }
    

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 2011-02-08
      • 2013-03-02
      • 2015-04-08
      • 2021-09-15
      • 2015-03-18
      • 2022-01-11
      • 2019-11-18
      • 2012-06-26
      相关资源
      最近更新 更多