使用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM