![计算穿过 Linux 路由器的所有连接的字节数](https://linux22.com/image/173258/%E8%AE%A1%E7%AE%97%E7%A9%BF%E8%BF%87%20Linux%20%E8%B7%AF%E7%94%B1%E5%99%A8%E7%9A%84%E6%89%80%E6%9C%89%E8%BF%9E%E6%8E%A5%E7%9A%84%E5%AD%97%E8%8A%82%E6%95%B0.png)
我有一个 Linux 盒子,可以用作路由器。
如何测量哪些连接发送和接收了多少数据?
对于每个小时,我想要这样的东西:
src_addr src_port dst_addr dst_port proto packets bytes
10.1.2.3 34567 100.101.102.103 443 tcp 101 150 KiB
10.1.2.3 53 1.1.1.1 53 udp 21 11 KiB
10.1.2.4 45678 100.101.102.103 443 tcp 452 220 KiB
10.1.2.4 56789 200.201.202.203 25 tcp 105 50 KiB
10.1.2.4 53 1.1.1.1 53 udp 20 10 KiB
但有数千行。
理想情况下,这将直接写入数据库,但每小时从 .csv 导入一次就可以了。
是否有任何现有的高效 Linux 工具可以为我提供按小时汇总的数据?
或者我需要用 C 和 libpcap 构建自己的吗?
答案1
iftop 是报告连接的一个很好的解决方案。还有许多其他的存在:iptraf-ng、nethog、bmon...
据亚历山大说解释了如何使用 iftop 和输出文本,你的解决方案是把
iftop -t -s 3600 > log-(date +\%Y\%m\%d\%H\%M\%S).txt
每小时在你的 crontab 中。
答案2
我喜欢vnstat
(还在 GitHub 上)。我认为它可以满足您所问的所有问题 - 至少它是可配置,并积极维护。
我使用它是因为它不会消耗很多资源,而且我可以在小型系统上的计算周期上做更好的事情。