Tools to work with the Google DNS over HTTPS API in R
R
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
R
docs
man
tests
.Rbuildignore
.gitignore
.travis.yml
CONDUCT.md
DESCRIPTION
LICENSE
NAMESPACE
NEWS.md
README.Rmd
README.md
cran-comments.md
gdns.Rproj

README.md

Travis-CI Build Status

gdns : Tools to work with the Google DNS over HTTPS API

Traditional DNS queries and responses are sent over UDP or TCP without encryption. This is vulnerable to eavesdropping and spoofing (including DNS-based Internet filtering). Responses from recursive resolvers to clients are the most vulnerable to undesired or malicious changes, while communications between recursive resolvers and authoritative nameservers often incorporate additional protection.

To address this problem, Google Public DNS offers DNS resolution over an encrypted HTTPS connection. DNS-over-HTTPS greatly enhances privacy and security between a client and a recursive resolver, and complements DNSSEC to provide end-to-end authenticated DNS lookups.

More info at https://developers.google.com/speed/public-dns/docs/dns-over-https.

The following functions are implemented:

  • bulk_query: Vectorized query, returning only answers in a data frame
  • has_spf: Test for whether a DNS TXT record is an SPF record
  • is_hard_fail: SPF “all” type test
  • is_soft_fail: SPF “all” type test
  • passes_all: SPF “all” type test
  • query: Perform DNS over HTTPS queries using Google
  • spf_exists: SPF field extraction functions
  • spf_includes: SPF field extraction functions
  • spf_ipv4s: SPF field extraction functions
  • spf_ipv6s: SPF field extraction functions
  • spf_ptrs: SPF field extraction functions
  • split_spf: Split out all SPF records in a domain’s TXT record

Installation

devtools::install_github("hrbrmstr/gdns")

Usage

library(gdns)

# current verison
packageVersion("gdns")
#> [1] '0.2.1'

query("rud.is")
#> $Status
#> [1] 0
#> 
#> $TC
#> [1] FALSE
#> 
#> $RD
#> [1] TRUE
#> 
#> $RA
#> [1] TRUE
#> 
#> $AD
#> [1] FALSE
#> 
#> $CD
#> [1] FALSE
#> 
#> $Question
#>      name type
#> 1 rud.is.    1
#> 
#> $Answer
#>      name type TTL            data
#> 1 rud.is.    1 277 104.236.112.222
#> 
#> $Additional
#> list()
#> 
#> $edns_client_subnet
#> [1] "0.0.0.0/0"

query("example.com", "255") # "ANY" query
#> $Status
#> [1] 0
#> 
#> $TC
#> [1] FALSE
#> 
#> $RD
#> [1] TRUE
#> 
#> $RA
#> [1] TRUE
#> 
#> $AD
#> [1] TRUE
#> 
#> $CD
#> [1] FALSE
#> 
#> $Question
#>           name type
#> 1 example.com.  255
#> 
#> $Answer
#>            name type   TTL
#> 1  example.com.   46 21548
#> 2  example.com.   46 21548
#> 3  example.com.   46  3548
#> 4  example.com.   46     8
#> 5  example.com.   46 21548
#> 6  example.com.   46  3548
#> 7  example.com.   46  3548
#> 8  example.com.   46  3548
#> 9  example.com.   47  3548
#> 10 example.com.    2 21548
#> 11 example.com.    2 21548
#> 12 example.com.   28 21548
#> 13 example.com.    1 21548
#> 14 example.com.   16     8
#> 15 example.com.   16     8
#> 16 example.com.   48  3548
#> 17 example.com.   48  3548
#> 18 example.com.   48  3548
#> 19 example.com.   48  3548
#> 20 example.com.    6  3548
#>                                                                                                                                                                                                                                                                                                                                                                                                                 data
#> 1                                                                                                                                                                                   a 8 2 86400 1530064725 1528271786 4354 example.com. gpgx3XIhF4XZg5Nw0eo7TmCD1zfKX9YtMq9PuSh3eAc4fJrvyS/VWy2bz/KYhgiXQe6PvtOLZbgTT2O9knkHIlAsmnznEowSrgWYaCkkkNnoC8Ii1Ikg87PCZ7FffTposk/4HRG6yXZlo9+++YZAfAC0cc9FFYpQXqxVLf9/aDQ=
#> 2                                                                                                                                                                                  ns 8 2 86400 1530070167 1528286186 4354 example.com. tVZnWX3VxO+XqrDS76S6RpLYvGluZIQkai0aWx3pzjjhqi+qKO7WtjcIYmOgehBB2t3TVC9cv1rhb21SDBZPNtgtpWAR/W3hPK1FA4AhDW3tDwk0vZ8VnxRS6YZRdubY5xx8f+88auYUZNauK3SsAcKj4k9IaeMLinzpie0ydKk=
#> 3                                                                                                                                                                                  soa 8 2 3600 1530144931 1528300586 4354 example.com. oDz3EMYugQZ5zJV2Wwr76heKzbOB8cDgol+HD0DTPPNkBHkU33thZI3kwtD/KE7YFbwlD86is5Qgy4sVOToEcxs6Th2+bxkwkSDbnNCfpqXg9FP2nknfsYdN8UHIOcsbjo8pAEQrwbOBnRhkfgh+B2jXCeR8wcYIDtlfyjIG5dw=
#> 4                                                                                                                                                                                    txt 8 2 60 1530100194 1528250186 4354 example.com. PRVGxCX8Sghw9xQv+ITTpIHbpku543BNEVSA0LZVIZ2p5r3kPb4vlID/jSzFTOhgLhdkB0OAMG3dvWxNXT3fOBiv8c/UZHdwjJdneLeoHILiAa4Y3HSC+t4kcs+9qRFzj4EQgXwr0zWLDoZTa9bkhoVdaC8q+oL+TyjiwgG6RXs=
#> 5                                                                                                                                                                                aaaa 8 2 86400 1528834805 1526975786 4354 example.com. lRAUeTu/Wr7mobPHuh29z66cqqnCQXvUcSWYNsrdJvWIUaaGNUtz800bQQuZah3tZbJeSbDV+LivN8pFYrTPR9AVyTi1uD7x8qH+3MckgKezJ199e1twfbpl0O44zSFlrI7SxEaWhTnUGM2xafyH0HZUr1Eg/5nxDFlmaVfxet8=
#> 6                                                                                                                                                                                 nsec 8 2 3600 1530145868 1528300586 4354 example.com. NV0BbCZT7yXFnrJhEV1atS0QBbkDmojtUw9PIxDOUJzEZtWql5qJ5iMJl2z8ghmRwurnRAskBOZaT1jstyf/X8wBS8T05uc6KgfiFdoeseIWfTd9+9y6E9ESHmsSLDyHlbex6k3XAb5c4GWSyZ058JpSUyQbpnTC0fxEONxiFT4=
#> 7  dnskey 8 2 3600 1530072436 1528278986 31406 example.com. exstuS89vtBrpvN+6XK49NWMrQmUoHJAAMzLMCi5w3xUczvo9hQWi3yfDVk7Rdtv61IFEFRTIVVCoM0kpWmgp1NwOPKNSUxg3OVO5++PGoCE7hI8fhW/xdiOUC1dHHk/zuWRoriERykgNvo6yzegBmXbOyf7WCh1csoGuk+RmIWykngZw9wCX+qjdO1G8y8DMmwzEzDc3fBN9v2at3lo+VK/uhR4Tu6rr4rxkYqqgz02TIkHr14GsCa4hlf8/s2UhaWKil5ja51HgFsR2fLHRwZ1x1toejaxMekJvVcarhNYodU83q8qZ0Yoa8GIKpdS70chj4ZrLiUkBhV2KEtytg==
#> 8  dnskey 8 2 3600 1530072436 1528278986 45620 example.com. Kd2iq2xmcg5GJmNOQiHjZKDKHH+MyDagSjXuTJKiJFXSpgMzZUl9Gnr+LsDTiLaddotsBo3OXQODZDlIB5jlI7/hkt/kYOb8d1ns+hd5jmTyFowhOiQAxpWUlZkvXvVQ5gAnefxGCx78/4JtFnTMGADiAYEIMXZm+qtjn9/YJKtkgmgutxcVjTDAl7zVdvN+uyR5g/f2Rm5x1aWLIfmAtg0Nv5xFKZTduPse8PrKsGHC3uezWRshbOYugOxp/Ui6Ru6PNBaeUBGuKwQw2XcB9H65PE4wj14mcCcQk5wTL8VfeaW6WQ6y+dgtwMGoUCnF2Eaj/5Gnv2mW+1VMv0jIqg==
#> 9                                                                                                                                                                                                                                                                                                                                                               www.example.com. A NS SOA TXT AAAA RRSIG NSEC DNSKEY
#> 10                                                                                                                                                                                                                                                                                                                                                                                               a.iana-servers.net.
#> 11                                                                                                                                                                                                                                                                                                                                                                                               b.iana-servers.net.
#> 12                                                                                                                                                                                                                                                                                                                                                                                2606:2800:220:1:248:1893:25c8:1946
#> 13                                                                                                                                                                                                                                                                                                                                                                                                     93.184.216.34
#> 14                                                                                                                                                                                                                                                                                                                                                                                                     "v=spf1 -all"
#> 15                                                                                                                                                                                                                                                                                                                                                             "$Id: example.com 4415 2015-08-24 20:12:23Z davids $"
#> 16                                                                                                                                                                                                                          256 3 8 AwEAAa1e3aHzKml+EtBvA6ZVztOV+AByi8/9akkbL9COtasbKc1VBbHS6w8uHGqHaEMXzriWtXAwlSzHMgIxJ1y0fXcB/h4Yg8qNnJvgSU1JAKvYLJMkdAk+P5XbdGtpUNCh4d9NEZkY/lFClYo8iyIAVeifDeaeaEQIRKbPZLLwtgr1
#> 17                                                                                                                                                                                                                          256 3 8 AwEAAbpTkuNZuxDDAwDW46cAroMR10zm9MsdVnXT+m/4HtbGstC4LIt8WU3CRayoXZyO6zDwxAytkuKxuEWVCAVA7ligFPR8Ta/BoR91H66dj8OPExAq6ugqKsQDKP906j5cF9Rsr9k0rEjvh2MptStkzCSaBB3FulTj14pBX1MZ8x9n
#> 18                                              257 3 8 AwEAAZ0aqu1rJ6orJynrRfNpPmayJZoAx9Ic2/Rl9VQWLMHyjxxem3VUSoNUIFXERQbj0A9Ogp0zDM9YIccKLRd6LmWiDCt7UJQxVdD+heb5Ec4qlqGmyX9MDabkvX2NvMwsUecbYBq8oXeTT9LRmCUt9KUt/WOi6DKECxoG/bWTykrXyBR8elD+SQY43OAVjlWrVltHxgp4/rhBCvRbmdflunaPIgu27eE2U4myDSLT8a4A0rB5uHG4PkOa9dIRs9y00M2mWf4lyPee7vi5few2dbayHXmieGcaAHrx76NGAABeY393xjlmDNcUkF1gpNWUla4fWZbbaYQzA93mLdrng+M=
#> 19                                              257 3 8 AwEAAbOFAxl+Lkt0UMglZizKEC1AxUu8zlj65KYatR5wBWMrh18TYzK/ig6Y1t5YTWCO68bynorpNu9fqNFALX7bVl9/gybA0v0EhF+dgXmoUfRX7ksMGgBvtfa2/Y9a3klXNLqkTszIQ4PEMVCjtryl19Be9/PkFeC9ITjgMRQsQhmB39eyMYnal+f3bUxKk4fq7cuEU0dbRpue4H/N6jPucXWOwiMAkTJhghqgy+o9FfIp+tR/emKao94/wpVXDcPf5B18j7xz2SvTTxiuqCzCMtsxnikZHcoh1j4g+Y1B8zIMIvrEM+pZGhh/Yuf4RwCBgaYCi9hpiMWVvS4WBzx0/lU=
#> 20                                                                                                                                                                                                                                                                                                                                           sns.dns.icann.org. noc.dns.icann.org. 2018050812 7200 3600 1209600 3600
#> 
#> $Additional
#> list()
#> 
#> $edns_client_subnet
#> [1] "0.0.0.0/0"

query("microsoft.com", "MX")
#> $Status
#> [1] 0
#> 
#> $TC
#> [1] FALSE
#> 
#> $RD
#> [1] TRUE
#> 
#> $RA
#> [1] TRUE
#> 
#> $AD
#> [1] FALSE
#> 
#> $CD
#> [1] FALSE
#> 
#> $Question
#>             name type
#> 1 microsoft.com.   15
#> 
#> $Answer
#>             name type  TTL                                          data
#> 1 microsoft.com.   15 3599 10 microsoft-com.mail.protection.outlook.com.
#> 
#> $Additional
#> list()
#> 
#> $edns_client_subnet
#> [1] "0.0.0.0/0"
#> 
#> $Comment
#> [1] "Response from 193.221.113.53."

query("google-public-dns-a.google.com", "TXT")
#> $Status
#> [1] 0
#> 
#> $TC
#> [1] FALSE
#> 
#> $RD
#> [1] TRUE
#> 
#> $RA
#> [1] TRUE
#> 
#> $AD
#> [1] FALSE
#> 
#> $CD
#> [1] FALSE
#> 
#> $Question
#>                              name type
#> 1 google-public-dns-a.google.com.   16
#> 
#> $Answer
#>                              name type   TTL                    data
#> 1 google-public-dns-a.google.com.   16 21599 "http://xkcd.com/1361/"
#> 
#> $Additional
#> list()
#> 
#> $edns_client_subnet
#> [1] "0.0.0.0/0"
#> 
#> $Comment
#> [1] "Response from 216.239.32.10."

query("apple.com")
#> $Status
#> [1] 0
#> 
#> $TC
#> [1] FALSE
#> 
#> $RD
#> [1] TRUE
#> 
#> $RA
#> [1] TRUE
#> 
#> $AD
#> [1] FALSE
#> 
#> $CD
#> [1] FALSE
#> 
#> $Question
#>         name type
#> 1 apple.com.    1
#> 
#> $Answer
#>         name type  TTL          data
#> 1 apple.com.    1 3592 17.172.224.47
#> 2 apple.com.    1 3592  17.178.96.59
#> 3 apple.com.    1 3592 17.142.160.59
#> 
#> $Additional
#> list()
#> 
#> $edns_client_subnet
#> [1] "0.0.0.0/0"

query("17.142.160.59", "PTR")
#> $Status
#> [1] 0
#> 
#> $TC
#> [1] FALSE
#> 
#> $RD
#> [1] TRUE
#> 
#> $RA
#> [1] TRUE
#> 
#> $AD
#> [1] FALSE
#> 
#> $CD
#> [1] FALSE
#> 
#> $Question
#>                          name type
#> 1 59.160.142.17.in-addr.arpa.   12
#> 
#> $Answer
#>                           name type TTL                           data
#> 1  59.160.142.17.in-addr.arpa.   12 907                      imac.one.
#> 2  59.160.142.17.in-addr.arpa.   12 907                       mac.one.
#> 3  59.160.142.17.in-addr.arpa.   12 907                  itunes.earth.
#> 4  59.160.142.17.in-addr.arpa.   12 907                     chomp.com.
#> 5  59.160.142.17.in-addr.arpa.   12 907                   iphone.host.
#> 6  59.160.142.17.in-addr.arpa.   12 907                ripmixburn.com.
#> 7  59.160.142.17.in-addr.arpa.   12 907                   yessql.info.
#> 8  59.160.142.17.in-addr.arpa.   12 907               webobjects.info.
#> 9  59.160.142.17.in-addr.arpa.   12 907                     ubnw.info.
#> 10 59.160.142.17.in-addr.arpa.   12 907                 skyvines.info.
#> 11 59.160.142.17.in-addr.arpa.   12 907            shopdifferent.info.
#> 12 59.160.142.17.in-addr.arpa.   12 907                 sherlock.info.
#> 13 59.160.142.17.in-addr.arpa.   12 907              quicktimetv.info.
#> 14 59.160.142.17.in-addr.arpa.   12 907            quicktimelive.info.
#> 15 59.160.142.17.in-addr.arpa.   12 907                 powermac.info.
#> 16 59.160.142.17.in-addr.arpa.   12 907                powerbook.info.
#> 17 59.160.142.17.in-addr.arpa.   12 907                   macosx.info.
#> 18 59.160.142.17.in-addr.arpa.   12 907               appleshare.info.
#> 19 59.160.142.17.in-addr.arpa.   12 907              applescript.info.
#> 20 59.160.142.17.in-addr.arpa.   12 907         applepaysupplies.info.
#> 21 59.160.142.17.in-addr.arpa.   12 907 applepaymerchantsupplies.info.
#> 22 59.160.142.17.in-addr.arpa.   12 907                 applepay.info.
#> 23 59.160.142.17.in-addr.arpa.   12 907             applemasters.info.
#> 24 59.160.142.17.in-addr.arpa.   12 907                appleexpo.info.
#> 25 59.160.142.17.in-addr.arpa.   12 907         applecomputerinc.info.
#> 26 59.160.142.17.in-addr.arpa.   12 907              applecentre.info.
#> 27 59.160.142.17.in-addr.arpa.   12 907                 airtunes.info.
#> 28 59.160.142.17.in-addr.arpa.   12 907                      apple.by.
#> 29 59.160.142.17.in-addr.arpa.   12 907                 apples-msk.ru.
#> 30 59.160.142.17.in-addr.arpa.   12 907                     icloud.se.
#> 31 59.160.142.17.in-addr.arpa.   12 907                     icloud.es.
#> 32 59.160.142.17.in-addr.arpa.   12 907                     icloud.om.
#> 33 59.160.142.17.in-addr.arpa.   12 907                   icloudo.com.
#> 34 59.160.142.17.in-addr.arpa.   12 907                     icloud.ch.
#> 35 59.160.142.17.in-addr.arpa.   12 907                     icloud.fr.
#> 36 59.160.142.17.in-addr.arpa.   12 907                   icloude.com.
#> 37 59.160.142.17.in-addr.arpa.   12 907          camelspaceeffect.com.
#> 38 59.160.142.17.in-addr.arpa.   12 907                 camelphat.com.
#> 39 59.160.142.17.in-addr.arpa.   12 907              alchemysynth.com.
#> 40 59.160.142.17.in-addr.arpa.   12 907                    openni.org.
#> 41 59.160.142.17.in-addr.arpa.   12 907                      swell.am.
#> 42 59.160.142.17.in-addr.arpa.   12 907                  appleweb.net.
#> 43 59.160.142.17.in-addr.arpa.   12 907                     apple.com.
#> 44 59.160.142.17.in-addr.arpa.   12 907        pv-apple-com.apple.com.
#> 45 59.160.142.17.in-addr.arpa.   12 907                     ipad.host.
#> 46 59.160.142.17.in-addr.arpa.   12 907                   appleid.org.
#> 47 59.160.142.17.in-addr.arpa.   12 907                     apple.xyz.
#> 48 59.160.142.17.in-addr.arpa.   12 907           searchads-apple.com.
#> 49 59.160.142.17.in-addr.arpa.   12 907              airport.brussels.
#> 50 59.160.142.17.in-addr.arpa.   12 907                  ipadpro.buzz.
#> 
#> $Additional
#> list()
#> 
#> $edns_client_subnet
#> [1] "0.0.0.0/0"

hosts <- c("rud.is", "dds.ec", "r-project.org", "rstudio.com", "apple.com")
gdns::bulk_query(hosts)
#>             name type  TTL            data
#> 1        rud.is.    1  276 104.236.112.222
#> 2        dds.ec.    1  599    185.53.178.9
#> 3 r-project.org.    1 4806   137.208.57.37
#> 4   rstudio.com.    1 3599   104.196.200.5
#> 5     apple.com.    1 3585   17.172.224.47
#> 6     apple.com.    1 3585    17.178.96.59
#> 7     apple.com.    1 3585   17.142.160.59

Test Results

library(gdns)
library(testthat)

date()
#> [1] "Wed Jun  6 15:28:43 2018"

test_dir("tests/")
#> ✔ | OK F W S | Context
#> ══ testthat results  ════════════════════════════════════════════════════════════
#> OK: 2 SKIPPED: 0 FAILED: 0
#> 
#> ══ Results ══════════════════════════════════════════════════════════════════════
#> Duration: 0.3 s
#> 
#> OK:       0
#> Failed:   0
#> Warnings: 0
#> Skipped:  0

Code of Conduct

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.