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

  • 相关阅读:
    死锁
    不能复制文件到服务器
    JWT
    身份验证
    依赖注入
    ml.net
    swift 枚举、结构、类
    nginx 负载均衡
    sql 时间函数大全
    更新SVN时提示要清理,但清理失败,乱码得解决方案
  • 原文地址:https://www.cnblogs.com/workingdiary/p/13571476.html
Copyright © 2011-2022 走看看