如果想实时统计某个端口上用了多少流量,最简单的方法便是通过iptables
shadowsocks多用户版为每个用户分配了不同的服务器连接端口号,服务器对该用户的所有流量均是通过这个端口发出的
只需要以这个端口为源端口,统计OUTPUT流量,就可以精确统计shadowsocks的单用户流量
统计5902端口上的出网流量(这里统计的是用户下载流量):
- iptables -A OUTPUT -p tcp --sport 5902
-A OUTPUT 表示在OUTPUT上增加一条规则
-D OUTPUT 表示在OUTPUT上删除一条规则 -p tcp 表示指定tcp协议 –sport 5902 表示出网的端口号为5902
统计5902端口上的进网流量(这里统计的是用户上传流量):
- iptables -A INPUT -p tcp --dport 5902
-A INPUT表示在INPUT上增加一条规则-D INPUT表示在INPUT上删除一条规则-p tcp 表示指定tcp协议 –dport 5902 表示入网的端口号为5902
添加完成之后就可以通过下面命令查看流量信息
- iptables -vnL
- iptables -vnL>/home/iptables.log #输出内容到文件
在INPUT下面的就是入网流量,OUTPUT里面的是出网流量,默认是使用易读的单位,也就是自动转化成M,G。如过需要Bytes做单位,则增加一个-x参数:
- iptables -n -v -L -t filter -x
流量信息自添加规则之后开始统计,无法显示之前的流量信息。 重启防火墙,流量统计数据将会被重置
pkts一列是包的数量 bytes一列是流量统计结果
最后:
一般重启后iptables规则会丢失,因此需要进行保存操作。#service iptables save #保存防火墙配置
#vi /etc/sysconfig/iptables #编辑防火墙配置
#service iptables restart #重启防火墙
=================================
如果端口很多的话,把所有端口放在一个文件里 比如port 文件中一行是一个端口号
那么我们新建一个链,用来统计流量
#!/bin/bash
iptables -t filter -N SSAUDIT
for line in $(cat port)
do
iptables -t filter -A SSAUDIT -p tcp --sport $line
done
iptables -t filter -I OUTPUT -j SSAUDIT
1.新建一条自定义链SSAUDIT
2.追加规则到链SSAUDIT
3.插入自定义链SSAUDIT到OUTPUT链
删除自定义链
#iptables -t filter -D OUTPUT -j SSAUDIT
#iptables -t filter -F SSAUDIT
#iptables -t filter -X SSAUDIT