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:
For data visualization of IP addresses and networks, check out the ggip package.
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")
Use ip_address() and ip_network() vectors either standalone or as columns in a data frame.
library(tidyverse) 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