У меня есть список дюйм/с:
238.51.208.96/28
238.51.209.180-199
238.51.209.100-109
238.51.213.2-254
...
Как я могу легко проанализировать их? Мне нужен первый и последний IP от диапазона. Для первой строки я могу использовать Сеть:: модуль CPAN Сетевой маски, но что я могу сделать со строками других?
Попробуйте модуль 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";
Вы можете сопоставить IP-адреса с помощью пакета Regexp :: Common :: net и управлять ими (и получать маски сети и т. Д.) С любым количеством модулей на CPAN, включая Network :: IPv4Addr , NetAddr :: IP и Net :: CIDR .