2017-05-26 26 views
-4

给定范围内的IP地址,例如我需要增加使用Perl

my $starting_ip = '1.2.3.4'; 
my $ending_ip = '1.3.0.5'; 

我的输出将是

1.2.3 
1.2.4 
1.2.5 
.. 
.. 
1.2.255 
1.3.0 

我试过到目前为止:

use Socket; 

my $startIp  = $ARGV[0]; 
my $endIp   = $ARGV[1]; 
my $start_address = unpack 'N', inet_aton($startIp); 
my $finish_address = unpack 'N', inet_aton($endIp); 
my @f    = split('\.', $endIp); 
my $last_ip  = join('.', $f[0], $f[1], $f[2]); 

for (my $address = $start_address; 
     $address <= $finish_address; 
     $address = $‌​address + 255) { 

    my $new_ip = inet_ntoa(pack 'N', $address); 
    my @a = split('\.', $new_ip); 

    $new_ip = join('.', $a[0], $a[1], $a[2]); 

    print "$new_ip\n"; 
} 

print "$last_ip\n"; 

有不需要考虑IP地址的最后部分。

+0

你寻找到'for'循环。甚至可能嵌套'for'循环?你有什么尝试? – AntonH

+0

_不需要考虑_你试过的东西 – ssr1012

+0

请不要在评论中发布你的代码,编辑它到问题中。 – AntonH

回答

0

像这样?

sub ip_addr { $_[0] = pack "N", 1 + unpack "N", $_[0] } 
my $starting_ip = 1.2.4.4; 
my $ending_ip = 1.3.0.5; 
    for ($addresses = $starting_ip; $addresses le $ending_ip; ip_addr($addresses)) { 
     printf "%vd\n", $addresses; 
    } 

虽然现在有很多其他的方式,我想一个更好的选择是使用Net::IP