请注意,本文编写于 1814 天前,最后修改于 1814 天前,其中某些信息可能已经过时。
#对于不定期出现的网络流量异常进行合理抓包
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