Display IP Address Allocation Table According to Subnet Mask
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 >=
{
$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...
- Linux Calculating Subnets with ipcalc and sipcalc Utilities
- nixCraft FAQ Roundup
- Send ICMP Nasty Garbage Packets to Network Hosts With sing Utility
- Samba share permissions simplified
- Understanding Linux networking stack ~ from sockets to device drivers
Discussion on This Article:
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!
Tags: 1a, 1m, 2c, class c network subnet mask, ip subnet mask, iptab command, network address subnet mask, network ip address, network subnet mask, network subnet mask calculator, networking subnet mask, subnet addressing, subnet calculator, subnet ip address ~ Last updated on: March 8, 2008



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.”
Same here
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.
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