아파치 로그를 통해서 분당 IP를 뽑아내어 10개이상 중복될 경우는 출력을 한다.
abusing PC의 ip를 얻어올 수있다.
#!/usr/bin/perl #cat access_https.071016 | grep 17:31 | awk '{print $1}' | sort #awk '{pre; cur=$1; if(pre==0) { count=1;pre=$1;} else if (cur==pre) {count++;} else { print pre,"-",count ; pre = $1; count= 1 } } END { print pre,"-",count} # count to expect abusing my $abuseCount= 10; # every minute my $minute = 1; my $filename; my $time; my $until; if($#ARGV < 0) { printUsage(); } else { while($#ARGV >= 0) { $filename = shift(@ARGV); $time = shift(@ARGV); $minute = shift(@ARGV); } } sub printUsage() { print "Usage : getReqCount.pl filename time(hh:mm) until(until minute)\n"; print "ex) getReqCount.pl access_https.log 1700 1\n"; print "\n"; } #print "filename : $filename\n"; #print "time : $time\n"; #print "until : $until\n"; $digits = $time; @timeinfo = $digits =~ /(\d\d)/g; for ($i = 0; $i < $minute ; $i++) { $i = @timeinfo[1] + $i; if ($i < 10) { $i = "0".$i; } print "@timeinfo[0]:$i\n"; print `grep "$m:$i" $filename | grep -v 127.0.0.1 | awk '{print \$1}' | sort | awk '{pre; cur=\$1; if(pre==0) { count =1;pre=\$1;} else if (cur==pre) {count++;} else { if (count > $abuseCount) { print pre,"-",count } ; pre = \$1; count=1 } } END { if (count > $abuseCount) { print pre,"-",count} }'` #print `grep "$m:$i" $filename | grep -v 127.0.0.1 | awk '{print \$1}' | sort | awk '{pre; cur=\$1; if(pre==0) { coun t=1;pre=\$1;} else if (cur==pre) {count++;} else { print pre,"-",count ; pre = \$1; count=1 } } END { print pre,"-",count}'` #print `grep "$m:$i" $filename | awk '{print \$1}' | sort ` } |
'web' 카테고리의 다른 글
httpclient 3.0 테스트 코드 (0) | 2007.10.24 |
---|---|
DDos 공격의 또 다른 패턴을 잡기. (0) | 2007.10.21 |
Apache request 갯수 파악하기 (0) | 2007.10.19 |
L4 이야기 (0) | 2007.09.29 |
L4 사용여부. (0) | 2007.09.29 |