计算穿过 Linux 路由器的所有连接的字节数

计算穿过 Linux 路由器的所有连接的字节数

我有一个 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 上)。我认为它可以满足您所问的所有问题 - 至少它是可配置,并积极维护。

我使用它是因为它不会消耗很多资源,而且我可以在小型系统上的计算周期上做更好的事情。

相关内容