Net::IPAM::IP - A library for reading, formatting, sorting and converting IP-addresses.
use Net::IPAM::IP; # parse and normalize $ip1 = Net::IPAM::IP->new('1.2.3.4') // die 'wrong format,'; $ip2 = Net::IPAM::IP->new('fe80::1') // die 'wrong format,'; $ip3 = $ip2->incr // die 'overflow,'; say $ip1; # 1.2.3.4 say $ip2; # fe80::1 say $ip3; # fe80::2 say $ip1->cmp($ip2); # -1 say $ip2->expand; # fe80:0000:0000:0000:0000:0000:0000:0001 say $ip2->reverse; # 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f $ip = Net::IPAM::IP->new_from_bytes(pack('C4', 192, 168, 0, 1)); # 192.168.0.1 $ip = Net::IPAM::IP->new_from_bytes(pack('N4', 0x20010db8, 0, 0, 1,)); # 2001:db8::1
Net::IPAM::IP implements the following methods:
Parse the input string as IPv4/IPv6 address and returns the IP address object.
IPv4-mapped-IPv6 addresses are normalized and sorted as IPv4 addresses.
::ffff:1.2.3.4 => 1.2.3.4
Returns undef on illegal input.
Just a shallow copy
$ip = Net::IPAM::IP->new_from_bytes("\x0a\x00\x00\x01")
Parse the input as packed IPv4/IPv6/IPv4-mapped-IPv6 address and returns the IP address object.
Croaks on illegal input.
$ip = Net::IPAM::IP->new('fe80::'); $bytes = $ip->bytes; # "\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" $ip = Net::IPAM::IP->new('10.0.0.1'); $bytes = $ip->bytes; # "\x0a\x00\x00\x01"
Returns the packed IP address as byte-string. It's the opposite to new_from_bytes()
Compare IP objects, returns -1, 0, +1
$this->cmp($other) @sorted_ips = sort { $a->cmp($b) } @unsorted_ips;
Fast bytewise lexical comparison of the binary representation in network byte order.
IPv4 addresses are always treated as smaller than IPv6 addresses.
$v = Net::IPAM::IP->new('fe80::1')->version # 6
Returns 4 or 6.
Returns the input string in canonical form.
lower case hexadecimal characters zero compression remove leading zeros say Net::IPAM::IP->new('Fe80::0001')->to_string; # fe80::1
Stringification is overloaded with to_string
to_string
my $ip = Net::IPAM::IP->new('Fe80::0001') // die 'wrong format,';; say $ip; # fe80::1
Returns the next IP address, returns undef on overflow.
$next_ip = Net::IPAM::IP->new('fe80::1')->incr // die 'overflow,'; say $next_ip; # fe80::2
Expand IP address into canonical form, useful for grep, aligned output and lexical sort.
Net::IPAM::IP->new('1.2.3.4')->expand; # '001.002.003.004' Net::IPAM::IP->new('fe80::1')->expand; # 'fe80:0000:0000:0000:0000:0000:0000:0001'
Reverse IP address, needed for PTR entries in DNS zone files.
Net::IPAM::IP->new('fe80::1')->reverse; # '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f' Net::IPAM::IP->new('1.2.3.4')->reverse; # '4.3.2.1'
Net::IPAM::IP implements the following functions;
Increment packed IPv4 or IPv6 address, no need for Math::BigInt. Needed by methods in Net::IPAM::Block.
Karl Gaissmaier, <karl.gaissmaier(at)uni-ulm.de>
<karl.gaissmaier(at)uni-ulm.de>
Please report any bugs or feature requests to bug-net-ipam-ip at rt.cpan.org, or through the web interface at https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net-IPAM-IP. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
bug-net-ipam-ip at rt.cpan.org
You can find documentation for this module with the perldoc command.
perldoc Net::IPAM::IP
You can also look for information at:
on github
TODO
Net::IPAM::Block Net::IPAM::Tree
This software is copyright (c) 2020 by Karl Gaissmaier.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Net::IPAM::IP, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Net::IPAM::IP
CPAN shell
perl -MCPAN -e shell install Net::IPAM::IP
For more information on module installation, please visit the detailed CPAN module installation guide.