1

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

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

我的问题是:

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

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

4

3 回答 3

2

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

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

于 2011-01-14T16:35:51.057 回答
1

您是否考虑过查看pmacct - 我个人过去曾为此做出过贡献。这是一个 C 工具,它使用 libpcap 被动监控网络流量以进行记帐。

于 2011-01-14T16:11:38.763 回答
0

尝试tcpdump

于 2011-01-14T16:09:48.063 回答