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

标签 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 中)有一个“下一个”成员表明这是可能的。

最佳答案

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

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

关于c - 使用 libpcap 测量上传/下载速率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4693034/

相关文章:

python - “ImportError: No module named scapy.all” 树莓派 Raspbian

无法解析条件编译 block 内的类函数宏

c - 使用 libpcap 同时监听两个设备

Java:在不使用 Web 服务的情况下以编程方式获取一个人的外部 IP 地址

c - 修改捕获的pcap并写回

c - 在 C 中打开 .pkt(Omnipeek capture)文件

C 使用函数打开文件

无法从二维动态数组中释放内存

java - Android NDK 中的 JNI 清理和守护线程

c++ - 在 Windows 中用 C++ 开发一个 P2P 网络项目,该项目应该可以在 Linux 中运行