`iptools` is a set of tools for working with IP addresses. Not just work, but work _fast_. It’s backed by `Rcpp` and now uses the [AsioHeaders](http://dirk.eddelbuettel.com/blog/2016/01/07/#asioheaders_1.11.0-1) package by Dirk Eddelbuettel, which means it no longer needs to _link_ against the monolithic Boost libraries and *works on Windows*!
What can you do with it? One thing you can do is take a vector of domain names and turn them into IP addresses:
library(iptools) hostname_to_ip(c("rud.is", "dds.ec", "ironholds.org", "google.com")) ## [[1]] ## [1] "104.236.112.222" ## ## [[2]] ## [1] "162.243.111.4" ## ## [[3]] ## [1] "104.131.2.226" ## ## [[4]] ## [1] "2607:f8b0:400b:80a::100e" "74.125.226.101" "74.125.226.102" ## [4] "74.125.226.100" "74.125.226.96" "74.125.226.104" ## [7] "74.125.226.99" "74.125.226.103" "74.125.226.105" ## [10] "74.125.226.98" "74.125.226.97" "74.125.226.110"
That means you can pump a bunch of domain names from logs into `iptools` and get current IP address allocations out for them.
You can also do the reverse:
library(magrittr) library(purrr) library(iptools) hostname_to_ip(c("rud.is", "dds.ec", "ironholds.org", "google.com")) %>% flatten_chr() %>% ip_to_hostname() %>% flatten_chr() ## [1] "104.236.112.222" "dds.ec" "104.131.2.226" ## [4] "yyz08s13-in-x0e.1e100.net" "yyz08s13-in-f5.1e100.net" "yyz08s13-in-f6.1e100.net" ## [7] "yyz08s13-in-f4.1e100.net" "yyz08s13-in-f0.1e100.net" "yyz08s13-in-f8.1e100.net" ## [10] "yyz08s13-in-f3.1e100.net" "yyz08s13-in-f7.1e100.net" "yyz08s13-in-f9.1e100.net" ## [13] "yyz08s13-in-f2.1e100.net" "yyz08s13-in-f1.1e100.net" "yyz08s13-in-f14.1e100.net"
Notice that it handled IPv6 addresses and also cases where no reverse mapping existed for an IP address.
You can convert IPv4 addresses to and from long integer format (the 4 octet version of IPv4 addresses is primarily to make them easier for humans to grok), generate random IP addresses for testing, test IP addresses for validity and type and also reference data sets with registered assignments (so you can see allocated IP groups). Plus, it includes `xff_extract()` which can help identify an actual IP address (helpful when connections come from behind proxies).
We can’t thank Dirk enough for cranking out `AsioHeaders` since it means there will be many more network/”cyber” packages coming for R and available on every platform.
You can find `iptools` version `0.3.0` [on CRAN](https://cran.r-project.org/web/packages/iptools/) now (it may take your mirror a bit to catch up), grab the source [release](https://github.com/hrbrmstr/iptools/releases/tag/v0.3.0) on GitHub or check out the [repo](https://github.com/hrbrmstr/iptools/), poke around, submit issues and/or contribute!
Isn’t it great when an R package can help you with resolutions in the new year?
One Trackback/Pingback
[…] article was first published on R – rud.is, and kindly contributed to […]