[精讚] [會員登入]
584

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

利用PERL來檢查網頁記錄檔ip來源統計的簡易程式

分享此文連結 //n.sfs.tw/10379

分享連結 [PERL] 簡易檢查網頁記錄檔ip來源統計@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-24 13:39:52 最後編修
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

END

你可能感興趣的文章

PERL一次讀取檔案所有內容的方法($/) perl可以使用slurp mode一次讀完檔案所有內容的方法及一些範例

[PERL] Regex 字元集(群組) 幾個Perl在regular express會用到的特殊符號notation:字元集

[PERL] 位元運算 Bitwise operation PERL的位元運算整理

[PERL] 11- 雜湊的範例 Perl 的幾個雜湊範例

[PERL] 用substr切割及置換字串 perl用substr來切割及置換字串

自行撰寫syslog server建立資訊安全控管中心#2 -- 架構和作法 利用PERL將syslog收攏到資料庫的程式,架構和作法

我有話要說


限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

Linux shell 的date表示法 linux下SHELL中的date表示法

[PHP] 檢查IP是否在某個網段內 mtachcidr 要檢查IP是否在某個網段內,要寫幾行?10行?5行? 不用,只要2行。以下是我寫的 code /** * matchCI

[大型機台] 熱血高校躲避球 多少少年時光歲月耗在這個遊戲上,二十幾年前的那個時光,唯一想做的事就是把吃飯錢省下來拿去打一場五塊錢的電動,就算是沒錢也

在Centos7 下安裝 Wildfly10 wildfly以前叫JBoss,2014.11.20改名叫Wildfly,起始版本是Wildfly8,現在已經出到Wil

兩次使用InnoDB的慘痛經驗 Mysql 的Innodb引擎雖然好用,但是我得說說我兩次的慘痛經驗,這讓我考慮以後可能不會再使用innodb了