我在一个C应用程序中使用libpcap (在Windows上使用winpcap )来监控网络流量。我需要区分每个网络适配器上的上传和下载流量,以生成连接速度统计数据,但库使用的过滤器表达式似乎不太容易支持这一点(即没有“传入”/“传出”运算符)。
我考虑过的一种方法是查询每个适配器的IP地址,然后使用src host 1.2.3.4
(用于测量上载)和dst host 1.2.3.4
(用于测量下载)之类的过滤器。
我的问题是:
有没有比上面的更好/更简单的方法(可以让我对每个适配器使用相同的过滤器表达式的方法就更好了)?
如果采用上述方法,那么单个适配器是否有可能具有多个与其关联的IP地址?我这样问的原因是,保存单个适配器(在struct pcap_if
中)的地址细节的pcap_addr
结构有一个'next‘成员,这表明这是可能的。
发布于 2011-01-14 16:35:51
首先,请记住,pcap只能看到数据包。它看不到“传出”或“传入”--仅仅是数据包。因此,是的,您必须在ip报头中使用src
/dst
进行过滤。没有其他方法可以判断数据包是传入的还是传出的。
其次,是的,没有什么可以阻止具有多个IP地址的适配器。因此,您需要从该适配器获取配置的IP地址。pcap_findalldevs()
(WinPCap文档)在这里应该会对您有所帮助,您应该能够从中推断出您想要监视哪些设备。
发布于 2011-01-14 16:11:39
你有没有考虑过看一下pmacct --我个人在过去的一段时间里为此做出了贡献。这是一个C工具,它使用libpcap被动地监视网络流量以进行记帐。
发布于 2011-01-14 16:09:48
试试tcpdump
https://stackoverflow.com/questions/4693034
复制相似问题