Learn R Programming

ipaddress

ipaddress provides data classes and functions for working with IP addresses and networks. Its interface is inspired by the Python ipaddress module.

Here are some key features:

  • Functions to generate and analyze IP data
  • Full support for both IPv4 and IPv6 address spaces
  • Data stored in native bit format for reduced memory footprint
  • Calculations written in C++ for fast performance
  • Compatible with the tidyverse

For data visualization of IP addresses and networks, check out the ggip package.

Installation

Install the released version from CRAN with:

install.packages("ipaddress")

Install the development version from GitHub with:

# install.packages("remotes")
remotes::install_github("davidchall/ipaddress")

Usage

Use ip_address() and ip_network() to create standalone vectors or data frame columns.

library(tibble)
library(ipaddress)

address <- ip_address(c("192.168.0.1", "2001:db8::8a2e:370:7334"))
network <- ip_network(c("192.168.100.0/22", "2001:db8::/80"))

tibble(address, network)
#> # A tibble: 2 × 2
#>                   address          network
#>                 <ip_addr>       <ip_netwk>
#> 1             192.168.0.1 192.168.100.0/22
#> 2 2001:db8::8a2e:370:7334    2001:db8::/80

It looks like we’ve simply stored the character vector, but we’ve actually validated each input and stored its native bit representation. When the vector is displayed, the print() method formats each value back to the human-readable character representation. There are two main advantages to storing IP data in their native bit representation:

  • The data occupy less space in memory (up to 80% reduction),
  • Subsequent use is much faster, since we don’t repeatedly parse the character vector.

Read vignette("ip-data") to learn more about these vector classes. For a demonstration of common recipes using ipaddress vectors and functions, see vignette("recipes").

Related work

  • iptools – A well established R package for working with IP addresses and networks. Unfortunately IPv6 support is severely limited. Also, addresses and networks are stored as character vectors, so they must be parsed to their native bit representation for every operation. It served as an excellent guide and motivation for ipaddress.
  • cyberpandas – A Python package for using IP addresses in a pandas DataFrame. This offers full support for IPv6 and stores addresses in the native bit representation. However, most “interesting” operations must deserialize each address to a Python ipaddress object, which is slow. It also doesn’t support IP networks.

Please note that the ipaddress project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

Copy Link

Version

Install

install.packages('ipaddress')

Monthly Downloads

412

Version

1.0.2

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Last Published

December 1st, 2023

Functions in ipaddress (1.0.2)

iana_ipv6

IPv6 address space allocation
ip_address

Vector of IP addresses
ip_to_hex

Represent address as hexadecimal
ip_to_hostname

Translate address to/from hostname
reverse_pointer

Reverse DNS pointer
exclude_networks

Remove networks from others
sample

Sample random addresses
ip_interface

Vector of IP interfaces
ip_network

Vector of IP networks
iana_ipv4

IPv4 address space allocation
ip_operators

Operators for IP addresses
ipaddress-vctrs

Internal vctrs methods
ip_test

Test for IP vector
ipv6-transition

IPv6 transition mechanisms
sequence

List addresses within a network
common_network

Find the common network of two addresses
country_networks

Country-level IP networks
summarize_address_range

List constituent networks of an address range
ip_cast

Cast to IP vector
ip_format

Format IP vector
network_in_network

Network membership of other networks
network_size

Network size
ip_to_integer

Represent address as integer
address_in_network

Network membership of addresses
collapse_networks

Collapse contiguous and overlapping networks
ipaddress-package

ipaddress: Data Analysis for IP Addresses and Networks
is_ipv6

Version of the address space
is_reserved

Reserved addresses
ip_to_binary

Represent address as binary
ip_to_bytes

Represent address as raw bytes
max_prefix_length

Size of the address space
netmask

Network mask
traverse_hierarchy

Traverse the network hierarchy