带宽消耗在更深层次上

时间:2012-05-21 13:34:47

标签: c++ c

我正在使用Ubuntu操作系统,我知道通过读取文件/ proc / net / dev文件可以获得PC平均带宽。但是,假设我正在同时向两个节点传输文件(总传输BW:100 Mpbs)。任何人都可以建议我如何获取/存储“将BW传输到节点X / Y”的信息(X:50 Mbps / Y:50 Mbps)。在C / C ++或python中的建议非常受欢迎!:) / p>

2 个答案:

答案 0 :(得分:0)

内核通常不关心数据包的下一跳是什么以及将它放在哪个接口上以获取它。为了实现它的关注,你需要一些linux的高端路由功能。试试这个:

DEV=`ip route|sed -nr 's/^default.* dev ([^ ]*).*/\1/p'`
/sbin/tc qdisc del dev $DEV root >/dev/null 2>&1
TQ="/sbin/tc qdisc add dev $DEV"
TC="/sbin/tc class add dev $DEV"
TF="/sbin/tc filter add dev $DEV"
$TQ root handle 1: htb default 0 
$TC parent 1: classid 1:1 htb rate 100mbps # interesting destination 1
$TC parent 1: classid 1:2 htb rate 100mbps # ...
$TF parent 1: protocol ip u32 match ip dst 123.231.132.213 classid 1:1
$TF parent 1: protocol ip u32 match ip dst 1.2.3.4 classid 1:2

然后您可以获得tc -s class show dev $DEV的统计信息。我不知道更容易做到这一点,对不起。

答案 1 :(得分:0)

查看jnettop实用程序,以直接获取所需信息,或在源代码中查找相应的技术。