创建一个pcap文件

Rob*_*ick 5 c linux udp pcap libpcap

我需要将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);
Run Code Online (Sandbox Code Playgroud)

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

je4*_*e4d 5

你不应该写那个标题,pcap_open_dead应该为你做.如果您想直接编写文件而不是使用pcap_dump和朋友,您只需要自己填写并编写该标题.这里有一个例子在这里一个简单的程序写出来与功能的PCAP文件.


关于直接写文件的原始答案:

我不记得这是怎样工作的,但我写了一个补丁redir前一阵子会写出PCAP文件,你可以使用它作为一个例子.

你可以找到它附加到这个debian bug.(错误链接已修复.)

其中一些是用于伪造以太网和IP头,并且可能不适用于您正在使用的pcap_dump_open以及pcap_dump上面链接的补丁在pcap不使用任何库的情况下写出文件的位置,但我会留在这里,以防它有帮助.