.NET编写PCAP文件(.NET writing PCAP files)

2019-09-18 08:25发布

所有,

我花了一天的公平一部分寻找不同PCAP库之前,我承诺写一个PCAP作家,我想说明我的情况,并征求意见。

我已经要求我提供读取PCAP文件和数据包写入到他们所选择的数据库服务的客户端。 然后,客户机可以查询数据库(日期时间范围),结果最终应是包含匹配该范围标准报文中的PCAP文件。

我已经发现了与库到目前为止是,“倾销”,这是写的PCAP似乎在与特定捕获设备相关联的只有缴费。 这不是我的方案的情况。

我使用PCAP.NET阅读原文PCAP文件并解压包。 我的包存储到数据库,然后我可以读出数据库的数据,并重新创建数据包,但我没有找到一个方法来编写查询的结果为PCAP文件。

最简单的情况下,可以考虑类型的数据包的列表的数据结构(所以新向实际写入堆栈溢出,我不知道怎么写的T名单与尖括号没有得到过滤) - 做任何可用的库支持编写结构PCAP?

鉴于这并不似乎是一个常见的场景,我在整个方案的有效性疑惑。 我还要指出的是,我有一个总计有PCAP数据工作了两天,这被认为是概念应用程序的证据,因此这是完全可能的,我缺了一块的知识,使这个微不足道的。

感谢您的宝贵时间和考虑和道歉提前如果我与谷歌的尝试,甚至更多的时间与堆栈溢出搜索忽略了明显的。

克里斯

Answer 1:

我相信,Pcap.Net的静态方法PacketDumpFile.Dump()给你正是你需要的。



Answer 2:

下面是简单的工具,在C#我写信给ETL转换为PCAP文件,你如何编写PCAP文件的例子。 这会将以太网的链路层包头类型的文件。 请参阅http://www.tcpdump.org/linktypes.html对于其他类型。

这里Visual Studio解决方案https://github.com/chentiangemalc/EtlToCap

using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace chentiangemalc
{
    public static class NetworkRoutines
    {

        public static long ConvertEtlToPcap(string source, string destination, UInt32 maxPacketSize)
        {
            int result = 0;
            using (BinaryWriter writer = new BinaryWriter(File.Open(destination, FileMode.Create)))
            {

                UInt32 magic_number = 0xa1b2c3d4;
                UInt16 version_major = 2;
                UInt16 version_minor = 4;
                Int32 thiszone = 0;
                UInt32 sigfigs = 0;
                UInt32 snaplen = maxPacketSize;
                UInt32 network = 1; // LINKTYPE_ETHERNET

                writer.Write(magic_number);
                writer.Write(version_major);
                writer.Write(version_minor);
                writer.Write(thiszone);
                writer.Write(sigfigs);
                writer.Write(snaplen);
                writer.Write(network);

                long c = 0;
                long t = 0;
                using (var reader = new EventLogReader(source, PathType.FilePath))
                {
                    EventRecord record;
                    while ((record = reader.ReadEvent()) != null)
                    {
                        c++;
                        t++;
                        if (c == 100000)
                        {
                            Console.WriteLine(String.Format("Processed {0} events",t));
                            c = 0;
                        }
                        using (record)
                        {
                            if (record.Id == 1001 && record.ProviderName == "Microsoft-Windows-NDIS-PacketCapture")
                            {
                                result++;
                                DateTime timeCreated = (DateTime)record.TimeCreated;
                                UInt32 ts_sec = (UInt32)((timeCreated.Subtract(new DateTime(1970, 1, 1))).TotalSeconds);
                                UInt32 ts_usec = (UInt32)(((timeCreated.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds) - ((UInt32)((timeCreated.Subtract(new DateTime(1970, 1, 1))).TotalSeconds * 1000))) * 1000;
                                UInt32 incl_len = (UInt32)record.Properties[2].Value;
                                if (incl_len > maxPacketSize)
                                {
                                   Console.WriteLine(String.Format("Packet size of {0} exceeded max packet size {1}, packet ignored",incl_len,maxPacketSize));
                                }
                                UInt32 orig_len = incl_len;

                                writer.Write(ts_sec);
                                writer.Write(ts_usec);
                                writer.Write(incl_len);
                                writer.Write(orig_len);
                                writer.Write((byte[])record.Properties[3].Value);

                            }
                        }
                    }
                }
            }
            return result;
        }
    }
}


文章来源: .NET writing PCAP files