测试工作中需要在发布一定数据量后停止进程,在网上找到使用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