神奇的perl-第六个任务(9)
本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载
4.3 IP地址匹配
IP地址使用32位二进制地址格式,通常可用以点号划分的4个十进制数来表示,如:192.168.1.1。可用正则模式串如下描述IP地址:
((\d){1,3}\.(\d){1,3}\.(\d){1,3}\.(\d){1,3})
例如:
#perl4-20.pl
$line='2010/8/6 9:10 123.123.223.156';
$ipm='((\d){1,3}\.(\d){1,3}\.(\d){1,3}\.(\d){1,3})';
print $1 if $line=~m/$ipm/;#将匹配到的123.123.223.156输出。
4.4完成任务
首先,我们尝试读取iplog.txt中的所有IP地址,并输出其对应的地区。
1、获得来源
$url='http://www.ip138.com/ips.asp?ip='.$ip.'&action=2&action=2';
$sjts=decode('utf8',"本站主数据:");
$page=get($url);
if (sysisutf8()){#判断当前系统的编码环境,使用笔者的在前面定义的Utf2Gbk模块
binmode(STDOUT, ':encoding(utf8)');
}
else{
binmode(STDOUT, ':encoding(gbk)');
}
return $1 if $page=~m/$sjts(.+?)(<\/li>|\s)/i;
my $nofind="未知地区";
return $nofind;
2、输出地区
open MYIP,"<$fn";
foreach $line(<MYIP>){
print getiparea($1)."\n" if $line=~m/$ipm/;#getiparea为获得来源的子程序,见1
}
close MYIP;
运行程序后,将日志文件名iplog.txt做为命令行参数。
perl perl4-13.pl iplog.txt
IP来源地区被依次查询并输出:
四川省成都市
河南省郑州市
陕西省西安市
广东省广州市
江苏省苏州市
*省
。。。。。
。。。。
上一篇: 神奇的PERL-第六个任务(2)
下一篇: 求大神看看这个关于创建有关问题的代码