我有两台 Linux 机器,它们一直互相 ping 通。对于每个 ping 请求,它们在响应中附加一个数据包。无法确定 ping 的频率。
如何确定它们通过网络相互传输多少 GB 的数据?
答案1
假设您对路径上某处的 Linux 计算机(端点,甚至是中间的路由器)具有 root 访问权限,您可以编写一条 iptables 规则来匹配应用程序流量,并将其定向到一个特定的链,该链除了接受所有数据包之外不执行任何操作。内核在每个链上维护一个字节和数据包计数器。假设您要统计的数据包从 IP 10.1.2.3 TCP 端口 42123 到 IP 10.7.8.9 TCP 端口 42789:
iptables -I FORWARD -p tcp -s 10.1.2.3 --sport 42123 -d 10.7.8.9 --dport 42789 -j ACCEPT
在源主机上替换FORWARD
为,在目标主机上替换为。您可以读取计数器,其中 42 是规则的编号(第一条规则是编号 1)。OUTPUT
INPUT
iptables -nvxL FORWARD 42
如果您想计算两个方向,请对每个方向执行此操作。以已知的时间间隔读取计数器以测量带宽使用情况。
如果创建中间链,您可以获得一点灵活性。
iptables -N myapp_counter
iptables -A myapp_counter -j ACCEPT
iptables -I FORWARD -p tcp -s 10.1.2.3 --sport 42123 -d 10.7.8.9 --dport 42789 -j myapp_counter
iptables -I FORWARD -p tcp -s 10.7.8.9 --sport 42789 -d 10.1.2.3 --dport 42123 -j myapp_counter
通过此设置,计数器myapp_counter
将包括两个方向的流量。遍历链的另一个好处是,您可以自动读取链上的计数器并将其设置为 0 iptables -nvxZL myapp_counter
。而且您不需要计算出规则编号,因此更容易实现自动化设置。
答案2
您可以使用 来查看统计数据ifconfig
。
答案3
您可以检查哪个程序正在使用数据nethogs
(http://nethogs.sourceforge.net/)。