The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
0.31  2022-11-28

- Fixed handling of the ::0/128 subnet. This is a special subnet(/address)
  that is called the "unspecified address". It is not public or
  routable. Reported by Dan Sherry. GH #13.


0.30  2021-03-29

- Added some more details to the security docs to include mentions of the
  is_*_ip() functions too. See https://nvd.nist.gov/vuln/detail/CVE-2021-29662
  for details on the potential security issues with these functions.


0.29  2021-03-29

- Fixed a typo in the POD.


0.28  2021-03-29

- Added docs about the security implications of using functions like
  is_private_ip4() without _also_ calling is_ipv4() first. This was inspired
  by a recent issue with the Node netmask package. See
  https://sick.codes/universal-netmask-npm-package-used-by-270000-projects-vulnerable-to-octal-input-data-server-side-request-forgery-remote-file-inclusion-local-file-inclusion-and-more-cve-2021-28918/
  for a write up.


0.27  2016-11-17

- If your version of Socket.pm provides a sane inet_pton, most of the is_*_ip
  subroutines will use a much faster implementation. is_private_ipv4 and
  is_private_ipv4 are approximately 16x faster. is_private_ipv6 and
  is_public_ipv6 are about 3-4x faster.  Implemented by Greg Oschwald. GitHub
  PR #8.


0.26  2016-05-31

- Fixed issue where invalid IPv6 strings such as ::0000000 would be marked as
  valid by is_ipv6() when using the faster inet_pton() code path (GitHub
  #6). Fixed by Greg Oschwald. GitHub PR #7.


0.25  2016-02-01

- Added is_ip(), is_public_ip(), is_private_ip(), is_linklocal_ip(),
  is_loopback_ip(), and is_multicast_ip(). These are similar to the existing
  subroutines but are IP address family agnostic. Implemented by Greg
  Oschwald. GitHub PR #5.

- The subroutines included in this module now always return a scalar when
  called in list context. Previously they would generally return an empty list
  when validation failed. Implemented by Greg Oschwald. GitHub PR #5.


0.24     2014-08-28

- A string with a null byte (\0) would be considered valid if the internal
  implementation used inet_pton() to validate IP addresses. Fixed by Greg
  Oschwald. GitHub PR #4.


0.23     2014-03-09

- Fixed is_ipv6 to correctly fail for a string like ":abcd" on platforms where
  inet_pton() isn't usable. Reported by Brian Bickerton. RT #93622.

- As a side effect of the above, the code to check IPv6 addresses when
  inet_pton() isn't usable is about 7-8x times faster now.


0.22     2013-12-05

- Fixed some small doc typo/formatting issues.


0.21     2013-12-05

- The 198.51.100.0/24 and 203.0.113.0/24 networks were mistakenly put in the
  unroutable list, rather than the testnet list. This has been fixed. Note
  that if you've just been using is_public_ipv4 in your code, there are no
  changes in the results.

- Added the 6to4 anycast network - 192.88.99.0/24. Addresses in this network
  are not considered public and there is now a new is_anycast_ipv4()
  subroutine exported.

- Added a number of missing reserved IPv6 networks. These are the IPv4-mapped
  block (::ffff:0:0/96), the discard prefix (100::/64), TEREDO (2001::/32),
  ORCHID (2001:10::/28), and documentation (2001:db8::/32) IPv6
  networks. There are now is_ipv4_mapped_ipv6(), is_discard_ipv6(),
  is_teredo_ipv6(), is_orchid_ipv6(), and is_documentation_ipv6() subs. Note
  that the TEREDO and ORCHID networks are both subnets of the larger special
  network, and as such were already excluded by is_public_ipv6(), though
  arguably the TEREDO addresses _should_ be considered public.

- Rewrote most of the docs to greatly reduce the amount of text and to improve
  the ToC on MetaCPAN and search.cpan.org.


0.20     2013-07-13

- Add docs for the is_public_ipv6() sub that was added in 0.15. Reported by
  Greg Oschwald.


0.19     2013-03-13

- Fix a deprecation warning that showed up with Perl 5.10.1, but not with
  newer Perls. Reported by Iosif Fettich.


0.18     2013-02-19

- Versions 0.15 - 0.17 still had $VERSION set to 0.14. Reported by Greg
  Oschwald.


0.17     2013-02-19

- Previous releases broke is_innet_ipv4 for many network formats. This support
  has been restored, but only the "a.b.c.d/nn" CIDR form will be documented
  going forward. All other forms are deprecated, and support for them will be
  removed in a future release.


0.16     2013-02-06

- Made the check for Socket.pm stricter. On some platforms it exports an
  inet_pton() that just dies when called. On other platforms it accepts
  invalid input like '016.17.184.1' or '2067::1:'.


0.15     2013-02-04

- If your installed version of Socket.pm provides an inet_pton subroutine we
  use that to do validation. This is about 5x faster for IPv4 addresses and 20
  times faster for IPv6.

- Various unroutable networks are now recognized as non-public
  addresses. Based on a patch by Greg Oschwald. (Bug#83081).

- Added is_unroutable_ipv4 exported sub.

- Added is_public_ipv6, is_private_ipv6, is_loopback_ipv6, is_multicast_ipv6,
  and is_special_ipv6 subroutines.

- Fixed the is_linklocal_ipv6 method. It didn't recognize the full link-local
  range properly.

- Fixed bug where '::' was not recognized as a valid IPv6 address. (Bug#81700)

- Fixed bug where ipv6 related subroutines were not untainting their return
  value.


0.14     2011-01-06

- Cleaned up test suite (no code changes)


0.13     2011-01-06

- Fixed unshorted ipv6 check when ipv4 address is trailing. (Bug#64532) Thanks
  to Milan Matlak <milan.matlak@sde.cz> for patch


0.12     2010-12-29

- Fixed parsing of trailing :: (such as 2001::), as that is valid This address
  bug#58991 - Thanks to Alan.Chester@tekelec.com for identifying the problem.

- Also fixed incorrectly treating 2001::1: as a valid IPv6 address when it
  isn't


0.11     2010-03-01

- Added support for is_innet_ipv4 - simple check to see if IP is in network.
  Thanks to "Bartłomiej Syryjczyk" <bartlomiej@syryjczyk.name> for suggesting
  the function


0.10     2009-06-04

- Added initial support for is_ipv6.  ipv6 is new territory for me, so please
  send in your bug reports to me so that I can make sure I get it done
  correctly.


0.09     2009-01-30

- Removed AUTOLOAD


0.08     2007-12-06

- Fixed is_ipv4 to treat leading 0's in an ip as invalid, i.e.: 017.1.1.1 is
  invalid.  Thanks to Joshua D. Abraham <jabra@spl0it.org> for submitting the
  patch


0.07     2007-05-17

- Added POD testing, and minor cleanup related to that


0.06     2007-05-16

- Updated contact information to be neil@neely.cx, this is a purely cosmetic change


0.05     2007-03-06

- Added is_multicast_ipv4 and is_linklocal_ipv4.  Thanks to Matt Dainty
  <matt@bodgit-n-scarper.com> for doing all the work


0.04     2005-04-28

- Removed perl version dependency in Makefile.PL


0.03     2005-03-04

- Minor fix to pod markup


0.02     2005-03-04

- Added is_private_ipv4 is_loopback_ipv4 is_testnet_ipv4 is_public_ipv4


0.01     2005-03-03

- Original version; created by h2xs 1.23 with options -AXn Data::Validate::IP