[PERL] 簡易檢查網頁記錄檔ip來源統計

URL Link //n.sfs.tw/10379

2016-12-05 14:54:35 By 張○○

這近發現有人在大量存取網頁,不清楚遭到攻擊或是合法的讀取,所以只好去翻記錄檔,看看誰來我家,apache的log如果沒有修改的話,預設大概是長這個樣子:

118.166.205.237 - - [28/Jul/2013:00:10:31 +0800] "GET /index.php HTTP/1.1" 200 55397 "http://www.example.com/content.php?sn=6637" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; BTRS104192; GTB7.5; Foxy/1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI/2)"

我目前想做的只是把資料列中的ip取出來統計看看每個ip有幾次記錄,單一ip超過100次我就懷疑它在攻擊。

所以我撰寫下面這個程式 ipcount.pl

#!/usr/bin/perl -w
 
if(  !$ARGV[0] )  {die  "請指定檔案\r\n";}
$fn= $ARGV[0];
 
open(FILE, $fn) or die "$!";
$cnt=0;
$data="";
%ip =();
while( defined( $line = <FILE> )){
  if($line =~ /^(\d+\.\d+\.\d+\.\d+)/){
    $data .= $1 . "\n";
    $ip{$1}++;
    $cnt++;
  }
}
 
print "[$fn]總共判斷:". $cnt."筆\n";
close( FILE);
 
$res="";
 
# 由值排序
foreach $value (sort{$ip{$a} <=> $ip{$b}} keys %ip )
{
    $res .= "$value \t $ip{$value}\n";
}
 
 
open( FILE, "> outZ.txt") or die "$!";
print FILE $res;
close( FILE);</file>

執行

 $ ./ipcount.pl 你要分析的記錄檔

範例

$ ./ipcount.pl 6667.txt
[6667.txt]總共判斷:26339筆

結果檔會存在同目錄的 outZ.txt 內容為 不重覆ip 出現的次數

116.59.225.152   1
115.80.253.111   1
42.76.216.236    1
101.12.10.105    1
36.239.22.52     1
39.14.142.67     1
211.74.251.120   1
140.117.129.114      2
111.254.207.26   2
....
220.137.29.80    48
1.160.218.72     53
101.10.2.206     63
36.231.68.8      66
116.59.225.14    68
111.248.105.126      69
114.24.70.61     105
1.160.230.199    233

程式相當的快,以上例26339筆不到0.1s就統計完畢,最後幾筆是可疑的流量。


原文 2013-08-06 13:41:00