PCAP库功能(编写新的PCAP文件)

3
我卡住了。
我使用PCAP.NET读取.PCAP文件并将数据包写入数据库。现在,我可以查询数据库并获取符合约束条件的数据包。我需要一种方法将结果写入新的.PCAP文件。
问题是,据我所知,唯一生成新PCAP文件的方法是通过DumpFile,它只能通过与PacketDevice绑定的PacketCommunicator进行初始化。
可以在此处看到示例:http://pcapdotnet.codeplex.com/wikipage?title=Pcap.Net%20Tutorial%20-%20Handling%20offline%20dump%20files&referringTitle=Pcap.Net%20User%20Guide 好的,但在这种情况下,我没有设备。
我应该为此目的编写自己的PCAP编写器吗?
我错过了一些明显的东西吗?
如何将这些数据包放入新的PCAP文件中?
我相信我已经忽略了一些简单的东西... PCAP对我来说是新领域,我感到非常不适。工作中的Unix人员指出,winpcap和因此pcap.net基于的libpcap提供了直接写入pcap文件的功能。库中未公开此功能吗?
非常感谢您的建议。
谢谢,
克里斯
P.S. 这是我在此处提出的原始问题的修订:.NET writing PCAP files
3个回答

0

0
这个功能在库中没有暴露出来吗?
哪个库?
它在libpcap/WinPcap中已经暴露出来了,但是打开输出文件有点棘手 - 你需要一个用于捕获设备的pcap_t,一个用于捕获文件的pcap_t,或者一个虚拟的pcap_t,用于写入文件的链路层头类型和快照长度,如果你要写入的数据包不是来自实时捕获或现有的捕获文件。
我找不到任何关于Pcap.NET的参考文档,只有教程文档,但是似乎没有任何东西可以让你打开一个虚拟句柄 - 你可以打开一个捕获设备或离线捕获文件,但我没有看到任何关于创建虚拟句柄的内容,从中你不能读取数据包,但你可以在打开捕获文件进行写入时使用 - 所以据我所知,所有在libpcap/WinPcap中可用的功能在Pcap.NET中都没有被暴露出来。

0
你可以创建一个pcap头和格式,规范很容易,除了pcap.h之外,你不需要外部库。
struct pcap_file_header {
    bpf_u_int32 magic;
    u_short version_major;
    u_short version_minor;
    bpf_int32 thiszone;     /* gmt to local correction */
    bpf_u_int32 sigfigs;    /* accuracy of timestamps */
    bpf_u_int32 snaplen;    /* max length saved portion of each pkt */
    bpf_u_int32 linktype;   /* data link type (LINKTYPE_*) */
};

因此,您的文件首先为pcap文件创建一个标题,例如:

    struct pcap_file_header pheader;

    pheader.magic = 0xA1B2C3D4; // MAGIC NUMBER FOR TCPDUMP
    pheader.version_major = PCAP_VERSION_MAJOR;
    pheader.version_minor = PCAP_VERSION_MINOR;
    pheader.thiszone = 0;
    pheader.sigfigs = 0;
    pheader.snaplen = 1500;
    pheader.linktype = 1;

为了写入每个数据包,你需要一个类似于下面的结构体:

typedef struct {
    int32_t t0;
    int32_t t1;
    int32_t len;
    int32_t caplen;
} pcap_header_writeable;

那么你将会像这样在文件中写入:

    pcap_header_writeable header;

    header.t0 = 0;
    header.t1 = 0;
    header.len = length;
    header.caplen = length;

    // write the header on the file 
    // write the packet on the file after the header

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接