使用iptables统计流量

背景:

​ 使用iftop命令统计带宽可能会出现顺时打高网卡的情况。因此使用iptables来进行带宽数据。

实现思路

  • 新建一个链
  • 在新链中添加一个ACCEPT的rule
  • 引用新添加的链

举个例子:新建一个链统计本机间的带宽数据

#新建一个名为LOCAL_CHAN的链
iptables -N LOCAL_CHAN
#添加一个规则,捕获来自127.0.0.1的端口
iptables -A LOCAL_CHAN -p tcp -j ACCEPT -s 127.0.0.1
#在默认的链中引起新创建的LOCAL_CHAN
iptables -I INPUT -p tcp -j LOCAL_CHAN
##这一行命令表示,"-j LOCAL_CHAN"表示:所有的tcp报文将由自定义链"LOCAL_CHAN"中的规则进行处理

数据获取

使用命令iptables -nvxL LOCAL_CHAN即可获取对应链的带宽详情

ps:

  • 当传输量较大时, iptables 预设会以 K、M、G 等单位来显示传输量, 与一般的计算不同, 这些单位分别代表 1000、1,000,000 与 1,000,000,000 bytes。就阅读上, 使用这些单位能让我们更容易地判断数量大小, 但是未来如果以程序统计传输总量, 使用较精确的数字才能方便地进行数字的比较。此时可以如下使用 “-x” 参数, 强迫 iptables 显示精确的传输量
  • -v 输出详细信息,包含通过该规则的数据包数量,总字节数及相应的网络接口
  • -L 查看当前表的所有规则
  • -n 不对ip地址进行反查,加上这个参数显示速度会快很多

byte记录从这个rule生效到现在的总字节

1 references表示这个chan被引用了一次

总结:引入链时尽量最小单位进行引用,需要结合环境和背景进行使用。

因为我的INPUT链 默认规则是ACCEPT,因此这样定义还可以正常使用。

参考文档:

https://blog.csdn.net/lbyyy/article/details/78898931

https://www.itkylin.com/linux下使用iptables统计网络流量.html

原文地址:https://www.cnblogs.com/feng0919/p/15203395.html