While looking for a way to convert a range of IP addresses to CIDR notation, I came across a really neat Perl module on CPAN. It is called Net::CIDR.
Among other thigs, the module converts IP addressed given as a range such as 216.117.192.0 - 216.117.223.255 into CIDR notation:
216.117.192.0/19
It even works if the address range is not a single block (quite common with the whois servers run by spam friendly ISP's). For example 216.117.192.0 - 216.117.254.255 converts to:
216.117.192.0/19
216.117.224.0/20
216.117.240.0/21
216.117.248.0/22
216.117.252.0/23
216.117.254.0/24
#!/usr/bin/perl
use strict;
use warnings;
use Net::CIDR;
# snarf lines from STDIN
my @rlist = ();
foreach my $line (<STDIN>) {
chomp $line;
next unless $line;
push @rlist,$line;
}
# convert to CIDR notation
foreach my $line (Net::CIDR::range2cidr(@rlist)) {
print $line . "\n";
}
If you want the output sorted by IP address pipe the output from the above program through the sort command:


