pcap_t *pcap_open_offline(const char *fname, char *errbuf)
从libpcap 将整个pcap文件读入内存?如果不是这样,我必须使用tcpslice或类似的工具来分割pcap文件吗?
感谢。
答案 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转储,并像实时流一样读取它。它不会将整个文件加载到其内存中,因为转储可能会变得非常大!相反,它只是通过文件一次只加载一个数据包的文件。