gpt4 book ai didi

c - 知道我的数据包来自哪个 pcap 过滤器

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:09 25 4
gpt4 key购买 nike

我正在尝试使用 libpcap 来嗅探一些“网络接口(interface)”(包括环回)。

在我的示例应用程序中,我有来自端口 1234、1235 和 1236 的环回的数据包。我发现已经有一种方法可以使 libpcap 仅过滤来自这些地址的数据包,使用 libpcap_setfilter():我的目标是转发这些数据包对应于它们来自的地址/端口(例如,来自 127.0.0.1/1234 的数据包可以通过 eth0 接口(interface);来自 127.0.0.1/1235 的数据包可以通过 eth1 转发;以及来自来自 127.0.0.1/1236 的可以通过 eth2 转发)。

我的问题是:有没有什么方法可以在不查看其内容的情况下确切地知道这些数据包来自哪个端口?例如,我能否设置多个过滤器并以某种方式知道过滤我的数据包的是哪个过滤器?

我已经阅读了很多文档和教程,但到目前为止似乎没有任何用处。如果答案是“不可能”,我也会接受。

提前致谢。

最佳答案

libpcap 运行的捕获机制仅支持一个过滤器,因此 libpcap 没有用于设置多个过滤器的 API。

但是,您可以为同一个网络接口(interface)打开多个 pcap_t,并对它们应用不同的过滤器。然而,从多个 pcap_t 读取可能与平台有关。我从“eth0”、“eth1”和“eth2”推断这是 Linux,因此您应该能够使用 select()poll() 或...关于 pcap_tpcap_get_selectable_fd() 的返回值,如果 select()poll() 或...表示给定的描述符是可读的,在相应的 pcap_t 上调用 pcap_dispatch() 来处理该 pcap_t 的数据包.

关于c - 知道我的数据包来自哪个 pcap 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10449924/

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