ifconfig 告诉 eth0 一些 RX = 2,8GB,TX = 1,3GB 的值,这不可能是真实的,因为我最近通过 eth0 传输了许多 10GB 以上的文件。我想知道
- 如果这只是一些普通的整数溢出(4GB 限制)
- 或者这表明有某些恶意的 rootkit 会撒谎
这是一个愚蠢的问题,但是这种差异一直困扰着我。
谢谢你,尼尔斯
答案1
我会说这是 4GB 环绕,正如您所猜测的。我在使用较新的 32 位 Linux 内核时遇到了这个问题。
您可以获取内核的源代码,看看是否相同,include/linux/netdevice.h
并检查的数据类型net_device_stats->rx_bytes
。如果您使用的是 32 位系统,并且时间是无符号长整型,那么您将只获得 2^32 字节或 4 GB。有关此内容的更多信息,请参阅我的一篇文章这里。
当然,除非 ifconfig 现在抓取的是来自 proc 之外的某个地方的计数器……
答案2
您可以设置 iptables 来管理计数器 - 它们甚至可以通过保存/恢复或手动清除/设置计数器为特定值来使它们在重启后继续存在。
如果您还没有 iptables 规则,那么您只需要向输入和输出链添加至少一条允许所有内容的规则,它将提供您想要的内容:
iptables -A INPUT -j ACCEPT
iptables -A OUTPUT -j ACCEPT
然后你就可以看到总数了:
root@devcloner:~# iptables -n -vL
Chain INPUT (policy ACCEPT 2850K packets, 4183M bytes)
pkts bytes target prot opt in out source destination
22M 32G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 657K packets, 43M bytes)
pkts bytes target prot opt in out source destination
12951 813K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
-x 将显示完整的字节计数器:
root@devcloner:~# iptables -n -vL -x
Chain INPUT (policy ACCEPT 2850263 packets, 4182667884 bytes)
pkts bytes target prot opt in out source destination
22285352 32724735127 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 657099 packets, 43320848 bytes)
pkts bytes target prot opt in out source destination
102453 6738544 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
该信息可能也可以从 /proc 或 /sys 的某处解析。