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]