对于不定期的网络流量进行抓包

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

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 192.168.1.1 -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