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.


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


Or you can install the development version from GitHub:

# install.packages("remotes")


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


  address = ip_address(c("", "2001:db8::8a2e:370:7334")),
  network = ip_network(c("", "2001:db8::/80"))
#> # A tibble: 2 x 2
#>                   address          network
#>                 <ip_addr>       <ip_netwk>
#> 1   
#> 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("", ""))
#> Warning: Problem on row 2:
#> <ip_address[2]>
#> [1] <NA>

A variety of functions are provided to enable common tasks.

tibble(network = ip_network(c("", "2001:db8::/80"))) %>%
    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 FALSE
#> 2    2001:db8::/80    2001:db8:: 2001:db8::ffff:ffff:ffff TRUE