如何使用Perl解析IP地址和地址范围?

时间:2010-04-13 01:29:15

标签: perl ip-address

我有IP列表:

238.51.208.96/28
238.51.209.180-199
238.51.209.100-109
238.51.213.2-254
...

我怎样才能轻松解析它们?我需要范围内的第一个和最后一个IP。 对于第一行,我可以使用Net :: Netmask CPAN模块,但我可以用其他行做什么?

2 个答案:

答案 0 :(得分:4)

试试Net::IP模块

如果第二种模式不支持,您可能需要对预付款进行一些更改,例如

238.51.209.180-199

238.51.209.180 - 238.51.209.199

使用一些正则表达式,例如,

$range =~ s/^((?:\d+\.){3})(\d+)-(\d+)$/$1$2 - $1$3/gm;

完整脚本:

use warnings;
use strict;
use Net::IP;
my $range = "238.51.209.180-199";
$range =~ s/^((?:\d+\.){3})(\d+)-(\d+)$/$1$2 - $1$3/;
my $ip = new Net::IP ($range) || die;
print $ip->ip (), "\n";
print $ip->last_ip (), "\n";

答案 1 :(得分:2)

您可以使用Regexp::Common::net软件包匹配IP地址,并使用CPAN上的任意数量的模块对其进行操作(并获取网络掩码等),包括Network::IPv4AddrNetAddr::IP和{{3 }}