아파치 로그를 통해서 분당 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
Posted by '김용환'
,