【发布时间】:2010-04-13 01:29:14
【问题描述】:
我有 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 模块,但是我可以用其他行做什么?
【问题讨论】:
标签: 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 模块,但是我可以用其他行做什么?
【问题讨论】:
标签: perl ip-address
试试Net::IP模块
如果第二个模式不支持,你可能需要对 ips 进行一些更改,例如
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";
【讨论】:
my $ip = new Net::IP ("238.51.209.180-199") || die; 输出为Died at ./andrey-zentavr.pl line 5.
您可以使用 Regexp::Common::net 包匹配 IP 地址,并使用 CPAN 上任意数量的模块(包括 Network::IPv4Addr、NetAddr::IP 和 Net::CIDR)来操作它们(并获取网络掩码等)。
【讨论】: