自动抓包shell脚本

        由于机房核心下的客户众多,其中不免很多大客户,正所谓树大招风,近期机房某些客户总是被流量攻击,最行之有效的处理的办法就是找到具体被攻击的ip地址,然后在核心带宽能承受的情况下,在上层核心把该ip配置空路由将攻击流量拦截在核心层;超过我们核心带宽承受能力的,将该ip报给运营商封禁处理也能快速的将故障影响时间缩小至最短,以保证其他用户的正常使用.
        之前的处理方式要么是发现故障让现场技术到核心去抓包(缺点一:从休息室到机房机柜旁边并配置好抓包程序的时间延误;缺点二:也可能抓包的时候攻击已经停止了,这样就无法判断出具体的故障点);要么是核心上提前配置好镜像端口,将上联流量镜像到一台抓包服务器上,并将服务器管理网卡上配置不同核心下地线路ip(以免发生攻击时无法远程登录);发生故障的时候直接远程登录tcpdump抓包来分析.
         但是有些流量攻击是在半夜,爬起来去抓包的时候攻击都已经停止.不要说协助被攻击的客户分析解决问题了,甚至连后期的故障说明都没办法出;所以为了提高判断故障的速度和保留客户被攻击的数据依据,我在网上找了些资料根据实际设备环境写了个简单的自动抓包脚本.
下面是脚本内容和详细命令说明:

1:抓包脚本 tcpdump.sh

#!/bin/sh
while [ 1 ]
do
STIME=`date +%F"@"%H%M%S`     #抓取抓包时间
DATE_DIR=`date +%F`           #抓取抓包文件夹日期
if [ ! -d /data/$DATE_DIR ];then
mkdir -p /data/$DATE_DIR      #判断目标文件夹下是否有该日期的目录,有则忽略,无则创建
fi
/usr/sbin/tcpdump -i eth1 -c 30000 -w /data/$DATE_DIR/$STIME.pcap > /dev/null 2>&1 &      #后台抓包,监控eth1端口,每次自动抓包3w个自动停止并保存到相应目录,这个值可以根据需要来修改
sleep 1m  #抓包后停止1分钟继续抓,该值可以根据需要来修改
done

2:监控硬盘使用率脚本 modisk.sh ,由于连续抓包会生成众多pcap数据文件,非常占用硬盘空间,所以监控硬盘使用率是保证监控脚本健康运行的前提条件,下面写了个脚本,可以设定计划任务,每6个小时执行一次(可根据需要来修改),监控硬盘使用率大于50%(可以根据情况来修改),则自动筛选出最早的数据文件夹并删除.

#!/bin/bash
FREEDISK=`df -h|grep "/dev/sda1"|awk '{print $5}'|awk -F % '{print $1}'`  #抓取磁盘占用百分比
HEADDIR=`ls -l /data|grep ^d|awk '{print $NF}'|sort|head -n 1`           #抓取之间最靠前的文件夹名称
if [ "$FREEDISK" -ge "50" ];then
rm -rf /data/"$HEADDIR"                                                  #判断磁盘占用百分比是否超过设定阈值,如果不超过则忽略并退出脚本,超过则执行删除HEADDIR目录
fi

3: 监控抓包脚本运行状态的脚本 motcpdump.sh , 由于机器长期运行,中间又不可能天天登陆服务器去检查抓包脚本是否在运行中怎么办? 下面脚本可以实现这个自动巡检的功能.

#!/bin/bash

MOTCPDUMP=`ps -elf|grep tcpdump|grep -v grep`   #抓取系统进程中是否有tcpdump进程
if [ ! "$MOTCPDUMP" ];then
/bin/bash /home/tcpdump.sh &                    #判断有则忽略并退出,没有则重新后台执行该脚本
fi

将上述脚本按需要加入计划任务即可.

验证部分:

下面是抓包脚本使用情况的截图

1:查看抓包数据文件夹

2:查看自动抓包的数据列表


3:下载需要分析的历史数据包


4:使用wireshark等工具本地分析数据



PS:从以上数据中可以很明显看到是139.66这个ip遭受到ddos攻击.

经过几个月的测试和使用,脚本运行正常并在日常网络故障判断中起到了很大作用,现分享出来大家一起学习和研究,共同进步.

原文地址:https://www.cnblogs.com/quyanan/p/4446895.html