Hash: SHA1

NetAddr::IP - Manage IP addresses and subnets

This distribution  is designed as a  help for managing  (ranges of) IP
addresses. It includes efficient implementations for most common tasks
done  to subnets or  ranges of  IP addresses,  namely verifying  if an
address is within a subnet, comparing, looping, splitting subnets into
longer prefixes, compacting addresses to the shortest prefixes, etc.

The general idea, is that you should be able to do 

  use NetAddr::IP;

  my $ip = new NetAddr::IP $something_vaguely_resembling_a_subnet;

and as long  as $something_vaguely_resembling_a_subnet holds something
that describes  a subnet unambiguously,  you should receive  an object
representing such  subnet. Currently this includes  various flavors of
CIDR notation, traditional notation in one, two, three and four dotted
octets, hexadecimal, range and subnet notations as well as other, less
used formats. IPv6 addresses are also supported.

Overloading is also  used to ease printing and  doing simple aritmetic
and comparisons on  the IP addresses. For instance,  you can do things

  use NetAddr::IP;

  for (my $ip = new NetAddr::IP '';
       $ip < $ip->broadcast;
       $ip ++) 
    print "$ip\n";

This will print out something like...
(and so on...)

...which  is  quite  useful   for  generating  config  files  and  the
such. This works even for huge ranges of IP addresses.

This module can  be installed without compiling any  XS code, although
some  parts are available  as XS  for speed.  It has  been extensively
tested in a variety of platforms.  An extensive test suite is provided
with the module to verify correct results.

The lastest version of this module should be preferred. You can obtain
it on the  nearest CPAN mirror. Please find a mirror  near you to help
spread the load.

Version 4 works with earlier versions of perl at least back to 5.00503 
however overloaded iterative arrays and binary bit strings 0b101010101
are not supported in versions of perl prior to 5.6.0.

To use the old behavior for ->nth($index) and ->num():

  use NetAddr::IP::Lite qw(:old_nth);

  old behavior:
  NetAddr::IP->new('10/32')->nth(0) == undef
  NetAddr::IP->new('10/32')->nth(1) == undef
  NetAddr::IP->new('10/31')->nth(0) == undef  
  NetAddr::IP->new('10/31')->nth(1) ==
  NetAddr::IP->new('10/30')->nth(0) == undef  
  NetAddr::IP->new('10/30')->nth(1) ==
  NetAddr::IP->new('10/30')->nth(2) ==
  NetAddr::IP->new('10/30')->nth(3) ==

Note that  in each case, the  broadcast address is  represented in the
output set and that the 'zero'th index is alway undef.

  new behavior:
  NetAddr::IP->new('10/32')->nth(0)  ==
  NetAddr::IP->new('10.1/32'->nth(0) ==
  NetAddr::IP->new('10/31')->nth(0)  == undef  
  NetAddr::IP->new('10/31')->nth(1)  == undef
  NetAddr::IP->new('10/30')->nth(0) ==
  NetAddr::IP->new('10/30')->nth(1) ==
  NetAddr::IP->new('10/30')->nth(2) == undef

Note that a /32  net always has 1 usable address while  a /31 has none
since  it   has  a  network   and  broadcast  address,  but   no  host
addresses.  The  first  index  (0)  returns  the  address  immediately
following the network address.

To install, follow the standard CPAN recipe of:

$ perl Makefile.PL
$ make
$ make test

If all tests pass, then do

$ make install

NetAddr::IP depends  on NetAddr::IP::Util which  utilizes perl_xs.  If
you do not  have a C compiler  on your system or you  would prefer the
slower PURE PERL version for some obtuse reason then build as follows:

$ perl Makefile.PL -noxs
$ make
$ make test

$ make install

Tests related to address compaction could be too resource-intensive in
some environments. If  this is your case, you can  skip those tests by
setting an environment variable  before make'ing test.  In a bash-like
shell, you could use the following example:

$ make test

The  module's  documentation  can   be  accessed  through  POD.  After
installing the module, you can do

$ perldoc NetAddr::IP
$ perldoc NetAddr::IP::Lite
$ perldoc NetAddr::IP::Util
$ perldoc NetAddr::IP::UtilPP

to access the  documentation. There is also a tutorial  in HTML at the
following URIs

If  you want to  thank me  for this  module, please  go look  at those
tutorials and if you see banners there, click on a few :)

Bug  reports  are  welcome. Please  do  not  forget  to tell  me  what
version/platform are you running this code on. Providing a small piece
of  code that  shows the  bug helps  me a  lot in  sorting it  out and
possibly in writting more tests for the distribution.

Also, this code is intended to be strict and -w safe, so please report
cases where warnings are generated so that I can fix them.

Report your  bugs to  me ( or  through the  CPAN RT
interface at


If  you consider this  a valuable  contribution, there  is a  web page
where you can express your gratitude. Please see (English) (Spanish)


I  have  no control  on  the machanisms  involved  in  the storage  or
transport  of this distribution.  This means  that I  cannot guarantee
that  the distribution  you have  in your  hands is  indeed,  the same
distribution I packed and uploaded.

Starting with v3.14_1, along the  distribution file, you should have a
file  with  the  extension  ".asc".  This  contains  a  GPG  "detached
signature"  that  makes  it  impossible  for  anybody  to  alter  this
distribution.  If security  is of  any concern  to you,  by  all means
verify  the signature  of  this file  and  contact the  author if  any
discrepancy is detected.

You can find more information about this at the following URL


This  information includes  the correct  keys,  fingerprints, etc.Note
that this README file should also be signed.

Additionally,  I am  also  using Module::Signature  to  ease with  the
signature  verification. Module::Signature can  automatically retrieve
the  PGP  keys from  public  keyservers,  as  well as  verifying  each
individual file.


This software is (c) Luis E. Muñoz and Michael A. Robinton.  It can be
used under the terms of the perl artistic license provided that proper
credit for the work of the authors is  preserved in  the form  of this 
copyright  notice and license for this module.

No warranty of any kind is  expressed or implied. This code might make
your computer go up in a puff of black smoke.

Version: GnuPG v1.2.1 (Darwin)