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

У меня есть список IP-адресов:

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

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

Ответы [ 2 ]

4 голосов
/ 13 апреля 2010

Попробуйте 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";
2 голосов
/ 13 апреля 2010

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

...