使用iptables监测端口流量
测试工作中需要在发布一定数据量后停止进程,在网上找到使用iptables实现类似功能的例子,修改如下。
#20200811 PORT=1000 #1000为检测的端口 #iptables -A:追加规则 iptables -A OUTPUT -p udp --sport $PORT #此处开始监测该端口输出的udp数据 pid=`ps -ef|grep "process 1" |grep -v grep |awk '{print $2}'` #process是使用该端口的进程 PID_FILE=./record_$PORT.pid #把进程号保存到文件 echo $pid > $PID_FILE MAX=1000 #1000为指定的最大流量 SLEEP_TIME=0.1 #监测的时间间隔,这里需要观察一下实际流量情况,设置合理的间隔 while true do #iptables参数: #-L:查看规则 #-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名 #-v:显示详细信息 #-t: 后面接table, 如filter或者nat,如果不写默认是filter #filter: 预设规则表,拥有INPUT、FORWARD和OUTPUT三个规则链,用来进行封包过滤的动作 #命令的结果为该端口输出的流量 value_string=`iptables -n -v -L -t filter |grep -i "spt:$PORT" |awk -F' ' '{print $2}'` echo $value_string |grep 'K' if [ $? = 0 ]; then value=`echo $value_string |tr -d 'K'` #如果流量大于指定最大值,停止进程并删除iptables规则 if [ $value -gt $MAX ]; then kill -9 `cat $PID_FILE` rm $PID_FILE iptables -D OUTPUT -p udp --sport $PORT break fi fi sleep $SLEEP_TIME done
参考:
Centos6.5 iptables的Filter详解
https://blog.csdn.net/canot/article/details/51289176
iptables命令、规则、参数详解
https://www.cnblogs.com/zclzhao/p/5081590.html
欢迎大家评论交流,发现博文中存在的问题一定要留言哦