神奇的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(){

print getiparea($1)."\n"  if $line=~m/$ipm/;#getiparea为获得来源的子程序,见1

}

close MYIP;

 

运行程序后,将日志文件名iplog.txt做为命令行参数。

perl perl4-13.pl iplog.txt

IP来源地区被依次查询并输出:

四川省成都市

河南省郑州市

陕西省西安市

广东省广州市

江苏省苏州市

台湾省

。。。。。

。。。。

 

你可能感兴趣的:(Perl,ASP)