[Perl Script] 統計記錄檔 IP

如果發現伺服器有大量存取記錄, 要檢查是否 DDOS 攻擊, 可以開啟記錄檔檢查, 但資料量大的話, 要人手檢查也很困難, 所以我寫了這個簡單的 Perl Script, 用作檢查記錄檔內出現次數最多的 IP, 鎖定出現頻率最高的 IP 作檢查會容易得多。

編寫時想到有多種記錄檔也有此需要, 只要記錄檔是一行一個記錄, 而每行只有一個 IP 出現便可以用, 已經試過 apache access log 及 error log, /var/log/secure, /var/log/vsftpd.log 也可以正確使用。執行速度尚算可以, 檢查一個 350MB 的 apache log, 使用 raid1 的伺服器需時大約 6 秒。

使用方法為: count_ip.pl log_file [count]

例如我想檢查 apache log, 記錄檔在/var/log/httpd/access.log, 是這樣:

./count_ip.pl /var/log/httpd/access.log

預設會顯示頭 10 個出現最多的 IP, 如果想顯示更多 IP 也可以自訂, 例如想顯示 20 個 IP:

./count_ip.pl /var/log/httpd/access.log 20

如果想儲存結果的話, 可以這樣:

./count_ip.pl /var/log/httpd/access-20150416.log > /var/log/ip_count_result.log

這樣結果便會儲存在 /var/log/ip_count_result.log

下載: [Perl Script] 統計記錄檔 IP

下載後確定第 1 行是伺服器上面 perl 的路徑, 加入可執行權限便以使用了。




Leave a Reply