shell 高级学习成果分享
来源:互联网 发布:淘宝搜不到变声软件 编辑:程序博客网 时间:2024/06/06 02:04
#/bin/bash
#log的路径
LOGPATH="/home/andyguo"
#log的名称
LOGNAME="h_access.log"
#user_id保存的时间
TIME=360
#user_id超过阀值记录的文件名称
USER_ID_FILE="/home/andyguo/resumedog.log"
IPTABLES_FILE="/home/andyguo/iptables.log"
#过滤的内容
GR="GET /rasdfadsfas"
#同一user_id在10分钟内报警阀值
UFN=1
##########################时间段截取###################################
Y=`date '+%Y:'`
STARTTIME=$Y` date -d ' minutes' |awk '{print $4}'`
ENDTIME=$Y`date -d ' -9 minutes'|awk '{print $4}'`
STARTTIME="2012:16:04:33"
ENDTIME="2012:16:00:33"
echo "开始时间:" $STARTTIME
echo "结束时间:"$ENDTIME
cd $LOGPATH
################解除封闭的ip######################
#计算时间差
typeset -i result
#现在时间
now=`date "+%Y-%m-%d %H:%M:%S"`
echo "解封ip时间:" $now
end=`date +%s -d "$now"`
while read LINE
do
startime=`echo $LINE |awk -F ";" '{print $2}'`
star=`date +%s -d "$startime"`
result=$(($end-$star))
if([ $result -ge $IPTABLES_TIME ]);then
ip=`echo $LINE |awk -F ";" '{print $1}'`
echo "封闭ip离现在已经"$result"秒"
echo "清除ip"$ip
`/sbin/iptables -D INPUT -s $ip -p tcp --dport 80 -j DROP`
sed -i -e "/$LINE/d" $IPTABLES_FILE
echo $LINE
fi
done < $IPTABLES_FILE
############################################
now=`date "+%Y-%m-%d %H:%M:%S"`
id_msg=""
for ((i=1;i<=3;i++))
do
echo $id_msg
id=`echo $id_msg|awk -F";" '{print $1}'`
if [ -n "$id_msg" ];then
echo $id_msg";"$ip";"$now>> $USER_ID_FILE
echo $id_msg";"$ip";"$now
fi
done
#获取够条件的USER_ID
user_ids=`cat $USER_ID_FILE |awk -F ";" '{print $1}'|sort|uniq -c |sort -nr|awk '{if ($1>=3) print $2}'`
echo "满足条件的user_id:" $user_ids
if [ -n "$user_ids" ];then
id_num=`echo $user_ids |awk '{print NF}'`
for((i=1;i<=$id_num;i++))
do
user_id=`echo $user_ids|awk -v i=$i '{print $i}'`
echo $user_id
ips=`cat $USER_ID_FILE |grep $user_id|awk -F";" '{print $3}'|sort|uniq`
echo "满足条件的ip" $ips
ip_num=`echo $ips |awk '{print NF}'`
for((j=1;j<=$ip_num;j++))
do
ip=`echo $ips|awk -v j=$j '{print $j}'`
echo ${ip}";"${now}>> $IPTABLES_FILE
echo "封闭IP:"$ip
`/sbin/iptables -I INPUT -s ${ip} -p tcp --dport 80 -j DROP`
#ip封闭后需要从user_id文件中删除,防止重复封闭ip
sed -i -e "/$ip/d" $USER_ID_FILE
done
done
fi
################删除1小时之前的######################
#计算时间差
typeset -i result
#现在时间
now=`date "+%Y-%m-%d %H:%M:%S"`
echo "解封ip时间:" $now
end=`date +%s -d "$now"`
while read LINE
do
startime=`echo $LINE |awk -F ";" '{print $4}'`
star=`date +%s -d "$startime"`
result=$(($end-$star))
if([ $result -ge $TIME ]);then
echo "该user_id离现在已经"$result"秒"
echo "清除该user_id的记录"$LINE
sed -i -e "/$LINE/d" $USER_ID_FILE
echo $LINE
fi
done < $USER_ID_FILE
#log的路径
LOGPATH="/home/andyguo"
#log的名称
LOGNAME="h_access.log"
#user_id保存的时间
TIME=360
#user_id超过阀值记录的文件名称
USER_ID_FILE="/home/andyguo/resumedog.log"
IPTABLES_FILE="/home/andyguo/iptables.log"
#过滤的内容
GR="GET /rasdfadsfas"
#同一user_id在10分钟内报警阀值
UFN=1
##########################时间段截取###################################
Y=`date '+%Y:'`
STARTTIME=$Y` date -d ' minutes' |awk '{print $4}'`
ENDTIME=$Y`date -d ' -9 minutes'|awk '{print $4}'`
STARTTIME="2012:16:04:33"
ENDTIME="2012:16:00:33"
echo "开始时间:" $STARTTIME
echo "结束时间:"$ENDTIME
cd $LOGPATH
################解除封闭的ip######################
#计算时间差
typeset -i result
#现在时间
now=`date "+%Y-%m-%d %H:%M:%S"`
echo "解封ip时间:" $now
end=`date +%s -d "$now"`
while read LINE
do
startime=`echo $LINE |awk -F ";" '{print $2}'`
star=`date +%s -d "$startime"`
result=$(($end-$star))
if([ $result -ge $IPTABLES_TIME ]);then
ip=`echo $LINE |awk -F ";" '{print $1}'`
echo "封闭ip离现在已经"$result"秒"
echo "清除ip"$ip
`/sbin/iptables -D INPUT -s $ip -p tcp --dport 80 -j DROP`
sed -i -e "/$LINE/d" $IPTABLES_FILE
echo $LINE
fi
done < $IPTABLES_FILE
############################################
now=`date "+%Y-%m-%d %H:%M:%S"`
id_msg=""
for ((i=1;i<=3;i++))
do
echo $id_msg
id=`echo $id_msg|awk -F";" '{print $1}'`
if [ -n "$id_msg" ];then
echo $id_msg";"$ip";"$now>> $USER_ID_FILE
echo $id_msg";"$ip";"$now
fi
done
#获取够条件的USER_ID
user_ids=`cat $USER_ID_FILE |awk -F ";" '{print $1}'|sort|uniq -c |sort -nr|awk '{if ($1>=3) print $2}'`
echo "满足条件的user_id:" $user_ids
if [ -n "$user_ids" ];then
id_num=`echo $user_ids |awk '{print NF}'`
for((i=1;i<=$id_num;i++))
do
user_id=`echo $user_ids|awk -v i=$i '{print $i}'`
echo $user_id
ips=`cat $USER_ID_FILE |grep $user_id|awk -F";" '{print $3}'|sort|uniq`
echo "满足条件的ip" $ips
ip_num=`echo $ips |awk '{print NF}'`
for((j=1;j<=$ip_num;j++))
do
ip=`echo $ips|awk -v j=$j '{print $j}'`
echo ${ip}";"${now}>> $IPTABLES_FILE
echo "封闭IP:"$ip
`/sbin/iptables -I INPUT -s ${ip} -p tcp --dport 80 -j DROP`
#ip封闭后需要从user_id文件中删除,防止重复封闭ip
sed -i -e "/$ip/d" $USER_ID_FILE
done
done
fi
################删除1小时之前的######################
#计算时间差
typeset -i result
#现在时间
now=`date "+%Y-%m-%d %H:%M:%S"`
echo "解封ip时间:" $now
end=`date +%s -d "$now"`
while read LINE
do
startime=`echo $LINE |awk -F ";" '{print $4}'`
star=`date +%s -d "$startime"`
result=$(($end-$star))
if([ $result -ge $TIME ]);then
echo "该user_id离现在已经"$result"秒"
echo "清除该user_id的记录"$LINE
sed -i -e "/$LINE/d" $USER_ID_FILE
echo $LINE
fi
done < $USER_ID_FILE
- shell 高级学习成果分享
- servlet学习成果分享
- 领域驱动设计学习成果分享
- Swift学习一周成果分享:笔记一
- 学习成果
- 分享软件实习成果
- 学习一个月web开发的成果,服务器C++,数据库postgresql简易的知识分享平台
- 分享下今天的学习成果,新手,嘿嘿一起进步一起加油
- hello!以后就在这里分享自己的学习进度和成果
- IRRLICHT 学习成果,呵呵
- css学习成果!
- 近期专业学习成果
- 专业学习小成果
- 学习到的成果
- 专业学习的成果
- 专业学习成果
- 专业学习小成果
- 我的学习成果
- 10_Filter和Listener
- iOS 如何监听出插入耳机 拔掉耳机事件?
- 一道有趣的笔试题
- RegexKitLite 正则 iOS
- sizeof()和strlen()
- shell 高级学习成果分享
- C 语言经典题目
- 黑客称利用 Adobe 新漏洞控制了部分雅虎服务器
- hdu 1100
- ASCLL码表
- 【小蒙淘金】12.17金评-黄金白银行情分析及部分操作建议
- C 语言内存分配
- 用SQL语句添加删除修改字段
- linux nfs boot configure