0

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

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

谢谢。

4

1 回答 1

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 转储并像实时流一样读取它。它不会将整个文件加载到其内存中,因为转储可能会变得非常大!相反,它只是遍历文件,一次只加载一个数据包的文件。

于 2011-06-03T00:11:07.793 回答