gpt4 book ai didi

c++ - 使用 libpcap,有没有办法从离线 pcap 文件中确定捕获数据包的文件偏移量?

转载 作者:太空宇宙 更新时间:2023-11-04 12:06:53 24 4
gpt4 key购买 nike

我正在编写一个程序来重建 Snort 捕获的 TCP 流。我读过的大多数关于 session 重建的例子都是:

  • 首先将整个 pcap 文件加载到内存中(由于硬件限制和一些捕获文件大小为 10 GB 的事实,这不是解决方案),或者
  • 在读取捕获时将每个数据包缓存在内存中,并丢弃不相关的数据包;这提出了与将整个文件读入内存基本相同的问题

我目前的解决方案是编写自己的 pcap 文件解析器,因为格式很简单。我将每个数据包的偏移量保存在一个 vector 中,并且可以在我通过它后重新加载每个数据包。这和 libpcap 一样,一次只能将一个数据包流式传输到内存中;我只使用序列号和标志进行排序,而不是数据包数据。与 libpcap 不同,它明显更慢。使用 libpcap 处理 570 MB 的捕获大约需要 0.9 秒,而我的代码需要 3.2 秒。但是,我的优势是能够在不重新加载整个捕获的情况下向后搜索。

如果我坚持使用 libpcap 来解决速度问题,我想我可以创建一个初始值为 24(pcap 文件全局 header 的大小)的 currentOffset 变量,将其推送每次我加载一个新数据包时添加到一个 vector 中,并在每次调用 pcap_next_ex 时将其递增数据包的大小 + 16(对于 pcap 记录头的大小)。然后,每当我想读取单个数据包时,我可以使用传统方式加载它并查找 packetOffsets[packetNumber]

有没有更好的方法使用 libpcap 来做到这一点?

最佳答案

我自己解决了这个问题。

在我打电话之前pcap_next_ex , 我推 ftell(pcap_file(myPcap))vector<unsigned long> .之后我会根据需要手动解析数据包。

EZPZ。只花了 24 多个小时的脑筋急转弯......

关于c++ - 使用 libpcap,有没有办法从离线 pcap 文件中确定捕获数据包的文件偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11681665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com