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 文件的能力。库中没有公开功能吗?

非常感谢您的建议。

谢谢,

克里斯

PS 这是对我在这里提出的原始问题的修订:.NET writing PCAP files

4

3 回答 3

0

库中没有公开功能吗?

哪个图书馆?

它在 libpcap/WinPcap 中公开,但打开文件以进行输出有点尴尬 - 您需要一个pcap_t用于捕获设备、一个pcap_t用于捕获文件,或者pcap_t一个用于链接层标头类型和文件快照长度的虚拟对象'如果您正在编写的数据包不是来自实时捕获或现有捕获文件,则重新编写。

我找不到 Pcap.NET 的任何参考文档,只有教程文档,但似乎没有任何东西可以让您打开虚拟句柄 - 您可以打开捕获设备或离线捕获文件,但我没有看不到任何有关创建虚拟句柄的任何信息可以告诉。

于 2012-10-26T06:49:17.177 回答
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
于 2020-01-15T20:35:44.170 回答
0

Pcap.Net 用户指南中,“处理脱机转储文件”页面有一个使用PacketDumpFile该类写出转储文件的示例。我没有看到任何 Pcap.Net 参考手册;为了回答这个问题,用户阅读了 Pcap.Net 源代码。

于 2020-01-16T09:02:46.023 回答