Polls

Topics

Display IP Address Allocation Table According to Subnet Mask

Posted by Vivek on Saturday March 8, 08 @5:24 am

If you need a tabular representation of relationships and source of the various variables representing a chunk from /32 to /0 subnets use iptab command. This is useful if you are allocating IPs to end users. Following information is displayed with the command:
=> CIDR notation

=> Network Mask

=> Available Networks

=> Available Hosts per network

=> Total usable hosts

$ iptab
Sample output:

+----------------------------------------------+
| addrs   bits   pref   class  mask            |
+----------------------------------------------+
|     1      0    /32          255.255.255.255 |
|     2      1    /31          255.255.255.254 |
|     4      2    /30          255.255.255.252 |
|     8      3    /29          255.255.255.248 |
|    16      4    /28          255.255.255.240 |
|    32      5    /27          255.255.255.224 |
|    64      6    /26          255.255.255.192 |
|   128      7    /25          255.255.255.128 |
|   256      8    /24      1C  255.255.255.0   |
|   512      9    /23      2C  255.255.254.0   |
|    1K     10    /22      4C  255.255.252.0   |
|    2K     11    /21      8C  255.255.248.0   |
|    4K     12    /20     16C  255.255.240.0   |
|    8K     13    /19     32C  255.255.224.0   |
|   16K     14    /18     64C  255.255.192.0   |
|   32K     15    /17    128C  255.255.128.0   |
|   64K     16    /16      1B  255.255.0.0     |
|  128K     17    /15      2B  255.254.0.0     |
|  256K     18    /14      4B  255.252.0.0     |
|  512K     19    /13      8B  255.248.0.0     |
|    1M     20    /12     16B  255.240.0.0     |
|    2M     21    /11     32B  255.224.0.0     |
|    4M     22    /10     64B  255.192.0.0     |
|    8M     23     /9    128B  255.128.0.0     |
|   16M     24     /8      1A  255.0.0.0       |
|   32M     25     /7      2A  254.0.0.0       |
|   64M     26     /6      4A  252.0.0.0       |
|  128M     27     /5      8A  248.0.0.0       |
|  256M     28     /4     16A  240.0.0.0       |
|  512M     29     /3     32A  224.0.0.0       |
| 1024M     30     /2     64A  192.0.0.0       |
| 2048M     31     /1    128A  128.0.0.0       |
| 4096M     32     /0    256A  0.0.0.0         |
+----------------------------------------------+

iptab is nothing but a perl script and part of perl-Net-IP package. Here is script listing (download link):

#!/usr/bin/perl

eval 'exec /usr/bin/perl  -S $0 ${1+"$@"}'
    if 0; # not running under some shell

use Net::IP;
use strict;

print "+----------------------------------------------+
| addrs   bits   pref   class  mask            |
+----------------------------------------------+
";

my ($ip,$size,$class,$bits,$len);

my $ip = new Net::IP('0');

for my $len (reverse (0..32))
{

        $ip->set("0.0.0.0/$len");

        $size = $ip->size();

        if ($size >=1048576) # 1024*1024
        {
                $size /= 1048576;
                $size .= 'M';
        }
        elsif ($size >= 1024)
        {
                $size /= 1024;
                $size .= 'K';
        };

        $len = $ip->prefixlen();
        $bits = 32 - $len;

        if ($bits >= 24)
        {
                $class = 2**($bits-24);
                $class.= 'A';
        }
        elsif ($bits >= 16)
        {
                $class = 2**($bits-16);
                $class.= 'B';
        }
        elsif ($bits >= 8)
        {
                $class = 2**($bits-8);
                $class.= 'C';
        }

        printf ("| %5s %6s %6s %7s  %-15s |\n",
                $size,$bits,'/'.$len,$class,$ip->mask());

};

print "+----------------------------------------------+\n";

Want to stay up to date with the latest Linux tips, news and announcements? Subscribe to our free e-mail newsletter or full RSS feed to get all updates. You can Email this page to a friend.

You may also be interested in...

Discussion on This Article:

  1. Randy Belk Says:

    This seems to be the same script that is in the debian/ubuntu libnet-ip-perl package. It does not work. The error is “Can’t call method “is_zero” on an undefined value at /usr/share/perl/5.8/Math/BigInt.pm line 1148.”

  2. enderst Says:

    Same here

  3. Matt Says:

    You can use the linux app ipcalc that gives you a very good ipsubnet calculator amongst other things.

    Those running a Debian based distro can just do

    ’sudo apt-get install ipcalc’ to install it.

    You can find the IPCalc website here.

  4. Rolf Says:

    Here is a fix/patch for the
    ‘Can’t call method “is_zero” on an undefined value’

    I had to edit /usr/share/perl5/Net/IP.pm and change

    ‘if (!$int) { ‘
    to
    ‘if (ref($int) ne “Math::BigInt”) {’

    See the patch here:
    http://rt.cpan.org/Public/Bug/Display.html?id=20265

Leave a Reply

We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

Tags: , , , , , , , , , , , , , ~ Last updated on: March 8, 2008

Copyright © 2004-2008 nixCraft. All rights reserved - TOS/Disclaimer - Privacy policy - Sitemap - Powered by Open source software.