Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Is there a way to get a list of possible ip addresses given a subent and the cidr? Thanks

Replies are listed 'Best First'.
Re: list of ips in a given subnet
by phydeauxarff (Priest) on Sep 09, 2003 at 20:14 UTC
Re: list of ips in a given subnet
by blue_cowdawg (Monsignor) on Sep 09, 2003 at 20:30 UTC

    There are lots of ways of doing that. First take a look at: this info about CIDR blocks.

    sub range_from_net { my ($subnet,$mask)=@_; my $subbits=addr2bits($subnet); my $maskbits=addr2bits($mask); my $allones = ~ $maskbits; my $top = $allones - 1; my $bottom = ($subbits + 1) & $allones; return ($bottom,$top); } sub addr2bits { my $ip=shift; my @o=split([\.],$ip); return ( ($o[0] << 24 ) + ($o[1] << 16) + ($o[2]<<8) + $o[3]); } sub bits2addr { my $bits=shift; return sprintf("%d.%d.%d.%d", (($bits & 0xff000000 ) >> 24), (($bits & 0x00ff0000 ) >> 16), (($bits & 0x0000ff00 ) >> 8), ($bits & 0x000000ff ) ); }
    There may be a few bugs in the above code as I did not test it, but there is the basic overall algorithm I have used when I have had to solve the problem.


    Peter L. Berghold -- Unix Professional
    Peter at Berghold dot Net
       Dog trainer, dog agility exhibitor, brewer of fine Belgian style ales. Happiness is a warm, tired, contented dog curled up at your side and a good Belgian ale in your chalice.
Re: list of ips in a given subnet
by bobn (Chaplain) on Sep 09, 2003 at 20:48 UTC

    Net::Netmask handles this nicely, but only for IPv4.

    --Bob Niederman, http://bob-n.com

    All code given here is UNTESTED unless otherwise stated.

Re: list of ips in a given subnet
by NetWallah (Canon) on Sep 09, 2003 at 23:58 UTC
    Yet another way (my preference) is to use
    NetAddr-IP-3.14.

    I would recommend this because it is fully featured,and easy to use, with plenty of examples.

    Update: It seems that the link above does not point to the right module, and neither does the one below from jdtoronto. Links into CPAN don't seem to work right today, so,
    Please search CPAN for NetAddr::IP to get the module I refer to.

    Update II: Thanks, phydeauxarff - here is the correct link : NetAddr::IP