开发者

How can I parse IP addresses and address ranges with Perl?

开发者 https://www.devze.com 2022-12-26 20:10 出处:网络
I have list of IPs: 238.51.208.96/28 238.51.209.180-199 238.51.209.100-109 238.51.213.2-254 ... How can I easily parse th开发者_开发技巧em? I need first and last IP from range.

I have list of IPs:

238.51.208.96/28

238.51.209.180-199

238.51.209.100-109

238.51.213.2-254

...

How can I easily parse th开发者_开发技巧em? I need first and last IP from range. For the first line I can use Net::Netmask CPAN module, but what can I do with others lines?


Try Net::IP module

If second patterns does not support, you may need to some changes to ips in advances like

238.51.209.180-199

to

238.51.209.180 - 238.51.209.199

by using some regex, for example,

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

Full script:

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";


You can match IP addresses using the Regexp::Common::net package, and manipulate them (and get netmasks etc) with any number of modules on CPAN, including Network::IPv4Addr, NetAddr::IP and Net::CIDR.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号