做
pcap_t *pcap_open_offline(const char *fname, char *errbuf)
从 libpcap 将整个 pcap 文件读入内存?如果不是这样,我必须使用 tcpslice 或类似的工具来拆分 pcap 文件吗?
谢谢。
用一种奇怪的方式来表达你的问题,但我会尽力回答。
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 转储并像实时流一样读取它。它不会将整个文件加载到其内存中,因为转储可能会变得非常大!相反,它只是遍历文件,一次只加载一个数据包的文件。