Szukałem sposobu do Iteracter przez zasięg IP i natknąłem się na to odpowiedź

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

Chcę wiedzieć, czy istnieje sposób na przekształcenie łańcucha jak my $start = "192.168.1.1"; do flagi wektorowej. Co mam, kiedy przekazuję ciąg, to kilka losowych liczb

-2
Mobrine Hayde 3 styczeń 2020, 22:12

1 odpowiedź

Najlepsza odpowiedź
pack 'C*', split /\./, $s

Lub w specjalnie do IPv4,

use Socket qw( inet_aton );

inet_aton($s)

Na przykład możesz użyć

use Socket qw( inet_aton );

my $start = unpack('N', inet_aton('1.1.1.1'));
my $end   = unpack('N', inet_aton('1.10.20.30'));

for my $ip ($start..$end) {
   printf("%vd\n", pack('N', $ip));
}
3
ikegami 8 styczeń 2020, 23:01