Как я могу проанализировать IP-адреса и диапазоны адресов с Perl?

У меня есть список дюйм/с:

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

Как я могу легко проанализировать их? Мне нужен первый и последний IP от диапазона. Для первой строки я могу использовать Сеть:: модуль CPAN Сетевой маски, но что я могу сделать со строками других?

5
задан Jon Seigel 26 April 2010 в 23:01
поделиться

2 ответа

Попробуйте модуль 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";
4
ответ дан 14 December 2019 в 13:31
поделиться

Вы можете сопоставить IP-адреса с помощью пакета Regexp :: Common :: net и управлять ими (и получать маски сети и т. Д.) С любым количеством модулей на CPAN, включая Network :: IPv4Addr , NetAddr :: IP и Net :: CIDR .

2
ответ дан 14 December 2019 в 13:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: