gpt4 book ai didi

linux - 执行多个 PCAP 过滤器的最有效方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:25 25 4
gpt4 key购买 nike

我有一个应用程序使用 libpcap 作为获取数据包的机制,我需要为应用程序的不同部分过滤掉不同的协议(protocol)。我需要考虑优化,因为流的流量很高 (100-400 Mbps)。

我真正希望能够做的是设置实时捕获(无过滤器),然后在捕获完成后有选择地过滤数据包。这似乎是不可能的(据我所知,bpf 内置于捕获机制中)。

如果这确实不可能,还有其他两种方法(我已经想到),我不确定哪种方法会被认为更有效或“更好”:

  1. 使用各自的过滤器进行多次捕获
  2. 制作一个转储到 fifos 的捕获(无过滤器),并从这些 fifo 中读取其他捕获(使用它们自己的过滤器)

最佳答案

fifo 方法可能不是很有效,因为它涉及将大量内存从 A 复制到 B(例如 400mbps 缓冲 - 它们不能相互阻塞 - 到四个 fifo,每个都有不同的过滤器,决定抛出累积 1600mbps 的 99.99%)。另一方面,如果确实有事情要做,则多次捕获只会触发用户空间中的操作。过滤(通常)在内核中完成。

第三种方法是使用 libwireshark(Wireshark 的下部)进行过滤(并使用 wtap 进行捕获)。这涉及相当多的代码开销,因为 libwireshark 不完全适合第三方在 Wireshark 之外使用。
然而,这确实伴随着使用 Wireshark 的“显示过滤器”的能力,它被编译为字节码并且相当有效。许多过滤器可能编译一次,可能会一个接一个地看同一帧。您也许可以“堆叠”过滤器,例如“ip.tcp”表示“ip”。
如果您能够生成所有过滤器中最常见的元素并将其作为 BPF 过滤器放置在您的捕获设备上,这将变得非常有效。显示过滤器然后只查看可能至少其中之一感兴趣的数据。

关于linux - 执行多个 PCAP 过滤器的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18579216/

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