欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

神奇的perl-第六个任务(9)

程序员文章站 2022-04-29 15:54:49
...

本神奇的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 ASP