我被卡住了。
我已经使用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文件的能力。该功能是否未在库中公开?
非常感谢您的建议。
谢谢,
克里斯
附注:这是我在这里提出的原始问题的修订版:.NET writing PCAP files
发布于 2012-10-26 14:49:17
是库中没有公开的功能吗?
哪个库?
它在libpcap/WinPcap中公开,但是打开文件进行输出有点笨拙-如果您正在编写的数据包不是来自实时捕获或现有的捕获文件,那么您需要一个用于捕获设备的pcap_t,一个用于捕获文件的pcap_t,或者一个用于您正在编写的文件的链路层报头类型和快照长度的虚拟pcap_t。
我找不到任何Pcap.NET的参考文档,只有教程文档,但似乎没有任何东西可以让你打开一个虚拟句柄-你可以打开一个捕获设备或离线捕获文件,但我没有看到任何关于创建一个虚拟句柄的东西,你不能从它读取数据包,但你可以在打开一个要写入的捕获文件时使用它-所以据我所知,libpcap/WinPcap中所有可用的功能都不会在Pcap.NET中公开。
发布于 2020-01-16 04:35:44
你可以创建一个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-16 17:02:46
在the Pcap.Net User Guide中,"Handling offline dump files" page有一个使用PacketDumpFile类写出转储文件的示例。我没有看到任何Pcap.Net参考手册;为了回答this question,用户阅读了Pcap.Net源代码。
https://stackoverflow.com/questions/11150245
复制相似问题