【问题标题】:Know from which pcap filter my packet came知道我的数据包来自哪个 pcap 过滤器
【发布时间】:2012-05-04 13:34:27
【问题描述】:

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

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

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

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

提前致谢。

【问题讨论】:

    标签: c pcap libpcap


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 2014-06-30
      • 2020-04-19
      • 2011-01-11
      • 2012-12-08
      • 1970-01-01
      • 2018-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多