我正在尝试使用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)转发。
我的问题是:有没有办法知道这些数据包的确切端口,而无需查看其内容?例如,我可以设置许多过滤器,并以某种方式知道哪个过滤器是过滤我的数据包的那个?
我已经阅读了很多文档和教程,但到目前为止似乎都没有用。如果答案是“不可能”,我也会好的。
提前致谢。
答案 0 :(得分:1)
libpcap运行的捕获机制仅支持一个过滤器,因此libpcap没有API来设置多个过滤器。
但是,您可以为同一网络接口打开多个pcap_t
,并对它们应用不同的过滤器。但是,从多个pcap_t
读取可能与平台有关。我从“eth0”,“eth1”和“eth2”推断这是Linux,所以你应该能够使用select()
或poll()
或......来自{{的返回值1}} pcap_get_selectable_fd()
上的,如果pcap_t
或select()
或...表示给定的描述符可读,请在相应的{{1}上调用poll()
处理pcap_dispatch()
的数据包。