1

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

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

我的问题是:有什么方法可以知道这些数据包来自哪个端口而无需查看它们的内容?例如,我可以设置许多过滤器并以某种方式知道过滤我的数据包的过滤器是哪个过滤器吗?

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

提前致谢。

4

1 回答 1

1

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

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

于 2012-05-05T00:13:24.660 回答