使用libpcap测量上传/下载速率

时间:2011-01-14 16:04:09

标签: c network-programming pcap libpcap

我在C应用程序中使用libpcap(和Windows上的winpcap)来监控网络流量。我需要区分每个网络适配器上的上传和下载流量,以产生连接速度统计数据,但库使用的过滤器表达式似乎不太容易支持(即没有'传入'/'传出'运算符)。

我考虑过的一种方法是查询每个适配器的IP地址,然后使用src host 1.2.3.4(测量上传)和dst host 1.2.3.4(测量下载)等过滤器。

我的问题是:

是否有比上面更好/更简单的方法(让我对每个适配器使用相同的过滤器表达式会更好)?

如果上述方法是可行的,那么单个适配器是否有可能拥有多个与之关联的IP地址?我问的原因是pcap_addr结构中包含单个适配器的地址详细信息(在struct pcap_if中)有一个“下一个”成员,表明这是可能的。

3 个答案:

答案 0 :(得分:2)

首先,请记住,pcap只看到数据包。它没有看到“传出”或“传入” - 只是数据包。所以是的,您必须使用ip标头中的src / dst进行过滤。没有其他方法可以判断数据包是传入还是传出。

其次,是的,没有什么能阻止具有多个IP地址的适配器。因此,您需要获取从该适配器配置的IP地址。 pcap_findalldevs()(WinPCap文档)应该在这里为您提供帮助,您应该可以从中推断出要监控的设备。

答案 1 :(得分:1)

您是否考虑过pmacct - 我在过去的时间里为此做过个人贡献。这是一个C工具,它使用libpcap来动态监视网络流量以进行记帐。

答案 2 :(得分:0)

尝试tcpdump