libpcap中的pcap_t * pcap_open_offline(const char * fname,char * errbuf)是否将整个pcap文件读入内存?

时间:2011-03-06 10:28:11

标签: pcap libpcap

pcap_t *pcap_open_offline(const char *fname, char *errbuf) 
从libpcap

将整个pcap文件读入内存?如果不是这样,我必须使用tcpslice或类似的工具来分割pcap文件吗?

感谢。

1 个答案:

答案 0 :(得分:1)

用一种奇怪的措辞来表达你的问题,但我会尽力回答你的问题。

pcap_open_offline()将.dump文件(或来自tcpdump,tcpslice或libpcap的pcap_dump_open() + pcap_dump()函数的类似名称输出)作为输入。

此文件的格式和功能与网络设备的实时跟踪完全相同,IE,您可以在pcap_next,pcap_loop等中使用此pcap_t对象。

以任何方式更改转储文件(IE,剥离信息或仅解析您想要的tcpslice或wireshark)将使pcap_open_offline()无法读取它,因为它不会以实时方式格式化包跟踪。

但是,它不会将整个文件一次加载到内存中。它会流式传输文件,就像从实时跟踪中流式传输数据包一样。

总结一下:pcap_open_live()打开一个未改变的tcpdump / tcpslice转储,并像实时流一样读取它。它不会将整个文件加载到其内存中,因为转储可能会变得非常大!相反,它只是通过文件一次只加载一个数据包的文件。