lshboo 发表于 2018-8-17 09:11:32

Shell练习(九)

  习题1:找规律打印数字
  要求:请详细查看如下几个数字的规律,并使用shell脚本输出后面的十个数字。
  10 31 53 77105 141 …….
  提示:相邻两个数差值的差值有规律
  参考答案:
#!/bin/bash  
# date: 2018年2月27日
  
x=10
  
m=21
  
echo -e $x " \c"
  
for i in `seq 0 14`
  
do
  
   n=$
  
   x=$[$x+$m]
  
   echo -e $x " \c"
  
   m=$[$m+$n]
  
done
  
echo
  习题2:封IP
  要求:根据web服务器上的访问日志,把一些请求量非常高的ip给拒绝掉!
  分析: 我们要做的,不仅是要找到哪些ip请求量不合法,并且还要每隔一段时间把之前封掉的ip(若不再继续请求了)给解封。 所以该脚本的关键点在于定一个合适的时间段和阈值。
  比如, 我们可以每一分钟去查看一下日志,把上一分钟的日志给过滤出来分析,并且只要请求的ip数量超过100次那么就直接封掉。 而解封的时间又规定为每半小时分析一次,把几乎没有请求量的ip给解封!
  参考日志文件片段:
  137.23.21.127 www.testbbs.com “/bbs/thread-5622-3-1.html” 200 “-” “Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)”
  54.124.50.87 www.testbbs.com “/bbs/search.php?mod=forum&srchtxt=LNMP&formhash=8f0c7da9&searchsubmit=true&source=hotsearch” 200 “-” “Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)”
  参考答案:
#!/bin/bash  
# date:2018年2月27日
  
logfile=/home/logs/access.log
  
d1=`date -d "-1 minute" +%H:%M`
  
d2=`date +%M`
  
ipt=/sbin/iptables
  
ips=/tmp/ips.txt
  

  
block(){
  
    grep "$d1:" $logfile|awk '{print $1}' |sort -n |uniq -c |sort -n >$ips
  
    for ip in `awk '$1>50 {print $2}' $ips`; do
  
      $ipt -I INPUT -p tcp --dport 80 -s $ip -j REJECT
  
      echo "`date +%F-%T` $ip" >> /tmp/badip.txt
  
    done
  
}
  

  
unblock(){
  
    for i in `$ipt -nvL --line-numbers |grep '0.0.0.0/0'|awk '$2
页: [1]
查看完整版本: Shell练习(九)