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 of the features:

  • Functions for generation and analysis of IP data
  • Full support for both IPv4 and IPv6 address spaces
  • Memory footprint: data stored in native format
  • Performance: calculations performed in C++
  • Compatible with the tidyverse

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

Installation

You can install the released version of ipaddress from CRAN with:

install.packages("ipaddress")

Or you can install the development version from GitHub:

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

Usage

Use ip_address() and ip_network() vectors either standalone or as columns in a data frame.

library(dplyr)
library(ipaddress)

tibble(
  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"))
)
#> # A tibble: 2 x 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

Input character vectors are validated as they are parsed. Invalid inputs raise a warning and are replaced with NA.

ip_address(c("255.255.255.255", "255.255.255.256"))
#> Warning: Problem on row 2: 255.255.255.256
#> <ip_address[2]>
#> [1] 255.255.255.255 <NA>

A variety of functions are provided to enable common tasks.

tibble(network = ip_network(c("192.168.100.0/22", "2001:db8::/80"))) %>%
  mutate(
    first = network_address(network),
    last = broadcast_address(network),
    ipv6 = is_ipv6(network)
  )
#> # A tibble: 2 x 4
#>            network         first                     last ipv6 
#>         <ip_netwk>     <ip_addr>                <ip_addr> <lgl>
#> 1 192.168.100.0/22 192.168.100.0          192.168.103.255 FALSE
#> 2    2001:db8::/80    2001:db8:: 2001:db8::ffff:ffff:ffff TRUE