[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 的路径, 加入可执行权限便以使用了。

One Response

  1. tim 19 November 2018

Leave a Reply