zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    django笔记
    pandas dataframe的合并(append, merge, concat)
    pandas删除行删除列,增加行增加列
    github上值得关注的前端项目
    CSS布局奇淫技巧之--各种居中
    级联菜单
    鼠标移入移出改变透明度
    图片轮播特效
    图片放大镜效果
    css3多列布局
  • 原文地址:https://www.cnblogs.com/workingdiary/p/13571476.html
Copyright © 2011-2022 走看看