我在C应用程序中使用libpcap(和Windows上的winpcap)来监控网络流量。我需要区分每个网络适配器上的上传和下载流量,以产生连接速度统计数据,但库使用的过滤器表达式似乎不太容易支持(即没有'传入'/'传出'运算符)。
我考虑过的一种方法是查询每个适配器的IP地址,然后使用src host 1.2.3.4
(测量上传)和dst host 1.2.3.4
(测量下载)等过滤器。
我的问题是:
是否有比上面更好/更简单的方法(让我对每个适配器使用相同的过滤器表达式会更好)?
如果上述方法是可行的,那么单个适配器是否有可能拥有多个与之关联的IP地址?我问的原因是pcap_addr
结构中包含单个适配器的地址详细信息(在struct pcap_if
中)有一个“下一个”成员,表明这是可能的。
答案 0 :(得分:2)
首先,请记住,pcap只看到数据包。它没有看到“传出”或“传入” - 只是数据包。所以是的,您必须使用ip标头中的src
/ dst
进行过滤。没有其他方法可以判断数据包是传入还是传出。
其次,是的,没有什么能阻止具有多个IP地址的适配器。因此,您需要获取从该适配器配置的IP地址。 pcap_findalldevs()
(WinPCap文档)应该在这里为您提供帮助,您应该可以从中推断出要监控的设备。
答案 1 :(得分:1)
您是否考虑过pmacct - 我在过去的时间里为此做过个人贡献。这是一个C工具,它使用libpcap来动态监视网络流量以进行记帐。
答案 2 :(得分:0)
尝试tcpdump