Brian Burns wrote:
> 
> given a start and finish address like this
> 
> $start_address  = "10.11.1.14:;
> $finish_address = "12.13.2.3";
> 
> I need to output generarate a a sequential list of addresses like the
> following:
> 
> 10.11.1.14
> 10.11.1.15
> 10.11.1.16
> ...
> 12.13.1.252
> 12.13.1.253
> 12.13.1.254
> 12.13.2.1
> 13.13.2.2
> 12.13.2.3
> 
> I have been experimenting using nested while loops for each octet. The
> following code works for properly enumerating the first and second
> octets, but I have not been successful in making the third or forth
> octets calculate in I continue nesting the loops.Any suggestions?  I
> have looked at nested loops until my eyes are dizzy :-) Surely there has
> to be a better way than this?
> 
> $start_a    = "164";
> $start_b    = "100";
> $start_c    = "10";
> $start_d    = "1";
> 
> $finish_a   = "164";
> $finish_b   = "100";
> $finish_c   = "15";
> $finish_d   = "254";
> 
> $counter_b = "255";
> 
> #OCTET A
> while ($start_a ne ($finish_a+1))
>     {
>     #OCTET B
>     $counter_b = ($finish_b+1) unless ($start_a ne $finish_a);
>     while ($start_b ne $counter_b)
>         {
>         #build A AND B addresses and output
>         $target_addr = $start_a.".".$start_b;
>         print "$target_addr\n";
>         $start_b++;
>         }
>     $start_a++;
>     $start_b="1";
>     $counter_b="255";
>     }


You need to convert the IP address to a 32 bit integer and back again.

use Socket;

my $start_address  = unpack 'N', inet_aton( '10.11.1.14' );
my $finish_address = unpack 'N', inet_aton( '12.13.2.3' );

for my $address ( $start_address .. $finish_address ) {
    print inet_ntoa( pack 'N', $address );
    }



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to