ipaddress 1.0.0
CRAN release: 2023-01-12
To mark the release of ipaddress 1.0.0, some breaking changes were made to improve the interface for data analysis.
Breaking changes
- Removed the
multipleargument fromip_to_hostname()andhostname_to_ip()(#83).-
ip_to_hostname()andhostname_to_ip()now always return one result per input (stored in a vector). - New
ip_to_hostname_all()andhostname_to_ip_all()return all results per input (stored in a list of vectors).
-
-
subnets()now takes vector input and outputs a list of vectors (#83). - Some arguments must now be explicitly passed using the argument name:
- The
strictargument ofip_network(). - The
explodedargument offormat.ip_address(),format.ip_network()andformat.ip_interface(). - The
replaceargument ofsample_ipv4(),sample_ipv6()andsample_network().
- The
New features
- New
country_networks()downloads IP networks registered to specific countries (#87). - Error formatting has been improved using {cli} (#86).
Minor improvements and fixes
- The
is_ipv6argument ofnetmask()andhostmask()defaults toNULL. This option prefers an IPv4 mask, but creates an IPv6 mask as a fallback. - Renamed
vignette("ipaddress-classes")tovignette("ip-data"). - Renamed
vignette("ipaddress-examples")tovignette("recipes"). - Updated the
iana_ipv4dataset. - Tests now use {testthat} 3e.
ipaddress 0.5.2
CRAN release: 2021-06-17
- The
baseargument ofip_to_integer()is removed.-
base = "dec"is still handled byip_to_integer(). -
base = "bin"is still handled by the existingip_to_binary()function. -
base = "hex"is now handled by the newip_to_hex()function.
-
-
ip_to_integer()andinteger_to_ip()now usebignum::biginteger()vectors to store IP addresses as integers. Previously, these integers were stored in a character vector (because they were beyond the range of base R numeric types).- The BH package is no longer a dependency (C++ Boost headers were a heavy dependency).
- The bignum package is now an optional dependency.
- New
ip_to_hex()andhex_to_ip()functions to encode and decode addresses as hexadecimal strings.
ipaddress 0.5.1
CRAN release: 2020-09-12
- Addition/subtraction of large integers is now much faster (#64).
-
ip_to_bytes()now returns a list of raw vectors instead of ablobobject (#65).- Result can still be converted using
blob::as_blob(). - Removes excessive blob package dependency.
- Result can still be converted using
- Refactored C++ code to reduce dependence on Asio library (#64).
- Package developers can now use
LinkingTo: ipaddresswithoutLinkingTo: AsioHeaders.
- Package developers can now use
ipaddress 0.5.0
CRAN release: 2020-08-26
This release achieves feature parity with the Python ipaddress module (#46).
New features
- Additional checks for reserved addresses/networks:
is_private(),is_reserved(),is_site_local()(#49). - New
is_global()checks if addresses or networks are not reserved (#49). - New
collapse_networks()collapses contiguous and overlapping networks (#54). - New
exclude_networks()removes networks from others (#59). - New
reverse_pointer()returns the record used by reverse DNS (#57). - New datasets:
iana_ipv4andiana_ipv6contain registries of allocated blocks (#55). - New bitwise shift operators:
%<<%and%>>%(#52). - Reorganized C++ code to expose
IpAddressVectorandIpNetworkVectorclasses to other packages (useLinkingTo: AsioHeaders, ipaddress, Rcpp). This does not affect the public R interface (#51).
Minor improvements and fixes
-
format.ip_address(),format.ip_network()andformat.ip_interface()gain anexplodedparameter to display leading zeros for IPv6 addresses (#56). -
ip_to_integer()gains abaseparameter to select between decimal, hexadecimal and binary outputs (#47). - Integer-like doubles are now accepted everywhere in place of an integer.
- Update
vignette("ipaddress-examples")to use the fuzzyjoin package (#61). - Update
vignette("ipaddress-examples")with how to randomly generate public IP addresses (#62). - Fixed comparison of
ip_address()vectors to account for machine endianness (#53). - Comparison of
ip_network()andip_interface()vectors is now consistent with the Python ipaddress module.-
ip_network(): network address compared before prefix length. -
ip_interface(): network compared before host address.
-
ipaddress 0.4.0
CRAN release: 2020-08-06
New features
- Add support for constructing
ip_network()vectors without using CIDR notation.- New
common_network()function finds the smallest network containing two addresses (#39). - New
summarize_address_range()function lists the constituent networks of an address range (#41). -
prefix_length()can now infer the prefix length from anip_address()vector of netmasks and/or hostmasks. This makes it possible to construct anip_network()vector like so: (#36)-
ip_network(ip_address("192.0.2.0"), prefix_length(ip_address("255.255.255.0"))). -
ip_network(ip_address("192.0.2.0"), prefix_length(ip_address("0.0.0.255"))).
-
- New
- New
supernet()andsubnets()functions for traversing the network hierarchy (#42). - Added
vignette("ipaddress-examples")to describe some typical usage patterns (#43).
Minor improvements and fixes
- Check for user interrupts when processing large data sets.
-
integer_to_ip()now accepts integerish doubles. - Addition/subtraction operators now accept integerish doubles.
- Addition/subtraction operators now catch missing values in 2nd argument.
-
netmask()andhostmask()now raise an error if theprefix_lengthandis_ipv6arguments are not both specified (#38). - Fix
is_within_any()to correctly catch when IPv6 addresses are in zero networks. - Rename
vignette("ipaddress")asvignette("ipaddress-classes").
ipaddress 0.3.0
CRAN release: 2020-05-12
Breaking changes
- Renamed functions for converting to and from alternative representations of IP addresses: (#30)
-
as_packed()andfrom_packed()becomeip_to_bytes()andbytes_to_ip(). -
as_binary()andfrom_binary()becomeip_to_binary()andbinary_to_ip(). -
as_hostname()andfrom_hostname()becomeip_to_hostname()andhostname_to_ip().
-
New features
- New
ip_to_integer()andinteger_to_ip()functions to encode and decode addresses as integers. Note that the integers are contained within a character vector. Please see the function documentation for an explanation (#30).
Minor improvements
- Support pretty printing in tibbles (#27).
- CIDRs aligned on forward slash separator.
- Prefix length displayed in green to increase prominence.
- Dots and colons displayed in gray to reduce prominence.
- IPv6 addresses can be automatically truncated, to fit more columns into the console width.
- Added hex logo.
- Compatible with vctrs 0.3.0 (#31, #34).
ipaddress 0.2.0
CRAN release: 2020-03-25
Classes
- Added
vignette("ipaddress")to introduce the data classes provided by ipaddress (#24). - New
ip_interface()class to simultaneously store the address and the network it is on (#15). -
ip_address()vectors now support bitwise operations (!,&,|and^). -
ip_address()vectors now support addition and subtraction of integers (#14). - Added an
ip_network()constructor that acceptsip_addressand prefix length vectors (#9).
Address space
- New
max_prefix_length()function to get the size of the address space (32-bit for IPv4 and 128-bit for IPv6). - New functions to check if addresses or networks are reserved for special use:
is_multicast(),is_unspecified(),is_loopback(),is_link_local(). - New functions for IPv6 transition mechanisms: (#16)
Network membership
- New functions about the size of a network:
num_addresses(),network_address()andbroadcast_address(). - New
overlaps()function to check for any overlap between networks. -
netmask()andhostmask()are now generics, so they can now accept:- an
ip_network()vector (existing behavior). - an
ip_interface()vector. - a vector of prefix lengths.
- an
Generating addresses
- New
seq.ip_network()andhosts()functions to list all addresses within a network. - New functions to randomly sample addresses:
sample_ipv4(),sample_ipv6()andsample_network()(#11, #19).
Miscellaneous improvements
- Improved input validation warnings. They now report the row number involved and no longer mention internal function names.
- Many functions now support tidy vector recyling.
- Performance improvements.
ipaddress 0.1.2
CRAN release: 2020-03-10
- Fixed decoding bug which meant that some IP addresses were interpreted as
NA.- In IPv4, this affected
0.0.0.128. - In IPv6, this affected any address in the
0:80::/32network.
- In IPv4, this affected
-
is_subnet()andis_supernet()now check the prefix length, to ensure they are a true subnet or supernet.
ipaddress 0.1.0
CRAN release: 2020-03-05
First CRAN release
- Added
ip_address()andip_network()classes.- Full support for both IPv4 and IPv6 address spaces.
- Efficiently store data in their native representations (i.e. a sequence of bits).
- Classes based on
vctrspackage for full tidyverse compatibility.
- Added functions to determine network membership.
-
is_within()andis_within_any()check if addresses are within networks. -
is_subnet()andis_supernet()check if networks are within other networks.
-
- Added convenience functions to extract IP metadata.
-
is_ipv4()andis_ipv6()classify the address space. -
prefix_length(),netmask()andhostmask()yield different representations of the network mask.
-
- Calculations performed in C++ (using
RcppandAsioHeaderspackages) for improved performance.