我需要将UDP数据包保存到一个文件中,并希望使用pcap格式来重用各种可用的工具(wireshark、tcpdump等)。this thread中有一些信息,但我找不到如何写入全局文件头'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()检索文件描述符来插入头?
发布于 2012-04-12 04:57:02
你不需要写这个头文件,pcap_open_dead会帮你写的。如果你想直接写文件,而不是使用pcap_dump和朋友,你只需要自己填写和写那个头文件。这里有一个简单程序的示例here,用这些函数写出一个pcap文件。
原始答案,关于直接写文件:
我记不清这是如何工作的了,但是我之前给redir写了一个补丁,可以写出pcap文件,你也许可以用它作为一个例子。
你可以在this debian bug上找到它。(错误链接已修复。)
其中一些用于伪造以太网和IP报头,可能不适用,因为您使用的是pcap_dump_open和pcap_dump,因为上面链接的补丁不使用任何库就可以写出pcap文件,但无论如何我都会把它留在这里,以防万一。
发布于 2015-08-12 20:40:39
如果您只对UDP和TCP感兴趣,则应该使用DLT_EN10MB而不是DLT_RAW (参见pcap_open_dead to simulate full UDP packets capture )。
在WireShak中进行编辑时,效果要好得多。
https://stackoverflow.com/questions/10113653
复制相似问题