IP地址访问统计分析

在网站运维中,分析日志文件以了解访问者来源是一个重要的任务。本文将介绍如何使用Perl脚本分析Apache服务器日志文件,统计不同IP地址的访问次数,并进行排序

Apache服务器的日志文件记录了所有访问请求的详细信息。每行日志的格式如下:

127.0.0.1 - - [10/Apr/2007:10:39:11 +0300] ... 139.12.0.2 - - [10/Apr/2007:10:40:54 +0300] ... 217.1.20.22 - - [10/Apr/2007:10:40:54 +0300] ...

通过日志文件,可以提取出IP地址,并进行进一步的分析。

提取IP地址

要提取日志文件中的IP地址,可以使用以下Perl代码:

my $length = index($line, " "); my $ip = substr($line, 0, $length);

这段代码首先找到空格的位置,然后提取出空格前的字符串作为IP地址。

统计访问次数

为了统计每个IP地址的访问次数,需要一个数据结构来映射IP地址到访问次数。在Perl中,这种数据结构被称为"关联数组"或"哈希"。

哈希是一个无序的键值对集合,其中键是唯一的字符串,值可以是任何标量值(数字、字符串或引用)。在Perl中,哈希用百分号(%)标记。

以下是统计访问次数的Perl代码:

while (my $line = <$fh>) { my $length = index($line, " "); my $ip = substr($line, 0, $length); $count{$ip}++; }

这段代码遍历日志文件的每一行,提取出IP地址,并在哈希中增加相应的计数。

排序和输出

为了输出排序后的IP地址和访问次数,可以使用Perl的排序功能。以下是排序并输出的代码:

foreach my $ip (reverse sort { $count{$a} <=> $count{$b} } keys %count) { print "$ip $count{$ip}\n"; }

这段代码首先使用reverse sort对哈希的键进行排序,然后输出排序后的IP地址和访问次数。

限制输出数量

如果只想输出访问次数最多的前N个IP地址,可以使用以下代码:

my $top = 2; foreach my $ip (reverse sort { $count{$a} <=> $count{$b} } keys %count) { print "$ip $count{$ip}\n"; $top--; if ($top <= 0) { last; } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485