아파치 로그를 통해서 분당 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중 abusing IP 확인하기  (0) 2007.10.19
Apache request 갯수 파악하기  (0) 2007.10.19
L4 이야기  (0) 2007.09.29
L4 사용여부.  (0) 2007.09.29
Posted by '김용환'

댓글을 달아 주세요