Changelog
Source:NEWS.md
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
multiple
argument 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
strict
argument ofip_network()
. - The
exploded
argument offormat.ip_address()
,format.ip_network()
andformat.ip_interface()
. - The
replace
argument 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_ipv6
argument 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_ipv4
dataset. - Tests now use {testthat} 3e.
ipaddress 0.5.2
CRAN release: 2021-06-17
- The
base
argument 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 ablob
object (#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: ipaddress
withoutLinkingTo: 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_ipv4
andiana_ipv6
contain registries of allocated blocks (#55). - New bitwise shift operators:
%<<%
and%>>%
(#52). - Reorganized C++ code to expose
IpAddressVector
andIpNetworkVector
classes 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 anexploded
parameter to display leading zeros for IPv6 addresses (#56). -
ip_to_integer()
gains abase
parameter 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_length
andis_ipv6
arguments 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_address
and 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::/32
network.
- 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
vctrs
package 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
Rcpp
andAsioHeaders
packages) for improved performance.