创build一个pcap文件

我需要将UDP数据包保存到一个文件,并希望使用pcap格式来重用可用的各种工具(wireshark,tcpdump,…)。 这个线程中有一些信息,但我找不到如何写入全局文件头'struct pcap_file_header'。

pcap_t* pd = pcap_open_dead(DLT_RAW, 65535); pcap_dumper_t* pdumper = pcap_dump_open(pd, filename); struct pcap_file_header file_hdr; file_hdr.magic_number = 0xa1b2c3d4; file_hdr.version_major = 2; file_hdr.version_minor = 4; file_hdr.thiszone = 0; file_hdr.sigfigs = 0; file_hdr.snaplen = 65535; file_hdr.linktype = 1; // How do I write file_hdr to m_pdumper? while( (len = recvmsg(sd, &msg_hdr, 0)) > 0 ) pcap_dump((u_char*)m_pdumper, &m_pcap_pkthdr, (const u_char*)&data); 

我应该如何编写全局文件头? 如果没有可用的特定pcap函数,如何检索文件描述符以使用write()插入标头?

你不需要写这个头文件, pcap_open_dead应该为你做。 如果你想直接写文件而不是使用pcap_dump和朋友,你只需要自己填写和写这个头。 这里有一个简单的例子,用这些函数写出一个pcap文件。


原始答案 ,直接写文件:

我不记得它是如何工作的,但是我前一段时间写了一个补丁来重写,这个补丁会写出pcap文件,你可以用它作为例子。

你可以找到它附加到这个debian的bug 。 (错误链接固定。)

其中一些是伪造以太网和IP头,可能不适用,因为你正在使用pcap_dump_openpcap_dump作为上面链接的补丁写没有使用任何库的pcap文件,但我会留在这里无论如何情况下它有帮助。

如果您只对UDP和TCP感兴趣,则应使用DLT_EN10MB而不是DLT_RAW (请DLT_RAW pcap_open_dead以模拟完整的UDP数据包捕获 )。

在WireShak中编辑好多了。