我有兩台機器,有兩個應用程序,它們透過幾個網路連接埠(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
。