实在是不好意思~ 以为这种垃圾脚本不会有人看....谢谢各位了,代码可能是有些问题吧
本人能力有限,代码可能有些幼稚,而不实用,没什么编码风格,但如果能给想我一样正在学习shell的人们一些参考,是我的荣幸!
重新写了一遍:
- #!/bin/bash
- #
- #---------------------------------------------------------------------------------------
- #Scrip name: killip, base on ip_conntrack, write by wwy, at 2005-08-22 14:58:29
- #---------------------------------------------------------------------------------------
- [ "`ps ax | grep -v grep | grep $0 | wc -l`" -gt "2" ] && echo "It is running, sorry" && exit 1
- [ "`lsmod | grep ip_conntrack`" ] || modprobe ip_conntrack
- #
- dir=/tmp/killip
- tmp331=$dir/black_list-1.txt
- tmp332=$dir/black_list-2.txt
- tmp333=$dir/black_list-3.txt
- tmp221=$dir/tmp22-1.txt
- tmp222=$dir/tmp22-2.txt
- tmp223=$dir/tmp22-3.txt
- tmp331clr=$dir/tmp33-1-clr.txt
- tmp332clr=$dir/tmp33-2-clr.txt
- tmp333clr=$dir/tmp33-3-clr.txt
- tmp111=$dir/tmp111.txt
- tmp11=$dir/tmp11.txt
- ips=/proc/net/ip_conntrack
- ipc=$dir/ip_conntrack.tmp
- log=$dir/log.txt
- webdir=/var/www/html/wwy
- cpu=`sar -u 1 1 | awk '{print $7}' | tail -2`
- #
- [ ! -e $dir ] && mkdir -p $dir
- if [ ! -e $webdir/index.html ];then
- mkdir -p $webdir
- mkdir -p $webdir/all
- mkdir -p $webdir/drop
- touch $webdir/index.html
- fi
- #################################################################
- ##---------------------- functions ----------------------------##
- #################################################################
- function make_clr {
- while read clr33;do
- cat $tmp111 | grep $clr33 >> $tmp333clr
- done < $tmp333
- while read clr22;do
- cat $tmp111 | grep $clr22 >> $tmp332clr
- done < $tmp332
- while read clr11;do
- cat $tmp111 | grep $clr11 >> $tmp331clr
- done < $tmp331
- }
- function clr_conns {
- S_IP=$1
- D_IP=$2
- S_PORT=$3
- D_PORT=$4
- hping2 $D_IP -R -s $S_PORT -p $D_PORT -a $S_IP -k -c > /dev/null 2>&1 &
- }
- function kill {
- SLEEP_TIME=$1
- CLR_LIST=$2
- BLACK_LIST=$3
- while read blackip;do
- iptables -I FORWARD -s $blackip/32 -j DROP
- done < $BLACK_LIST
- sleep $SLEEP_TIME
- #-----------------------------------#
- while read clr3;do
- clr_conns $clr3
- done < $CLR_LIST
- #-----------------------------------#
- while read reblackip;do
- iptables -D FORWARD -s $reblackip/32 -j DROP
- done < $BLACK_LIST
- }
- #################################################################
- ##--------------- To make a "black list" ----------------------##
- #################################################################
- > $tmp11
- > $tmp111
- > $ipc
- > $tmp333clr
- > $tmp332clr
- > $tmp331clr
- > $tmp223
- > $tmp222
- > $tmp221
- > $tmp333
- > $tmp332
- > $tmp331
- #----------------------------------------------------------------------------#
- cat $ips > $ipc
- sleep 1
- #----------------------------------------------------------------------------#
- wc=`cat $ipc|grep ESTABLISHED|awk -F= '{print $2,$3,$4,$5}'|grep ^172. |sort|awk '{print $1,$3,$5,$7}'|tee $tmp111|awk '{print $1}'|uniq -c|tee $tmp11|wc -l`
- date=`date '+%m/%d %H:%M'`
- cpu2=`sar -u 1 1 | awk '{print $7}' | tail -2`
- date2=`date '+%H'`
- #----------------------------------------------------------------------------#
- sleep 1
- #----------------------------------------------------------------------------#
- #if [ "$wc" -gt 2500 ] && [ "$date2" -gt 10 ]
- if [ "$wc" -gt 0 ];then
- #------------------------------
- awk '{$1}{if ($1>30 && $1<50) print $2}' $tmp11 > $tmp221
- awk '{$1}{if ($1>=50 && $1<100) print $2}' $tmp11 > $tmp222
- awk '{$1}{if ($1>=100) print $2}' $tmp11 > $tmp223
- cut -c1-15 $tmp221 > $tmp331
- cut -c1-15 $tmp222 > $tmp332
- cut -c1-15 $tmp223 > $tmp333
- wcblackip1=`cat $tmp331 | wc -l`
- wcblackip2=`cat $tmp332 | wc -l`
- wcblackip3=`cat $tmp333 | wc -l`
- #################################################################
- ##---------------- To make a index.html -----------------------##
- #################################################################
- ### drop web ###
- cat > "$webdir/drop/index.html" << END
- <b>If the total IPs >2500 <font color="#ff0000">(total $wc at $date)</font> AND if:</b>
- <p>you connect <b>">100"</b>, you ip will be killed in <b>30min</b>.</p>
- <p>you connect <b>"50-100"</b>, you ip will be killed in <b>15min</b>.</p>
- <p>you connect <b>"30-50"</b>, you ip will be killed in <b>10min</b>.</p>
- <hr color="#ff8000">
- <p><b><font color="#ff0000">These IPs (total $wcblackip3 + $wcblackip2 + $wcblackip1) were killed, at <font size=5>$date</font></font> <a href=../all>(look-up all IPs)</a></b></p>
- END
- awk '{$1}{if ($1>=100) print $1, $2}' $tmp11|sort -nr|awk '{print "<p>""<font color="#ff0000">"$1"</font>""\t","<b>"$2"</b>""\t""kill 30min""</p>"}' >> $webdir/drop/index.html
- awk '{$1}{if ($1>=50 && $1<100) print $1, $2}' $tmp11|sort -nr|awk '{print "<p>"$1"\t","<b>"$2"</b>""\t""kill 15min""</p>"}' >> $webdir/drop/index.html
- awk '{$1}{if ($1>30 && $1<50) print $1, $2}' $tmp11|sort -nr|awk '{print "<p>"$1"\t","<b>"$2"</b>""\t""kill 10min""</p>"}' >> $webdir/drop/index.html
- ### all web ###
- cat > "$webdir/all/index.html" << END
- <p><b>You can "ctrl + F" to find your ip's connects.(total $wc IPs at $date)</b></p>
- <p><a href=../drop> <-- back </a></p>
- END
- cat $tmp11 | sort -nr | awk '{print "<p>"$1"\t",$2"\t""</p>"}' >> $webdir/all/index.html
- ################################################################
- ##----------------- Use iptables to DROP ---------------------##
- ################################################################
- make_clr
- [ -s $tmp333 ] && kill 30m $tmp333clr $tmp333 &
- [ -s $tmp332 ] && kill 15m $tmp332clr $tmp332 &
- [ -s $tmp331 ] && kill 10m $tmp331clr $tmp331 &
- #-------------------------------
- elif [ "$date2" -lt 5 ] && [ "$date2" -gt 3 ]
- then
- while read clrall;do
- clr_conns $clrall
- done < $tmp111
- echo "clr at $date " >> /$logdir/$log
- fi
- ################################################################
- ##------------------- make system log ------------------------##
- ################################################################
- [ -e $log ] || touch $log
- echo "$wc $date $cpu $cpu2 $wcblackip3 + $wcblackip2 + $wcblackip1" >> $log
复制代码 |