#对于不定期出现的网络流量异常进行合理抓包

file=/proc/net/dev
i=0    #用来标记是否出现了流量异常以及异常持续了几个检测周期
cd /backup/tmp/
#alias capture='tcpdump -nnvv port 3306 -w tcpdump.pacpng &>/dev/null'
alias capture='tcpdump -nnvv port 3306 and src host 172.16.5.81 -w tcpdump.pacpng &>/dev/null'

(capture) &
#放到后台执行

while true;do
    TX_bytes=`cat $file|grep eth0|sed 's/^ *//g'|awk -F'[ :]+' '{print $10}'`
    sleep 10    #间隔10s
    TX_bytes_later=`cat $file|grep eth0|sed 's/^ *//g'|awk -F'[ :]+' '{print $10}'`
    speed_TX=`echo "scale=0;($TX_bytes_later - $TX_bytes)*8/1024/1024/10"|bc`
    #计算上行带宽
    tcpdump_pid=`ps -ef|grep tcpdump|grep -v grep|awk '{print $2}'`

    if [ $speed_TX -lt 20 ];then
        echo `date  +"%F_%H:%M:%S"` 当前带宽未超过阈值,停止当前周期抓包,当前带宽为 $speed_TX Mbps >> /tmp/tcpdump.log
    #kill -9 $tcpdump_pid &>/dev/null
    killall tcpdump
        if [ $i -gt 0 ];then
            mv tcpdump.pacpng "$i"_tcpdump_`date  +"%F_%H:%M:%S"`
       echo `date  +"%F_%H:%M:%S"` 之前"$i"个周期标记大于1,保存抓包文件 >>/tmp/tcpdump.log
        fi
    echo `date  +"%F_%H:%M:%S"` 开始新周期的抓包,并置状态为0 >>/tmp/tcpdump.log
        (capture) &
        i=0
    else
        i=$(($i+1))
    echo `date  +"%F_%H:%M:%S"` 带宽超过阈值,标记+1,当前带宽为 $speed_TX Mbps >>/tmp/tcpdump.log
    fi
done
最后修改:2020 年 02 月 04 日
如果觉得我的文章对你有用,请随意赞赏