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

时间:2012-05-04 13:34:27

标签: c pcap libpcap

我正在尝试使用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)转发。

我的问题是:有没有办法知道这些数据包的确切端口,而无需查看其内容?例如,我可以设置许多过滤器,并以某种方式知道哪个过滤器是过滤我的数据包的那个?

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

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