Perform Secure-by-default or Woefully Insecure ‘DNS’ Queries
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

403 lines
25 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. [![Project Status: Active – The project has reached a stable, usable
  2. state and is being actively
  3. developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
  4. [![Signed
  5. by](https://img.shields.io/badge/Keybase-Verified-brightgreen.svg)](https://keybase.io/hrbrmstr)
  6. ![Signed commit
  7. %](https://img.shields.io/badge/Signed_Commits-96%25-lightgrey.svg)
  8. [![Linux build
  9. Status](https://travis-ci.org/hrbrmstr/clandnstine.svg?branch=master)](https://travis-ci.org/hrbrmstr/clandnstine)
  10. [![Coverage
  11. Status](https://codecov.io/gh/hrbrmstr/clandnstine/branch/master/graph/badge.svg)](https://codecov.io/gh/hrbrmstr/clandnstine)
  12. ![Minimal R
  13. Version](https://img.shields.io/badge/R%3E%3D-3.2.0-blue.svg)
  14. ![License](https://img.shields.io/badge/License-MIT-blue.svg)
  15. # clandnstine
  16. Perform Secure-by-default or Woefully Insecure ‘DNS’ Queries
  17. ## Description
  18. Perform and process DNS over TLS, DNS over HTTPS, or Just Plain DNS
  19. queries using the getdns (<https://getdnsapi.net/>) C library.
  20. ## NOTE
  21. Requires [`getdns`](https://getdnsapi.net/) to be installed and
  22. available for compilation (no guard rails setup yet):
  23. - Use `brew install getdns` on macOS
  24. - Install `libgetdns-dev` or `libgetdns-devel` on debian/ubuntu
  25. (version 1.5.1 or higher)
  26. - Windows support is likely in 2020 since getdns moved to a cmake
  27. build system with a primary intent to make Windows a first-class
  28. citizen.
  29. You’re going to need version 1.5.1+ of `getdns` for this package to
  30. install.
  31. I’ve gotten this running on macOS and Ubuntu 16.04. For the latter I had
  32. to ensure `libidn2-0-dev` and `libunbound-dev` were installed then had
  33. to grab the 1.5.1 tarball (e.g. `aria2c
  34. https://getdnsapi.net/releases/getdns-1-5-1/getdns-1.5.1.tar.gz`),
  35. extract it and `config`/`make`/`make install` (plus `ldconfig` after).
  36. ## TODO/WAT
  37. I finally grok the getdns api so the package api is going to change
  38. wildly and fast. The default mode will be to perform queries using DNS
  39. over TLS but also supports UDP and TCP transports along with support for
  40. DNS over HTTPS.
  41. ## Why?
  42. Well, for starters, to help research DNS over TLS/DNS over HTTPS
  43. servers. Plus, for fun\!
  44. If you’re asking “Why DNS over TLS/HTTPS at all?” then “faux” privacy.
  45. Why “faux”? Well, *something* is handing your query and that something
  46. knows your IP address and what you looked for. So, you’re relying on the
  47. good faith, honest nature and technical capability of the destination
  48. server to not mess with you. I don’t trust Cloudflare or Google and am
  49. witholding judgement on Quad9 either way (they’ve been doing good things
  50. and are less “look at how cool we are” than CF is).
  51. Also “faux” in that you’re going to be using (for DoT) a standard port
  52. (853) and a TLS session for the queries so your internet provider will
  53. know you’re doing *something* and the current, sorry state of SSL
  54. certificates, certificate authorities, and authoritarian companies and
  55. regimes combined means confidentiality and integrity are always kinda in
  56. question unless done super-well.
  57. ## What’s Different About This vs Regular DNS?
  58. Well, if we lookup the addresses for `yahoo.com` the old-fashioned way
  59. it’s cleartext UDP on the wire:
  60. 1 0.000000 10.1.10.57 → 10.1.10.200 DNS 80 Standard query 0x8af8 A yahoo.com OPT
  61. 2 0.003297 10.1.10.200 → 10.1.10.57 DNS 176 Standard query response 0x8af8 A yahoo.com A 72.30.35.10 A 98.138.219.231 A 72.30.35.9 A 98.137.246.7 A 98.138.219.232 A 98.137.246.8 OPT
  62. I watched for port 53 UDP traffic with `tshark` as `yahoo.com` was being
  63. looked up. Notice the fast and diminuitive — and plaintext — response.
  64. (I’m fibbing a bit since I pre-loaded the local home DNS server with
  65. this query since I tested it alot before knitting this readme. My home
  66. server forwards all queries to a custom DNS over TLS server since I
  67. really don’t trust any of the providers when it comes down to it. So, in
  68. reality for me, it’s even slower than the below — at least initially).
  69. This is the same query via DNS over TLS
  70. ```
  71. 1 0.000000 10.1.10.57 → 9.9.9.9 TCP 78 52128 → 853 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=64 TSval=602885491 TSecr=0 SACK_PERM=1 TFO=R
  72. 2 0.021188 9.9.9.9 → 10.1.10.57 TCP 74 853 → 52128 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1460 SACK_PERM=1 TSval=3426782438 TSecr=602885491 WS=256
  73. 3 0.021308 10.1.10.57 → 9.9.9.9 TLSv1 373 Client Hello
  74. 4 0.045324 9.9.9.9 → 10.1.10.57 TLSv1.2 1514 Server Hello
  75. 5 0.045333 9.9.9.9 → 10.1.10.57 TLSv1.2 73 [TCP Previous segment not captured] , Ignored Unknown Record
  76. 6 0.045334 9.9.9.9 → 10.1.10.57 TCP 1514 [TCP Out-Of-Order] 853 → 52128 [ACK] Seq=1449 Ack=308 Win=30208 Len=1448 TSval=3426782459 TSecr=602885512
  77. 7 0.045491 10.1.10.57 → 9.9.9.9 TCP 78 52128 → 853 [ACK] Seq=308 Ack=1449 Win=130304 Len=0 TSval=602885536 TSecr=3426782459 SLE=2897 SRE=2904
  78. 8 0.045492 10.1.10.57 → 9.9.9.9 TCP 66 52128 → 853 [ACK] Seq=308 Ack=2904 Win=128832 Len=0 TSval=602885536 TSecr=3426782459
  79. 9 0.050527 10.1.10.57 → 9.9.9.9 TLSv1.2 192 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
  80. 10 0.069107 9.9.9.9 → 10.1.10.57 TLSv1.2 117 Change Cipher Spec, Encrypted Handshake Message
  81. 11 0.069255 10.1.10.57 → 9.9.9.9 TCP 66 52128 → 853 [ACK] Seq=434 Ack=2955 Win=131008 Len=0 TSval=602885559 TSecr=3426782487
  82. 12 0.069516 10.1.10.57 → 9.9.9.9 TLSv1.2 225 Application Data
  83. 13 0.091087 9.9.9.9 → 10.1.10.57 TLSv1.2 303 Application Data
  84. 14 0.091207 10.1.10.57 → 9.9.9.9 TLSv1.2 225 Application Data
  85. 15 0.106738 9.9.9.9 → 10.1.10.57 TLSv1.2 231 Application Data
  86. 16 0.106836 10.1.10.57 → 9.9.9.9 TCP 66 52128 → 853 [ACK] Seq=752 Ack=3357 Win=130880 Len=0 TSval=602885595 TSecr=3426782525
  87. 17 0.107200 10.1.10.57 → 9.9.9.9 TLSv1.2 97 Encrypted Alert
  88. 18 0.107411 10.1.10.57 → 9.9.9.9 TCP 66 52128 → 853 [FIN, ACK] Seq=783 Ack=3357 Win=131072 Len=0 TSval=602885595 TSecr=3426782525
  89. 19 0.126603 9.9.9.9 → 10.1.10.57 TLSv1.2 97 Encrypted Alert
  90. 20 0.126608 9.9.9.9 → 10.1.10.57 TCP 66 853 → 52128 [FIN, ACK] Seq=3388 Ack=784 Win=32256 Len=0 TSval=3426782545 TSecr=602885595
  91. 21 0.126717 10.1.10.57 → 9.9.9.9 TCP 54 52128 → 853 [RST] Seq=784 Win=0 Len=0
  92. 22 0.126718 10.1.10.57 → 9.9.9.9 TCP 54 52128 → 853 [RST] Seq=784 Win=0 Len=0
  93. ```
  94. It’s stupid slow, consumes more CPU and bandwidth but forces adversaries
  95. to work pretty hard to try to figure out what you’re looking for.
  96. ## What’s Inside The Tin
  97. The following functions are implemented:
  98. - `check_is_xptr`: Test whether an object is an external pointer
  99. - `doh_post`: Make a DoH Request (POST/wireformat)
  100. - `doh_servers`: Built-in list of DoH Servers
  101. - `gdns_context`: Create a gdns DNS over TLS context and populate it
  102. with a resolver for use in resolution functions
  103. - `gdns_get_address`: Resolve a host to an addrss
  104. - `gdns_get_hosts`: Retreive the value of the localnames namespace
  105. - `gdns_get_resolution_type`: Get the current resolution type setting
  106. - `gdns_get_resolvconf`: Retreive the value with which the context’s
  107. upstream recursive servers and suffixes were initialized
  108. - `gdns_get_root_servers`: Retrieve the list of addresses in use for
  109. looking up top-level domains in use by the context.
  110. - `gdns_get_timeout`: Retreive the number of milliseconds to wait for
  111. request to return
  112. - `gdns_get_tls_ca_file`: Retreive the file location with CA
  113. certificates for verification purposes
  114. - `gdns_get_tls_ca_path`: Retreive the value with which the context’s
  115. upstream recursive servers and suffixes were initialized
  116. - `gdns_get_transports`: Retreive what transports are used for DNS
  117. lookups.
  118. - `gdns_lib_version`: Return gdns library version
  119. - `gdns_query`: Arbitrary DNS queries
  120. - `gdns_set_hosts`: Initialized the context’s local names namespace
  121. with values from the given hosts file.
  122. - `gdns_set_resolution_type`: Specify whether DNS queries are
  123. performed with recursive lookups or as a stub resolver
  124. - `gdns_set_round_robin_upstreams`: Set/unset context to round robin
  125. queries over the available upstreams when resolving with the stub
  126. resolution type.
  127. - `gdns_set_timeout`: Specify the number of milliseconds to wait for
  128. request to return
  129. - `gdns_set_tls_ca_file`: Specify the file with CA certificates for
  130. verification purposes
  131. - `gdns_set_tls_ca_path`: Specify where the location for CA
  132. certificates for verification purposes are located
  133. - `gdns_set_transports`: Specifies what transport(s) is/ar used for
  134. DNS lookups
  135. - `gdns_update_resolvers`: Changes the list of resolvers in an already
  136. created context for use in resolution functions
  137. - `int_gdns_context`: Internal version of gdns\_context
  138. - `int_gdns_get_root_servers`: Retrieve the list of addresses in use
  139. for looking up top-level domains in use by the context.
  140. - `int_gdns_set_hosts`: Internal version of gdns\_set\_hosts()
  141. - `int_gdns_set_resolution_type`: Internal version of
  142. gdns\_set\_resolution\_type()
  143. - `int_gdns_set_transports`: Internal version of set\_transports()
  144. - `int_gdns_update_resolvers`: Internal version of
  145. gdns\_update\_resolvers
  146. - `is_gctx`: Test whether an object is a gctx context
  147. - `is_null_xptr_`: Test whether an external pointer is null
  148. - `print.gctx`: Printer for gdns contexts
  149. - `print.gdns_response`: Printer for gdns\_response objects
  150. - `tidy.gdns_doh_response`: Tidy a DoH POST response
  151. - `tidy`: Tidy generic
  152. - `to_inaddr_arpa`: Convert a vector of IPv4 addresses to in-addr.arpa
  153. format
  154. ## Installation
  155. ``` r
  156. install.packages("clandnstine", repos = "https://cinc.rud.is")
  157. # or
  158. remotes::install_git("https://git.rud.is/hrbrmstr/clandnstine.git")
  159. # or
  160. remotes::install_git("https://git.sr.ht/~hrbrmstr/clandnstine")
  161. # or
  162. remotes::install_gitlab("hrbrmstr/clandnstine")
  163. # or
  164. remotes::install_github("hrbrmstr/clandnstine")
  165. ```
  166. NOTE: To use the ‘remotes’ install options you will need to have the
  167. [{remotes} package](https://github.com/r-lib/remotes) installed.
  168. ## Usage
  169. ``` r
  170. library(clandnstine)
  171. # current version
  172. packageVersion("clandnstine")
  173. ## [1] '0.3.0'
  174. ```
  175. ### Get an address(es) from a name:
  176. ``` r
  177. gdns_lib_version()
  178. ## [1] "1.5.2"
  179. (x <- gdns_context())
  180. ## <gdns v1.5.2 resolver context; resolvers: [9.9.9.9]; timeout: 5,000 ms; lookup transport(s): [tls]; resolution type: stub>
  181. (x <- gdns_context("1.1.1.1"))
  182. ## <gdns v1.5.2 resolver context; resolvers: [1.1.1.1]; timeout: 5,000 ms; lookup transport(s): [tls]; resolution type: stub>
  183. (x <- gdns_context(c("8.8.8.8", "1.1.1.1", "9.9.9.9")))
  184. ## <gdns v1.5.2 resolver context; resolvers: [8.8.8.8, 1.1.1.1, 9.9.9.9]; timeout: 5,000 ms; lookup transport(s): [tls]; resolution type: stub>
  185. (gdns_set_timeout(x, 2000))
  186. ## <gdns v1.5.2 resolver context; resolvers: [8.8.8.8, 1.1.1.1, 9.9.9.9]; timeout: 2,000 ms; lookup transport(s): [tls]; resolution type: stub>
  187. (gdns_update_resolvers(x, "1.1.1.1"))
  188. ## <gdns v1.5.2 resolver context; resolvers: [1.1.1.1]; timeout: 2,000 ms; lookup transport(s): [tls]; resolution type: stub>
  189. (gdns_set_transports(x, c("udp", "tls", "tcp")))
  190. ## <gdns v1.5.2 resolver context; resolvers: [1.1.1.1]; timeout: 2,000 ms; lookup transport(s): [udp, tls, tcp]; resolution type: stub>
  191. (gdns_get_address(x, "rud.is"))
  192. ## [1] "2602:ff16:3::4dfb:9ac5" "172.93.49.183"
  193. (gdns_get_address(x, "yahoo.com"))
  194. ## [1] "2001:4998:c:1023::5" "2001:4998:44:41d::3" "2001:4998:44:41d::4" "2001:4998:58:1836::10"
  195. ## [5] "2001:4998:58:1836::11" "2001:4998:c:1023::4" "72.30.35.10" "98.137.246.7"
  196. ## [9] "98.137.246.8" "98.138.219.231" "98.138.219.232" "72.30.35.9"
  197. (gdns_get_address(x, "yahoo.commmm"))
  198. ## character(0)
  199. ```
  200. ### Any record type query:
  201. ``` r
  202. str(leno <- gdns_query(x, "lenovo.com", "txt"), 1)
  203. ## List of 5
  204. ## $ answer_type : int 800
  205. ## $ canonical_name: chr "lenovo.com."
  206. ## $ replies_full : int [1, 1:1029] 87 136 129 128 0 1 0 13 0 0 ...
  207. ## $ replies_tree :'data.frame': 1 obs. of 7 variables:
  208. ## $ status : int 900
  209. ## - attr(*, "class")= chr [1:2] "gdns_response" "list"
  210. sort(unlist(leno$replies_tree$answer[[1]]$rdata$txt_strings))
  211. ## [1] "a82c74b37aa84e7c8580f0e32f4d795d"
  212. ## [2] "adobe-idp-site-verification=5540c96206f5fe2df921a6c596ea9fb3d7e418d3eddb598c29935cc03163805b"
  213. ## [3] "ece42d7743c84d6889abda7011fe6f53"
  214. ## [4] "facebook-domain-verification=1r2am7c2bhzrxpqyt0mda0djoquqsi"
  215. ## [5] "google-site-verification=hxNSoF46anzjUtyFgpRVpzshTkYClFBJ7OAT3Dz6440"
  216. ## [6] "google-site-verification=nGgukcp60rC-gFxMOJw1NHH0B4VnSchRrlfWV-He_tE"
  217. ## [7] "google-site-verification=sHIlSlj0U6UnCDkfHp1AolWgVEvDjWvc0TR4KaysD2c"
  218. ## [8] "google-site-verification=VxW_e6r_Ka7A518qfX2MmIMHGnkpGbnACsjSxKFCBw0"
  219. ## [9] "google-site-verification=vyPsFusgDLeWzvnapRyBbiva5dXJ1JIJjcNbGuO52-k"
  220. ## [10] "iHzQJvsKnyGP2Nm2qBgL3fyBJ0CC9z4GkY/flfk4EzLP8lPxWHDDPKqZWm1TkeF5kEIL+NotYOF1wo7JtUDXXw=="
  221. ## [11] "qh7hdmqm4lzs85p704d6wsybgrpsly0j"
  222. ## [12] "v=spf1 include:spf.messagelabs.com include:_netblocks.eloqua.com ~all"
  223. ## [13] "Visit www.lenovo.com/think for information about Lenovo products and services"
  224. ```
  225. Yep. Advertising even in DNS `TXT` records (see item number 8).
  226. ### DOH
  227. ``` r
  228. str(doh_post("rud.is")$answer)
  229. ## 'data.frame': 1 obs. of 5 variables:
  230. ## $ class: int 1
  231. ## $ name : chr "rud.is."
  232. ## $ rdata:'data.frame': 1 obs. of 2 variables:
  233. ## ..$ ipv4_address: chr "172.93.49.183"
  234. ## ..$ rdata_raw :List of 1
  235. ## .. ..$ : int 172 93 49 183
  236. ## $ ttl : int 3600
  237. ## $ type : int 1
  238. ```
  239. ``` r
  240. a <- doh_post("apple.com", "A")
  241. tidy(a)
  242. ## name class type ttl ipv4_address rdata_raw
  243. ## 1 apple.com. 1 1 1515 17.178.96.59 11, b2, 60, 3b
  244. ## 2 apple.com. 1 1 1515 17.142.160.59 11, 8e, a0, 3b
  245. ## 3 apple.com. 1 1 1515 17.172.224.47 11, ac, e0, 2f
  246. aaaa <- doh_post("rud.is", "AAAA")
  247. tidy(aaaa)
  248. ## name class type ttl ipv6_address rdata_raw
  249. ## 1 rud.is. 1 28 43200 2602:ff16:3::4dfb:9ac5 26, 02, ff, 16, 00, 03, 00, 00, 00, 00, 00, 00, 4d, fb, 9a, c5
  250. mx <- doh_post("rud.is", "MX")
  251. tidy(mx)
  252. ## name class type ttl exchange preference
  253. ## 1 rud.is. 1 15 43200 aspmx.l.google.com. 10
  254. ## 2 rud.is. 1 15 43200 aspmx2.googlemail.com. 40
  255. ## 3 rud.is. 1 15 43200 alt2.aspmx.l.google.com. 30
  256. ## 4 rud.is. 1 15 43200 alt1.aspmx.l.google.com. 20
  257. ## rdata_raw
  258. ## 1 00, 0a, 05, 61, 73, 70, 6d, 78, 01, 6c, 06, 67, 6f, 6f, 67, 6c, 65, 03, 63, 6f, 6d, 00
  259. ## 2 00, 28, 06, 61, 73, 70, 6d, 78, 32, 0a, 67, 6f, 6f, 67, 6c, 65, 6d, 61, 69, 6c, c0, 35
  260. ## 3 00, 1e, 04, 61, 6c, 74, 32, c0, 26
  261. ## 4 00, 14, 04, 61, 6c, 74, 31, c0, 26
  262. txt <- doh_post("lenovo.com", "TXT")
  263. tidy(txt)
  264. ## name class type ttl
  265. ## 1 lenovo.com. 1 16 7200
  266. ## 2 lenovo.com. 1 16 7200
  267. ## 3 lenovo.com. 1 16 7200
  268. ## 4 lenovo.com. 1 16 7200
  269. ## 5 lenovo.com. 1 16 7200
  270. ## 6 lenovo.com. 1 16 7200
  271. ## 7 lenovo.com. 1 16 7200
  272. ## 8 lenovo.com. 1 16 7200
  273. ## 9 lenovo.com. 1 16 7200
  274. ## 10 lenovo.com. 1 16 7200
  275. ## 11 lenovo.com. 1 16 7200
  276. ## 12 lenovo.com. 1 16 7200
  277. ## 13 lenovo.com. 1 16 7200
  278. ## rdata_raw
  279. ## 1 20, 71, 68, 37, 68, 64, 6d, 71, 6d, 34, 6c, 7a, 73, 38, 35, 70, 37, 30, 34, 64, 36, 77, 73, 79, 62, 67, 72, 70, 73, 6c, 79, 30, 6a
  280. ## 2 44, 67, 6f, 6f, 67, 6c, 65, 2d, 73, 69, 74, 65, 2d, 76, 65, 72, 69, 66, 69, 63, 61, 74, 69, 6f, 6e, 3d, 56, 78, 57, 5f, 65, 36, 72, 5f, 4b, 61, 37, 41, 35, 31, 38, 71, 66, 58, 32, 4d, 6d, 49, 4d, 48, 47, 6e, 6b, 70, 47, 62, 6e, 41, 43, 73, 6a, 53, 78, 4b, 46, 43, 42, 77, 30
  281. ## 3 4d, 56, 69, 73, 69, 74, 20, 77, 77, 77, 2e, 6c, 65, 6e, 6f, 76, 6f, 2e, 63, 6f, 6d, 2f, 74, 68, 69, 6e, 6b, 20, 66, 6f, 72, 20, 69, 6e, 66, 6f, 72, 6d, 61, 74, 69, 6f, 6e, 20, 61, 62, 6f, 75, 74, 20, 4c, 65, 6e, 6f, 76, 6f, 20, 70, 72, 6f, 64, 75, 63, 74, 73, 20, 61, 6e, 64, 20, 73, 65, 72, 76, 69, 63, 65, 73
  282. ## 4 20, 61, 38, 32, 63, 37, 34, 62, 33, 37, 61, 61, 38, 34, 65, 37, 63, 38, 35, 38, 30, 66, 30, 65, 33, 32, 66, 34, 64, 37, 39, 35, 64
  283. ## 5 44, 67, 6f, 6f, 67, 6c, 65, 2d, 73, 69, 74, 65, 2d, 76, 65, 72, 69, 66, 69, 63, 61, 74, 69, 6f, 6e, 3d, 68, 78, 4e, 53, 6f, 46, 34, 36, 61, 6e, 7a, 6a, 55, 74, 79, 46, 67, 70, 52, 56, 70, 7a, 73, 68, 54, 6b, 59, 43, 6c, 46, 42, 4a, 37, 4f, 41, 54, 33, 44, 7a, 36, 34, 34, 30
  284. ## 6 44, 67, 6f, 6f, 67, 6c, 65, 2d, 73, 69, 74, 65, 2d, 76, 65, 72, 69, 66, 69, 63, 61, 74, 69, 6f, 6e, 3d, 76, 79, 50, 73, 46, 75, 73, 67, 44, 4c, 65, 57, 7a, 76, 6e, 61, 70, 52, 79, 42, 62, 69, 76, 61, 35, 64, 58, 4a, 31, 4a, 49, 4a, 6a, 63, 4e, 62, 47, 75, 4f, 35, 32, 2d, 6b
  285. ## 7 3b, 66, 61, 63, 65, 62, 6f, 6f, 6b, 2d, 64, 6f, 6d, 61, 69, 6e, 2d, 76, 65, 72, 69, 66, 69, 63, 61, 74, 69, 6f, 6e, 3d, 31, 72, 32, 61, 6d, 37, 63, 32, 62, 68, 7a, 72, 78, 70, 71, 79, 74, 30, 6d, 64, 61, 30, 64, 6a, 6f, 71, 75, 71, 73, 69
  286. ## 8 45, 76, 3d, 73, 70, 66, 31, 20, 69, 6e, 63, 6c, 75, 64, 65, 3a, 73, 70, 66, 2e, 6d, 65, 73, 73, 61, 67, 65, 6c, 61, 62, 73, 2e, 63, 6f, 6d, 20, 69, 6e, 63, 6c, 75, 64, 65, 3a, 5f, 6e, 65, 74, 62, 6c, 6f, 63, 6b, 73, 2e, 65, 6c, 6f, 71, 75, 61, 2e, 63, 6f, 6d, 20, 7e, 61, 6c, 6c
  287. ## 9 58, 69, 48, 7a, 51, 4a, 76, 73, 4b, 6e, 79, 47, 50, 32, 4e, 6d, 32, 71, 42, 67, 4c, 33, 66, 79, 42, 4a, 30, 43, 43, 39, 7a, 34, 47, 6b, 59, 2f, 66, 6c, 66, 6b, 34, 45, 7a, 4c, 50, 38, 6c, 50, 78, 57, 48, 44, 44, 50, 4b, 71, 5a, 57, 6d, 31, 54, 6b, 65, 46, 35, 6b, 45, 49, 4c, 2b, 4e, 6f, 74, 59, 4f, 46, 31, 77, 6f, 37, 4a, 74, 55, 44, 58, 58, 77, 3d, 3d
  288. ## 10 5c, 61, 64, 6f, 62, 65, 2d, 69, 64, 70, 2d, 73, 69, 74, 65, 2d, 76, 65, 72, 69, 66, 69, 63, 61, 74, 69, 6f, 6e, 3d, 35, 35, 34, 30, 63, 39, 36, 32, 30, 36, 66, 35, 66, 65, 32, 64, 66, 39, 32, 31, 61, 36, 63, 35, 39, 36, 65, 61, 39, 66, 62, 33, 64, 37, 65, 34, 31, 38, 64, 33, 65, 64, 64, 62, 35, 39, 38, 63, 32, 39, 39, 33, 35, 63, 63, 30, 33, 31, 36, 33, 38, 30, 35, 62
  289. ## 11 44, 67, 6f, 6f, 67, 6c, 65, 2d, 73, 69, 74, 65, 2d, 76, 65, 72, 69, 66, 69, 63, 61, 74, 69, 6f, 6e, 3d, 73, 48, 49, 6c, 53, 6c, 6a, 30, 55, 36, 55, 6e, 43, 44, 6b, 66, 48, 70, 31, 41, 6f, 6c, 57, 67, 56, 45, 76, 44, 6a, 57, 76, 63, 30, 54, 52, 34, 4b, 61, 79, 73, 44, 32, 63
  290. ## 12 44, 67, 6f, 6f, 67, 6c, 65, 2d, 73, 69, 74, 65, 2d, 76, 65, 72, 69, 66, 69, 63, 61, 74, 69, 6f, 6e, 3d, 6e, 47, 67, 75, 6b, 63, 70, 36, 30, 72, 43, 2d, 67, 46, 78, 4d, 4f, 4a, 77, 31, 4e, 48, 48, 30, 42, 34, 56, 6e, 53, 63, 68, 52, 72, 6c, 66, 57, 56, 2d, 48, 65, 5f, 74, 45
  291. ## 13 20, 65, 63, 65, 34, 32, 64, 37, 37, 34, 33, 63, 38, 34, 64, 36, 38, 38, 39, 61, 62, 64, 61, 37, 30, 31, 31, 66, 65, 36, 66, 35, 33
  292. ## txt_strings
  293. ## 1 qh7hdmqm4lzs85p704d6wsybgrpsly0j
  294. ## 2 google-site-verification=VxW_e6r_Ka7A518qfX2MmIMHGnkpGbnACsjSxKFCBw0
  295. ## 3 Visit www.lenovo.com/think for information about Lenovo products and services
  296. ## 4 a82c74b37aa84e7c8580f0e32f4d795d
  297. ## 5 google-site-verification=hxNSoF46anzjUtyFgpRVpzshTkYClFBJ7OAT3Dz6440
  298. ## 6 google-site-verification=vyPsFusgDLeWzvnapRyBbiva5dXJ1JIJjcNbGuO52-k
  299. ## 7 facebook-domain-verification=1r2am7c2bhzrxpqyt0mda0djoquqsi
  300. ## 8 v=spf1 include:spf.messagelabs.com include:_netblocks.eloqua.com ~all
  301. ## 9 iHzQJvsKnyGP2Nm2qBgL3fyBJ0CC9z4GkY/flfk4EzLP8lPxWHDDPKqZWm1TkeF5kEIL+NotYOF1wo7JtUDXXw==
  302. ## 10 adobe-idp-site-verification=5540c96206f5fe2df921a6c596ea9fb3d7e418d3eddb598c29935cc03163805b
  303. ## 11 google-site-verification=sHIlSlj0U6UnCDkfHp1AolWgVEvDjWvc0TR4KaysD2c
  304. ## 12 google-site-verification=nGgukcp60rC-gFxMOJw1NHH0B4VnSchRrlfWV-He_tE
  305. ## 13 ece42d7743c84d6889abda7011fe6f53
  306. cname <- doh_post("dataassurance.pwc.com", "CNAME")
  307. tidy(cname)
  308. ## name class type ttl cname
  309. ## 1 dataassurance.pwc.com. 1 5 3600 f6759d2.x.incapdns.net.
  310. ## rdata_raw
  311. ## 1 66, 36, 37, 35, 39, 64, 32, 2e, 78, 2e, 69, 6e, 63, 61, 70, 64, 6e, 73, 2e, 6e, 65, 74, 2e
  312. ns <- doh_post("rud.is", "NS")
  313. tidy(ns)
  314. ## name class type ttl nsdname rdata_raw
  315. ## 1 rud.is. 1 2 43200 dns.mwebdns.net. 64, 6e, 73, 2e, 6d, 77, 65, 62, 64, 6e, 73, 2e, 6e, 65, 74, 2e
  316. ## 2 rud.is. 1 2 43200 dns.mwebdns.de. 64, 6e, 73, 2e, 6d, 77, 65, 62, 64, 6e, 73, 2e, 64, 65, 2e
  317. ## 3 rud.is. 1 2 43200 dns.mwebdns.eu. 64, 6e, 73, 2e, 6d, 77, 65, 62, 64, 6e, 73, 2e, 65, 75, 2e
  318. soa <- doh_post("rud.is", "SOA")
  319. tidy(soa)
  320. ## name class type ttl expire minimum mname
  321. ## 1 rud.is. 1 6 43200 604800 86400 dns.mwebdns.de.
  322. ## rdata_raw
  323. ## 1 03, 64, 6e, 73, 07, 6d, 77, 65, 62, 64, 6e, 73, 02, 64, 65, 00, 0a, 68, 6f, 73, 74, 6d, 61, 73, 74, 65, 72, 0a, 6d, 61, 6e, 64, 6f, 72, 61, 77, 65, 62, c0, 30, 77, ce, 5b, f3, 00, 00, 2a, 30, 00, 00, 0e, 10, 00, 09, 3a, 80, 00, 01, 51, 80
  324. ## refresh retry rname serial
  325. ## 1 10800 3600 hostmaster.mandoraweb.de. 2010012659
  326. ptr <- doh_post(to_inaddr_arpa("104.244.13.104"), "PTR")
  327. tidy(ptr)
  328. ## name class type ttl ptrdname
  329. ## 1 104.13.244.104.in-addr.arpa. 1 12 43200 archive.farsightsecurity.com.
  330. ## rdata_raw
  331. ## 1 61, 72, 63, 68, 69, 76, 65, 2e, 66, 61, 72, 73, 69, 67, 68, 74, 73, 65, 63, 75, 72, 69, 74, 79, 2e, 63, 6f, 6d, 2e
  332. ```
  333. ## clandnstine Metrics
  334. | Lang | \# Files | (%) | LoC | (%) | Blank lines | (%) | \# Lines | (%) |
  335. | :--- | -------: | ---: | --: | ---: | ----------: | ---: | -------: | ---: |
  336. | R | 20 | 0.80 | 686 | 0.49 | 188 | 0.40 | 373 | 0.60 |
  337. | C++ | 4 | 0.16 | 681 | 0.49 | 220 | 0.47 | 163 | 0.26 |
  338. | Rmd | 1 | 0.04 | 37 | 0.03 | 58 | 0.12 | 81 | 0.13 |
  339. ## Code of Conduct
  340. Please note that this project is released with a Contributor Code of
  341. Conduct. By participating in this project you agree to abide by its
  342. terms.