測試工作中需要在發布一定數據量后停止進程,在網上找到使用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