아파치 로그를 통해서 분당 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 |


