In article <[EMAIL PROTECTED]>, John W. Krahn wrote:
> 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
[...]
>
> 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 );
> }
Aha!
(But this includes numbers such as 12.13.1.255 and 12.13.2.0 which are not
in the sample pattern.)
Here's my less clever (and slower?) method...
my @start_addr = split /\./, $start_address;
my @finish_addr = split /\./, $finish_address;
my @result = @start_addr;
print join ".", @result, "\n"; # first number
while (1) {
$result[3]++; # increment "ones" by 1
my $value = join ".", @result; # output new number
print $value, "\n" ;
last if $value eq $finish_address;
if ($result[3] == 254) { # need to do carryover
my $x;
for ($x = 3; $x > -1; $x--) {
if ($result[$x] == 254) {
$result[$x -1]++; # carry over to next column
$result[$x] = 0; # reset column
}
}
}
}
print "\n";
__END__
(Comments, suggestions always welcome.)
-Kevin
--
Kevin Pfeiffer
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]