Kevin Pfeiffer wrote:
> 
> In article <[EMAIL PROTECTED]>, John W. Krahn wrote:
> 
> > Kevin Pfeiffer wrote:
> >>
> >> In article <[EMAIL PROTECTED]>, John W. Krahn wrote:
> >>
> >> > You need to convert the IP address to a 32 bit integer and back again.
> [...]
> 
> >> (But this includes numbers such as 12.13.1.255 and 12.13.2.0 which are
> >> not in the sample pattern.)
> >
> > That depends.  They could all be in the 8/5 address space.  :-)  I take
> > it that you are assuming a netmask of 255.255.255.0.
> 
> Ah yes. My example then is actually wrong as my series simply counts to 254
> in each of the four quads. :-(
> 
> Your follow-up solution has gone in my archive.

Don't be too quick with that.  :-)  I did some more testing and on
Perl 5.6.0 (I know I should upgrade) the range operator doesn't like
integers larger then 0x7FFFFFFF.  So if you have a different version
of Perl you should test it with a wide range of IP addresses.  It
does however work with a C style for loop.


use Socket;

my $netmask = 0xFFFFFF00;  # 255.255.255.0

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; $address <= $finish_address; ++$address ) {
    next if ( $address & $netmask ) == $address or ( $address & ~$netmask ) == 
~$netmask;
    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