![每个网络端口的流量统计](https://linux22.com/image/23566/%E6%AF%8F%E4%B8%AA%E7%BD%91%E7%BB%9C%E7%AB%AF%E5%8F%A3%E7%9A%84%E6%B5%81%E9%87%8F%E7%BB%9F%E8%AE%A1.png)
我有两台机器,有两个应用程序,它们通过几个网络端口(TCP 和 UDP)相互通信。我想计算他们发送和接收的流量。我不仅需要总数,还需要每天每个机器每个端口的统计数据。我试过暗状态,但它不提供每天的统计数据,而只提供总体计数器。
还有其他方法可以计算流量(我可以在两台机器之间放置一些代理或网关)。
答案1
iptables 可以为您提供有关每个规则被触发的数量的统计信息,因此您可以在感兴趣的端口上添加 LOG 规则(假设端口 20 和端口 80):
iptables -A INPUT -p tcp --dport 22
iptables -A INPUT -p tcp --dport 80
进而
iptables -n -L -v
将为您提供通过此端口发送的数据包和字节数。当然,您必须从输出中解析您感兴趣的端口。
如果您需要精确值,请添加 -x:
iptables -n -L -v -x
答案2
您可以将记账规则添加到 iptables 配置中。这些应该在您接受 ESTABLISHED 和 RELATED 流量之前发生,否则您将错过对通过的流量的计数。要计算网络流量,请尝试以下规则:
iptables -A INPUT -p tcp --dport 80
如果你有很多这样的链,你可能想要创建一个会计链,这样你就可以在其上报告和清零计数器,与其他链隔离。
这岸墙防火墙允许您轻松地将记帐规则添加到规则集中。
答案3
不要忘记包括输出流量统计数据。
# Port 80 (HTTP).
iptables -A INPUT -p tcp --dport 80
iptables -A OUTPUT -p tcp --sport 80
# Port 443 (HTTPS).
iptables -A INPUT -p tcp --dport 443
iptables -A OUTPUT -p tcp --sport 443
iptables -n -L -v
iptables -n -L -v -x
iptables -n -L -v -x | grep -i "Chain\|:443\|:80"
Chain INPUT (policy DROP 357 packets, 22828 bytes)
1286265 75076978 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
1305378 75018232 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
Chain OUTPUT (policy ACCEPT 303516 packets, 94716311 bytes)
442 255112 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:80
46 10515 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:443
答案4
目前尚不清楚您是否需要使用每个目标 IP,但是统计数据是记录每个接口的流量使用情况的有用工具。安装它,然后vnstat -u -i eth0
为您想要监控的每个接口运行。然后获取每天的使用情况vnstat -i eth0 -d
。