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

Я должен генерировать список IP-адресов (IPv4) в Perl. Я имею, запускаются и конечные адреса, например, 1.1.1.1 и 1.10.20.30. Как я могу распечатать весь промежуток адресов?

7
задан brian d foy 22 February 2010 в 00:17
поделиться

4 ответа

Используйте функцию циклов Net::IP:

Оператор + перегружен для того, чтобы можно было перебрать целый ряд IP-адресов:

4
ответ дан 6 December 2019 в 12:50
поделиться

Используйте Net :: IP . Из документации CPAN:

my $ip = new Net::IP ('195.45.6.7 - 195.45.6.19') || die;
# Loop
do {
    print $ip->ip(), "\n";
} while (++$ip);

Этот подход более гибкий, поскольку Net :: IP принимает нотацию CIDR, например. 193.0.1 / 24, а также поддерживает IPv6.

Изменить: если вы работаете конкретно с сетевыми блоками, вы можете исследовать Net :: Netmask .

7
ответ дан 6 December 2019 в 12:50
поделиться

Все дело в том, как вы это кодируете. Это самый быстрый способ, который я знаю.

my $start = 0x010101; # 1.1.1
my $end   = 0x0a141e; # 10.20.30

for my $ip ( $start..$end ) { 
    my @ip = ( $ip >> 16 & 0xff
             , $ip >>  8 & 0xff
             , $ip       & 0xff
             );
    print join( '.', 1, @ip ), "\n";
}
3
ответ дан 6 December 2019 в 12:50
поделиться

TMTOWTDI:

sub inc_ip { $_[0] = pack "N", 1 + unpack "N", $_[0] }
my $start = 1.1.1.1;
my $end = 1.10.20.30;
for ( $ip = $start; $ip le $end; inc_ip($ip) ) {
    printf "%vd\n", $ip;
}
2
ответ дан 6 December 2019 в 12:50
поделиться
Другие вопросы по тегам:

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