ronin-support 0.5.1 → 1.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +11 -0
  3. data/.github/workflows/ruby.yml +27 -0
  4. data/.gitignore +7 -6
  5. data/.mailmap +1 -0
  6. data/.ruby-version +1 -0
  7. data/.yardopts +1 -2
  8. data/ChangeLog.md +533 -137
  9. data/Gemfile +20 -20
  10. data/README.md +137 -61
  11. data/Rakefile +29 -10
  12. data/data/text/homoglyphs/ascii.txt +8 -0
  13. data/data/text/homoglyphs/cyrillic.txt +33 -0
  14. data/data/text/homoglyphs/full_width.txt +81 -0
  15. data/data/text/homoglyphs/greek.txt +21 -0
  16. data/data/text/homoglyphs/latin_numbers.txt +14 -0
  17. data/data/text/homoglyphs/punctuation.txt +7 -0
  18. data/data/text/patterns/network/public_suffix.rb.erb +44 -0
  19. data/examples/ssl_proxy.rb +38 -0
  20. data/examples/tcp_proxy.rb +41 -0
  21. data/gemspec.yml +25 -15
  22. data/lib/ronin/support/archive/core_ext/file.rb +118 -0
  23. data/lib/ronin/{formatting/sql.rb → support/archive/core_ext.rb} +6 -7
  24. data/lib/ronin/support/archive/mixin.rb +213 -0
  25. data/lib/ronin/support/archive/tar/reader.rb +135 -0
  26. data/lib/ronin/support/archive/tar/writer.rb +197 -0
  27. data/lib/ronin/support/archive/tar.rb +155 -0
  28. data/lib/ronin/support/archive/zip/reader/entry.rb +134 -0
  29. data/lib/ronin/support/archive/zip/reader/statistics.rb +76 -0
  30. data/lib/ronin/support/archive/zip/reader.rb +273 -0
  31. data/lib/ronin/support/archive/zip/writer.rb +175 -0
  32. data/lib/ronin/support/archive/zip.rb +105 -0
  33. data/lib/ronin/support/archive.rb +211 -0
  34. data/lib/ronin/support/binary/array.rb +255 -0
  35. data/lib/ronin/support/binary/bit_flip.rb +147 -0
  36. data/lib/ronin/support/binary/buffer.rb +2027 -0
  37. data/lib/ronin/support/binary/byte_slice.rb +324 -0
  38. data/lib/ronin/support/binary/core_ext/array.rb +75 -0
  39. data/lib/ronin/support/binary/core_ext/float.rb +80 -0
  40. data/lib/ronin/support/binary/core_ext/integer.rb +305 -0
  41. data/lib/ronin/support/binary/core_ext/io.rb +38 -0
  42. data/lib/ronin/support/binary/core_ext/string.rb +115 -0
  43. data/lib/ronin/{formatting/extensions/text.rb → support/binary/core_ext.rb} +9 -9
  44. data/lib/ronin/support/binary/cstring.rb +259 -0
  45. data/lib/ronin/support/binary/ctypes/aggregate_type.rb +98 -0
  46. data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +77 -0
  47. data/lib/ronin/support/binary/ctypes/arch/arm.rb +75 -0
  48. data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +77 -0
  49. data/lib/ronin/support/binary/ctypes/arch/arm64.rb +75 -0
  50. data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +77 -0
  51. data/lib/ronin/support/binary/ctypes/arch/mips.rb +75 -0
  52. data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +77 -0
  53. data/lib/ronin/support/binary/ctypes/arch/mips64.rb +75 -0
  54. data/lib/ronin/support/binary/ctypes/arch/ppc.rb +75 -0
  55. data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +75 -0
  56. data/lib/ronin/support/binary/ctypes/arch/x86.rb +75 -0
  57. data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +75 -0
  58. data/lib/ronin/support/binary/ctypes/arch.rb +30 -0
  59. data/lib/ronin/support/binary/ctypes/array_object_type.rb +164 -0
  60. data/lib/ronin/support/binary/ctypes/array_type.rb +232 -0
  61. data/lib/ronin/support/binary/ctypes/big_endian.rb +195 -0
  62. data/lib/ronin/support/binary/ctypes/char_type.rb +59 -0
  63. data/lib/ronin/support/binary/ctypes/char_types.rb +39 -0
  64. data/lib/ronin/support/binary/ctypes/enum_type.rb +181 -0
  65. data/lib/ronin/support/binary/ctypes/float32_type.rb +50 -0
  66. data/lib/ronin/support/binary/ctypes/float64_type.rb +50 -0
  67. data/lib/ronin/support/binary/ctypes/float_type.rb +62 -0
  68. data/lib/ronin/support/binary/ctypes/int16_type.rb +50 -0
  69. data/lib/ronin/support/binary/ctypes/int32_type.rb +50 -0
  70. data/lib/ronin/support/binary/ctypes/int64_type.rb +50 -0
  71. data/lib/ronin/support/binary/ctypes/int8_type.rb +41 -0
  72. data/lib/ronin/support/binary/ctypes/int_type.rb +62 -0
  73. data/lib/ronin/support/binary/ctypes/little_endian.rb +195 -0
  74. data/lib/ronin/support/binary/ctypes/mixin.rb +135 -0
  75. data/lib/ronin/support/binary/ctypes/native.rb +205 -0
  76. data/lib/ronin/support/binary/ctypes/network.rb +29 -0
  77. data/lib/ronin/support/binary/ctypes/object_type.rb +55 -0
  78. data/lib/ronin/support/binary/ctypes/os/bsd.rb +65 -0
  79. data/lib/ronin/support/binary/ctypes/os/freebsd.rb +215 -0
  80. data/lib/ronin/support/binary/ctypes/os/linux.rb +193 -0
  81. data/lib/ronin/support/binary/ctypes/os/macos.rb +151 -0
  82. data/lib/ronin/support/binary/ctypes/os/netbsd.rb +147 -0
  83. data/lib/ronin/support/binary/ctypes/os/openbsd.rb +168 -0
  84. data/lib/ronin/support/binary/ctypes/os/unix.rb +78 -0
  85. data/lib/ronin/support/binary/ctypes/os/windows.rb +125 -0
  86. data/lib/ronin/support/binary/ctypes/os.rb +125 -0
  87. data/lib/ronin/support/binary/ctypes/scalar_type.rb +200 -0
  88. data/lib/ronin/support/binary/ctypes/string_type.rb +143 -0
  89. data/lib/ronin/support/binary/ctypes/struct_object_type.rb +173 -0
  90. data/lib/ronin/support/binary/ctypes/struct_type.rb +359 -0
  91. data/lib/ronin/support/binary/ctypes/type.rb +193 -0
  92. data/lib/ronin/support/binary/ctypes/type_resolver.rb +206 -0
  93. data/lib/ronin/support/binary/ctypes/uint16_type.rb +50 -0
  94. data/lib/ronin/support/binary/ctypes/uint32_type.rb +50 -0
  95. data/lib/ronin/support/binary/ctypes/uint64_type.rb +50 -0
  96. data/lib/ronin/support/binary/ctypes/uint8_type.rb +41 -0
  97. data/lib/ronin/support/binary/ctypes/uint_type.rb +59 -0
  98. data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +258 -0
  99. data/lib/ronin/support/binary/ctypes/union_object_type.rb +173 -0
  100. data/lib/ronin/support/binary/ctypes/union_type.rb +261 -0
  101. data/lib/ronin/support/binary/ctypes.rb +462 -0
  102. data/lib/ronin/support/binary/hexdump/core_ext/file.rb +118 -0
  103. data/lib/ronin/support/binary/hexdump/core_ext/string.rb +115 -0
  104. data/lib/ronin/support/binary/hexdump/core_ext.rb +20 -0
  105. data/lib/ronin/support/binary/hexdump/parser.rb +492 -0
  106. data/lib/ronin/support/binary/hexdump.rb +20 -0
  107. data/lib/ronin/support/binary/memory.rb +268 -0
  108. data/lib/ronin/support/binary/packet.rb +33 -0
  109. data/lib/ronin/support/binary/stack.rb +256 -0
  110. data/lib/ronin/support/binary/stream/methods.rb +1755 -0
  111. data/lib/ronin/support/binary/stream.rb +151 -0
  112. data/lib/ronin/support/binary/struct/member.rb +86 -0
  113. data/lib/ronin/support/binary/struct.rb +830 -0
  114. data/lib/ronin/support/binary/template.rb +284 -0
  115. data/lib/ronin/support/binary/union.rb +162 -0
  116. data/lib/ronin/support/binary.rb +26 -0
  117. data/lib/ronin/support/cli/ansi.rb +330 -0
  118. data/lib/ronin/support/cli/io_shell/core_ext/io.rb +67 -0
  119. data/lib/ronin/{fuzzing/extensions.rb → support/cli/io_shell/core_ext.rb} +6 -7
  120. data/lib/ronin/support/cli/io_shell.rb +161 -0
  121. data/lib/ronin/support/cli/printing.rb +216 -0
  122. data/lib/ronin/support/cli.rb +20 -0
  123. data/lib/ronin/support/compression/core_ext/file.rb +70 -0
  124. data/lib/ronin/support/compression/core_ext/string.rb +101 -0
  125. data/lib/ronin/{formatting/html.rb → support/compression/core_ext.rb} +6 -7
  126. data/lib/ronin/support/compression/gzip/reader.rb +70 -0
  127. data/lib/ronin/support/compression/gzip/writer.rb +74 -0
  128. data/lib/ronin/support/compression/gzip.rb +105 -0
  129. data/lib/ronin/support/compression/mixin.rb +180 -0
  130. data/lib/ronin/{network/extensions/esmtp/net.rb → support/compression/zlib.rb} +9 -10
  131. data/lib/ronin/support/compression.rb +174 -0
  132. data/lib/ronin/{extensions → support/core_ext}/enumerable.rb +5 -6
  133. data/lib/ronin/{extensions → support/core_ext}/file.rb +11 -34
  134. data/lib/ronin/support/core_ext/integer.rb +37 -0
  135. data/lib/ronin/support/core_ext/ipaddr.rb +65 -0
  136. data/lib/ronin/{extensions → support/core_ext}/kernel.rb +10 -9
  137. data/lib/ronin/{extensions → support/core_ext}/resolv.rb +5 -28
  138. data/lib/ronin/{extensions → support/core_ext}/string.rb +117 -57
  139. data/lib/ronin/support/core_ext.rb +33 -0
  140. data/lib/ronin/support/crypto/cert.rb +522 -0
  141. data/lib/ronin/support/crypto/cert_chain.rb +204 -0
  142. data/lib/ronin/support/crypto/cipher/aes.rb +71 -0
  143. data/lib/ronin/support/crypto/cipher/aes128.rb +54 -0
  144. data/lib/ronin/support/crypto/cipher/aes256.rb +54 -0
  145. data/lib/ronin/support/crypto/cipher.rb +194 -0
  146. data/lib/ronin/support/crypto/core_ext/file.rb +660 -0
  147. data/lib/ronin/support/crypto/core_ext/string.rb +548 -0
  148. data/lib/ronin/{binary.rb → support/crypto/core_ext.rb} +7 -8
  149. data/lib/ronin/support/crypto/hmac.rb +48 -0
  150. data/lib/ronin/support/crypto/key/dh.rb +122 -0
  151. data/lib/ronin/support/crypto/key/dsa.rb +103 -0
  152. data/lib/ronin/support/crypto/key/ec.rb +99 -0
  153. data/lib/ronin/support/crypto/key/methods.rb +163 -0
  154. data/lib/ronin/support/crypto/key/rsa.rb +169 -0
  155. data/lib/ronin/support/crypto/key.rb +105 -0
  156. data/lib/ronin/support/crypto/mixin.rb +620 -0
  157. data/lib/ronin/{network/extensions/http/net.rb → support/crypto/openssl.rb} +9 -10
  158. data/lib/ronin/support/crypto.rb +779 -0
  159. data/lib/ronin/support/encoding/base16/core_ext/string.rb +63 -0
  160. data/lib/ronin/support/encoding/base16/core_ext.rb +19 -0
  161. data/lib/ronin/support/encoding/base16.rb +82 -0
  162. data/lib/ronin/support/encoding/base32/core_ext/string.rb +63 -0
  163. data/lib/ronin/support/encoding/base32/core_ext.rb +19 -0
  164. data/lib/ronin/support/encoding/base32.rb +164 -0
  165. data/lib/ronin/support/encoding/base64/core_ext/string.rb +76 -0
  166. data/lib/ronin/support/encoding/base64/core_ext.rb +19 -0
  167. data/lib/ronin/support/encoding/base64.rb +78 -0
  168. data/lib/ronin/support/encoding/c/core_ext/integer.rb +82 -0
  169. data/lib/ronin/support/encoding/c/core_ext/string.rb +125 -0
  170. data/lib/ronin/support/encoding/c/core_ext.rb +20 -0
  171. data/lib/ronin/support/encoding/c.rb +277 -0
  172. data/lib/ronin/support/encoding/core_ext/string.rb +107 -0
  173. data/lib/ronin/support/encoding/core_ext.rb +33 -0
  174. data/lib/ronin/support/encoding/hex/core_ext/integer.rb +82 -0
  175. data/lib/ronin/support/encoding/hex/core_ext/string.rb +133 -0
  176. data/lib/ronin/support/encoding/hex/core_ext.rb +22 -0
  177. data/lib/ronin/support/encoding/hex.rb +248 -0
  178. data/lib/ronin/support/encoding/html/core_ext/integer.rb +106 -0
  179. data/lib/ronin/support/encoding/html/core_ext/string.rb +130 -0
  180. data/lib/ronin/support/encoding/html/core_ext.rb +20 -0
  181. data/lib/ronin/support/encoding/html.rb +233 -0
  182. data/lib/ronin/support/encoding/http/core_ext/integer.rb +95 -0
  183. data/lib/ronin/support/encoding/http/core_ext/string.rb +129 -0
  184. data/lib/ronin/support/encoding/http/core_ext.rb +20 -0
  185. data/lib/ronin/support/encoding/http.rb +241 -0
  186. data/lib/ronin/support/encoding/js/core_ext/integer.rb +67 -0
  187. data/lib/ronin/support/encoding/js/core_ext/string.rb +125 -0
  188. data/lib/ronin/support/encoding/js/core_ext.rb +20 -0
  189. data/lib/ronin/support/encoding/js.rb +279 -0
  190. data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +87 -0
  191. data/lib/ronin/support/encoding/powershell/core_ext/string.rb +145 -0
  192. data/lib/ronin/support/encoding/powershell/core_ext.rb +20 -0
  193. data/lib/ronin/support/encoding/powershell.rb +297 -0
  194. data/lib/ronin/support/encoding/punycode/core_ext/string.rb +63 -0
  195. data/lib/ronin/support/encoding/punycode/core_ext.rb +19 -0
  196. data/lib/ronin/support/encoding/punycode.rb +76 -0
  197. data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +75 -0
  198. data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +19 -0
  199. data/lib/ronin/support/encoding/quoted_printable.rb +102 -0
  200. data/lib/ronin/support/encoding/ruby/core_ext/string.rb +129 -0
  201. data/lib/ronin/{formatting/binary.rb → support/encoding/ruby/core_ext.rb} +6 -7
  202. data/lib/ronin/support/encoding/ruby.rb +235 -0
  203. data/lib/ronin/support/encoding/shell/core_ext/integer.rb +89 -0
  204. data/lib/ronin/support/encoding/shell/core_ext/string.rb +134 -0
  205. data/lib/ronin/support/encoding/shell/core_ext.rb +20 -0
  206. data/lib/ronin/support/encoding/shell.rb +293 -0
  207. data/lib/ronin/{network/extensions → support/encoding}/smtp.rb +7 -7
  208. data/lib/ronin/support/encoding/sql/core_ext/string.rb +114 -0
  209. data/lib/ronin/{formatting/http.rb → support/encoding/sql/core_ext.rb} +6 -7
  210. data/lib/ronin/support/encoding/sql.rb +124 -0
  211. data/lib/ronin/support/encoding/uri/core_ext/integer.rb +149 -0
  212. data/lib/ronin/support/encoding/uri/core_ext/string.rb +195 -0
  213. data/lib/ronin/support/encoding/uri/core_ext.rb +20 -0
  214. data/lib/ronin/support/encoding/uri.rb +424 -0
  215. data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +73 -0
  216. data/lib/ronin/support/encoding/uuencoding/core_ext.rb +19 -0
  217. data/lib/ronin/support/encoding/uuencoding.rb +70 -0
  218. data/lib/ronin/support/encoding/xml/core_ext/integer.rb +100 -0
  219. data/lib/ronin/support/encoding/xml/core_ext/string.rb +124 -0
  220. data/lib/ronin/support/encoding/xml/core_ext.rb +20 -0
  221. data/lib/ronin/support/encoding/xml.rb +328 -0
  222. data/lib/ronin/support/encoding.rb +46 -0
  223. data/lib/ronin/support/home.rb +88 -0
  224. data/lib/ronin/support/mixin.rb +42 -0
  225. data/lib/ronin/support/network/asn/dns_record.rb +112 -0
  226. data/lib/ronin/support/network/asn/list.rb +269 -0
  227. data/lib/ronin/support/network/asn/record.rb +164 -0
  228. data/lib/ronin/support/network/asn/record_set.rb +226 -0
  229. data/lib/ronin/support/network/asn.rb +88 -0
  230. data/lib/ronin/{binary/hexdump.rb → support/network/core_ext.rb} +6 -7
  231. data/lib/ronin/support/network/dns/idn.rb +38 -0
  232. data/lib/ronin/support/network/dns/mixin.rb +941 -0
  233. data/lib/ronin/support/network/dns/resolver.rb +707 -0
  234. data/lib/ronin/support/network/dns.rb +1109 -0
  235. data/lib/ronin/support/network/domain.rb +70 -0
  236. data/lib/ronin/support/network/email_address.rb +574 -0
  237. data/lib/ronin/support/network/esmtp/mixin.rb +115 -0
  238. data/lib/ronin/support/network/exceptions.rb +43 -0
  239. data/lib/ronin/support/network/ftp/mixin.rb +106 -0
  240. data/lib/ronin/support/network/host.rb +1473 -0
  241. data/lib/ronin/support/network/http/cookie.rb +245 -0
  242. data/lib/ronin/support/network/http/core_ext/uri/http.rb +63 -0
  243. data/lib/ronin/support/network/http/core_ext.rb +19 -0
  244. data/lib/ronin/support/network/http/mixin.rb +890 -0
  245. data/lib/ronin/support/network/http/request.rb +215 -0
  246. data/lib/ronin/support/network/http/set_cookie.rb +210 -0
  247. data/lib/ronin/support/network/http/user_agents.rb +115 -0
  248. data/lib/ronin/support/network/http.rb +2582 -0
  249. data/lib/ronin/support/network/imap/mixin.rb +133 -0
  250. data/lib/ronin/support/network/ip/mixin.rb +114 -0
  251. data/lib/ronin/support/network/ip.rb +540 -0
  252. data/lib/ronin/support/network/ip_range/cidr.rb +252 -0
  253. data/lib/ronin/support/network/ip_range/glob.rb +309 -0
  254. data/lib/ronin/support/network/ip_range/range.rb +249 -0
  255. data/lib/ronin/support/network/ip_range.rb +284 -0
  256. data/lib/ronin/support/network/mixin.rb +58 -0
  257. data/lib/ronin/support/network/packet.rb +27 -0
  258. data/lib/ronin/support/network/pop3/mixin.rb +113 -0
  259. data/lib/ronin/support/network/proxy.rb +602 -0
  260. data/lib/ronin/support/network/public_suffix/list.rb +339 -0
  261. data/lib/ronin/support/network/public_suffix/suffix.rb +118 -0
  262. data/lib/ronin/support/network/public_suffix/suffix_set.rb +150 -0
  263. data/lib/ronin/support/network/public_suffix.rb +41 -0
  264. data/lib/ronin/support/network/smtp/email.rb +190 -0
  265. data/lib/ronin/support/network/smtp/mixin.rb +290 -0
  266. data/lib/ronin/{extensions/meta.rb → support/network/smtp.rb} +6 -7
  267. data/lib/ronin/support/network/ssl/local_cert.rb +114 -0
  268. data/lib/ronin/support/network/ssl/local_key.rb +84 -0
  269. data/lib/ronin/support/network/ssl/mixin.rb +740 -0
  270. data/lib/ronin/{network/extensions/imap/net.rb → support/network/ssl/openssl.rb} +9 -10
  271. data/lib/ronin/support/network/ssl/proxy.rb +296 -0
  272. data/lib/ronin/support/network/ssl.rb +173 -0
  273. data/lib/ronin/support/network/tcp/mixin.rb +400 -0
  274. data/lib/ronin/support/network/tcp/proxy.rb +435 -0
  275. data/lib/ronin/support/network/tcp.rb +443 -0
  276. data/lib/ronin/support/network/telnet/mixin.rb +150 -0
  277. data/lib/ronin/support/network/telnet.rb +90 -0
  278. data/lib/ronin/support/network/tld/list.rb +266 -0
  279. data/lib/ronin/support/network/tld.rb +41 -0
  280. data/lib/ronin/support/network/tls/mixin.rb +670 -0
  281. data/lib/ronin/support/network/tls/proxy.rb +135 -0
  282. data/lib/ronin/support/network/tls.rb +53 -0
  283. data/lib/ronin/support/network/udp/mixin.rb +389 -0
  284. data/lib/ronin/support/network/udp/proxy.rb +192 -0
  285. data/lib/ronin/support/network/udp.rb +435 -0
  286. data/lib/ronin/support/network/unix/mixin.rb +273 -0
  287. data/lib/ronin/support/network.rb +37 -0
  288. data/lib/ronin/support/path.rb +136 -0
  289. data/lib/ronin/{network/extensions/dns/net.rb → support/text/core_ext/regexp.rb} +8 -9
  290. data/lib/ronin/support/text/core_ext/string.rb +46 -0
  291. data/lib/ronin/support/text/core_ext.rb +23 -0
  292. data/lib/ronin/support/text/entropy/core_ext/string.rb +45 -0
  293. data/lib/ronin/support/text/entropy/core_ext.rb +19 -0
  294. data/lib/ronin/support/text/entropy.rb +66 -0
  295. data/lib/ronin/support/text/erb/mixin.rb +44 -0
  296. data/lib/ronin/support/text/erb.rb +19 -0
  297. data/lib/ronin/support/text/homoglyph/core_ext/string.rb +108 -0
  298. data/lib/ronin/{formatting/digest.rb → support/text/homoglyph/core_ext.rb} +6 -7
  299. data/lib/ronin/{network/http/exceptions/unknown_request.rb → support/text/homoglyph/exceptions.rb} +10 -9
  300. data/lib/ronin/support/text/homoglyph/table.rb +228 -0
  301. data/lib/ronin/support/text/homoglyph.rb +142 -0
  302. data/lib/ronin/support/text/mixin.rb +31 -0
  303. data/lib/ronin/support/text/patterns/credentials.rb +75 -0
  304. data/lib/ronin/support/text/patterns/crypto.rb +67 -0
  305. data/lib/ronin/support/text/patterns/file_system.rb +93 -0
  306. data/lib/ronin/support/text/patterns/language.rb +37 -0
  307. data/lib/ronin/support/text/patterns/network/public_suffix.rb +44 -0
  308. data/lib/ronin/support/text/patterns/network.rb +140 -0
  309. data/lib/ronin/support/text/patterns/numeric.rb +52 -0
  310. data/lib/ronin/support/text/patterns/pii.rb +105 -0
  311. data/lib/ronin/support/text/patterns/source_code.rb +148 -0
  312. data/lib/ronin/support/text/patterns.rb +25 -0
  313. data/lib/ronin/support/text/random/mixin.rb +437 -0
  314. data/lib/ronin/support/text/random.rb +419 -0
  315. data/lib/ronin/support/text/typo/core_ext/string.rb +123 -0
  316. data/lib/ronin/support/text/typo/core_ext.rb +19 -0
  317. data/lib/ronin/support/text/typo/exceptions.rb +28 -0
  318. data/lib/ronin/support/text/typo/generator.rb +161 -0
  319. data/lib/ronin/support/text/typo.rb +260 -0
  320. data/lib/ronin/support/text.rb +26 -0
  321. data/lib/ronin/support/version.rb +6 -7
  322. data/lib/ronin/support.rb +20 -15
  323. data/ronin-support.gemspec +3 -1
  324. metadata +462 -369
  325. data/.gemtest +0 -0
  326. data/lib/ronin/binary/hexdump/parser.rb +0 -403
  327. data/lib/ronin/binary/struct.rb +0 -567
  328. data/lib/ronin/binary/template.rb +0 -454
  329. data/lib/ronin/extensions/ip_addr.rb +0 -217
  330. data/lib/ronin/extensions/meta/object.rb +0 -24
  331. data/lib/ronin/extensions/regexp.rb +0 -157
  332. data/lib/ronin/extensions.rb +0 -29
  333. data/lib/ronin/formatting/extensions/binary/array.rb +0 -61
  334. data/lib/ronin/formatting/extensions/binary/base64.rb +0 -106
  335. data/lib/ronin/formatting/extensions/binary/file.rb +0 -77
  336. data/lib/ronin/formatting/extensions/binary/float.rb +0 -65
  337. data/lib/ronin/formatting/extensions/binary/integer.rb +0 -180
  338. data/lib/ronin/formatting/extensions/binary/string.rb +0 -345
  339. data/lib/ronin/formatting/extensions/binary.rb +0 -26
  340. data/lib/ronin/formatting/extensions/digest/file.rb +0 -129
  341. data/lib/ronin/formatting/extensions/digest/string.rb +0 -86
  342. data/lib/ronin/formatting/extensions/digest.rb +0 -21
  343. data/lib/ronin/formatting/extensions/html/integer.rb +0 -142
  344. data/lib/ronin/formatting/extensions/html/string.rb +0 -194
  345. data/lib/ronin/formatting/extensions/html.rb +0 -21
  346. data/lib/ronin/formatting/extensions/http/integer.rb +0 -69
  347. data/lib/ronin/formatting/extensions/http/string.rb +0 -110
  348. data/lib/ronin/formatting/extensions/http.rb +0 -21
  349. data/lib/ronin/formatting/extensions/sql/string.rb +0 -128
  350. data/lib/ronin/formatting/extensions/sql.rb +0 -20
  351. data/lib/ronin/formatting/extensions/text/array.rb +0 -137
  352. data/lib/ronin/formatting/extensions/text/string.rb +0 -297
  353. data/lib/ronin/formatting/extensions.rb +0 -24
  354. data/lib/ronin/formatting/text.rb +0 -20
  355. data/lib/ronin/formatting.rb +0 -25
  356. data/lib/ronin/fuzzing/extensions/string.rb +0 -209
  357. data/lib/ronin/fuzzing/fuzzer.rb +0 -110
  358. data/lib/ronin/fuzzing/fuzzing.rb +0 -360
  359. data/lib/ronin/fuzzing/mutator.rb +0 -161
  360. data/lib/ronin/fuzzing/repeater.rb +0 -81
  361. data/lib/ronin/fuzzing/template.rb +0 -133
  362. data/lib/ronin/fuzzing.rb +0 -21
  363. data/lib/ronin/mixin.rb +0 -89
  364. data/lib/ronin/network/dns.rb +0 -201
  365. data/lib/ronin/network/esmtp.rb +0 -113
  366. data/lib/ronin/network/extensions/dns.rb +0 -20
  367. data/lib/ronin/network/extensions/esmtp.rb +0 -20
  368. data/lib/ronin/network/extensions/http/uri/http.rb +0 -228
  369. data/lib/ronin/network/extensions/http.rb +0 -21
  370. data/lib/ronin/network/extensions/imap.rb +0 -20
  371. data/lib/ronin/network/extensions/pop3/net.rb +0 -24
  372. data/lib/ronin/network/extensions/pop3.rb +0 -20
  373. data/lib/ronin/network/extensions/smtp/net.rb +0 -24
  374. data/lib/ronin/network/extensions/ssl/net.rb +0 -24
  375. data/lib/ronin/network/extensions/ssl.rb +0 -20
  376. data/lib/ronin/network/extensions/tcp/net.rb +0 -24
  377. data/lib/ronin/network/extensions/tcp.rb +0 -20
  378. data/lib/ronin/network/extensions/telnet/net.rb +0 -24
  379. data/lib/ronin/network/extensions/telnet.rb +0 -20
  380. data/lib/ronin/network/extensions/udp/net.rb +0 -24
  381. data/lib/ronin/network/extensions/udp.rb +0 -20
  382. data/lib/ronin/network/extensions.rb +0 -29
  383. data/lib/ronin/network/ftp.rb +0 -149
  384. data/lib/ronin/network/http/exceptions.rb +0 -20
  385. data/lib/ronin/network/http/http.rb +0 -1127
  386. data/lib/ronin/network/http/proxy.rb +0 -330
  387. data/lib/ronin/network/http.rb +0 -22
  388. data/lib/ronin/network/imap.rb +0 -158
  389. data/lib/ronin/network/mixins/dns.rb +0 -55
  390. data/lib/ronin/network/mixins/esmtp.rb +0 -164
  391. data/lib/ronin/network/mixins/ftp.rb +0 -155
  392. data/lib/ronin/network/mixins/http.rb +0 -227
  393. data/lib/ronin/network/mixins/imap.rb +0 -156
  394. data/lib/ronin/network/mixins/mixin.rb +0 -58
  395. data/lib/ronin/network/mixins/pop3.rb +0 -149
  396. data/lib/ronin/network/mixins/smtp.rb +0 -159
  397. data/lib/ronin/network/mixins/ssl.rb +0 -148
  398. data/lib/ronin/network/mixins/tcp.rb +0 -368
  399. data/lib/ronin/network/mixins/telnet.rb +0 -208
  400. data/lib/ronin/network/mixins/udp.rb +0 -381
  401. data/lib/ronin/network/mixins/unix.rb +0 -279
  402. data/lib/ronin/network/mixins.rb +0 -29
  403. data/lib/ronin/network/network.rb +0 -45
  404. data/lib/ronin/network/pop3.rb +0 -124
  405. data/lib/ronin/network/proxy.rb +0 -578
  406. data/lib/ronin/network/smtp/email.rb +0 -174
  407. data/lib/ronin/network/smtp/smtp.rb +0 -230
  408. data/lib/ronin/network/smtp.rb +0 -22
  409. data/lib/ronin/network/ssl.rb +0 -186
  410. data/lib/ronin/network/tcp/proxy.rb +0 -417
  411. data/lib/ronin/network/tcp/tcp.rb +0 -443
  412. data/lib/ronin/network/tcp.rb +0 -21
  413. data/lib/ronin/network/telnet.rb +0 -264
  414. data/lib/ronin/network/udp/proxy.rb +0 -191
  415. data/lib/ronin/network/udp/udp.rb +0 -450
  416. data/lib/ronin/network/udp.rb +0 -21
  417. data/lib/ronin/network/unix.rb +0 -286
  418. data/lib/ronin/network.rb +0 -31
  419. data/lib/ronin/path.rb +0 -137
  420. data/lib/ronin/spec/ui/output.rb +0 -22
  421. data/lib/ronin/support/inflector.rb +0 -92
  422. data/lib/ronin/support/support.rb +0 -42
  423. data/lib/ronin/templates/erb.rb +0 -78
  424. data/lib/ronin/templates/template.rb +0 -169
  425. data/lib/ronin/templates.rb +0 -21
  426. data/lib/ronin/ui/output/helpers.rb +0 -296
  427. data/lib/ronin/ui/output/output.rb +0 -146
  428. data/lib/ronin/ui/output/terminal/color.rb +0 -124
  429. data/lib/ronin/ui/output/terminal/raw.rb +0 -103
  430. data/lib/ronin/ui/output/terminal.rb +0 -21
  431. data/lib/ronin/ui/output.rb +0 -21
  432. data/lib/ronin/ui/shell.rb +0 -286
  433. data/lib/ronin/wordlist.rb +0 -287
  434. data/spec/binary/hexdump/helpers/hexdumps/ascii.bin +0 -0
  435. data/spec/binary/hexdump/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -17
  436. data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_bytes.txt +0 -17
  437. data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_shorts.txt +0 -17
  438. data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_bytes.txt +0 -17
  439. data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_shorts.txt +0 -17
  440. data/spec/binary/hexdump/helpers/hexdumps/hexdump_repeated.txt +0 -6
  441. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_bytes.txt +0 -17
  442. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_ints.txt +0 -17
  443. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_quads.txt +0 -17
  444. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_shorts.txt +0 -17
  445. data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +0 -17
  446. data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +0 -17
  447. data/spec/binary/hexdump/helpers/hexdumps/od_hex_bytes.txt +0 -17
  448. data/spec/binary/hexdump/helpers/hexdumps/od_hex_ints.txt +0 -17
  449. data/spec/binary/hexdump/helpers/hexdumps/od_hex_quads.txt +0 -17
  450. data/spec/binary/hexdump/helpers/hexdumps/od_hex_shorts.txt +0 -17
  451. data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +0 -17
  452. data/spec/binary/hexdump/helpers/hexdumps/od_octal_bytes.txt +0 -17
  453. data/spec/binary/hexdump/helpers/hexdumps/od_octal_ints.txt +0 -17
  454. data/spec/binary/hexdump/helpers/hexdumps/od_octal_quads.txt +0 -17
  455. data/spec/binary/hexdump/helpers/hexdumps/od_octal_shorts.txt +0 -17
  456. data/spec/binary/hexdump/helpers/hexdumps/od_repeated.txt +0 -6
  457. data/spec/binary/hexdump/helpers/hexdumps/repeated.bin +0 -1
  458. data/spec/binary/hexdump/helpers/hexdumps.rb +0 -13
  459. data/spec/binary/hexdump/parser_spec.rb +0 -302
  460. data/spec/binary/struct_spec.rb +0 -496
  461. data/spec/binary/template_spec.rb +0 -414
  462. data/spec/extensions/enumerable_spec.rb +0 -24
  463. data/spec/extensions/file_spec.rb +0 -63
  464. data/spec/extensions/ip_addr_spec.rb +0 -203
  465. data/spec/extensions/kernel_spec.rb +0 -30
  466. data/spec/extensions/regexp_spec.rb +0 -482
  467. data/spec/extensions/resolv_spec.rb +0 -18
  468. data/spec/extensions/string_spec.rb +0 -179
  469. data/spec/formatting/binary/array_spec.rb +0 -26
  470. data/spec/formatting/binary/base64_spec.rb +0 -50
  471. data/spec/formatting/binary/float_spec.rb +0 -34
  472. data/spec/formatting/binary/integer_spec.rb +0 -166
  473. data/spec/formatting/binary/string_spec.rb +0 -197
  474. data/spec/formatting/digest/string_spec.rb +0 -82
  475. data/spec/formatting/html/integer_spec.rb +0 -66
  476. data/spec/formatting/html/string_spec.rb +0 -103
  477. data/spec/formatting/http/integer_spec.rb +0 -42
  478. data/spec/formatting/http/string_spec.rb +0 -76
  479. data/spec/formatting/sql/string_spec.rb +0 -75
  480. data/spec/formatting/text/array_spec.rb +0 -105
  481. data/spec/formatting/text/string_spec.rb +0 -162
  482. data/spec/fuzzing/extensions/string_spec.rb +0 -87
  483. data/spec/fuzzing/fuzzer_spec.rb +0 -109
  484. data/spec/fuzzing/fuzzing_spec.rb +0 -24
  485. data/spec/fuzzing/mutator_spec.rb +0 -112
  486. data/spec/fuzzing/repeater_spec.rb +0 -57
  487. data/spec/fuzzing/template_spec.rb +0 -54
  488. data/spec/mixin_spec.rb +0 -53
  489. data/spec/network/dns_spec.rb +0 -201
  490. data/spec/network/ftp_spec.rb +0 -81
  491. data/spec/network/http/http_spec.rb +0 -466
  492. data/spec/network/http/proxy_spec.rb +0 -148
  493. data/spec/network/network_spec.rb +0 -8
  494. data/spec/network/proxy_spec.rb +0 -121
  495. data/spec/network/shared/unix_server.rb +0 -31
  496. data/spec/network/smtp/email_spec.rb +0 -100
  497. data/spec/network/ssl_spec.rb +0 -70
  498. data/spec/network/tcp/proxy_spec.rb +0 -116
  499. data/spec/network/tcp/tcp_spec.rb +0 -273
  500. data/spec/network/telnet_spec.rb +0 -67
  501. data/spec/network/udp/udp_spec.rb +0 -271
  502. data/spec/network/unix_spec.rb +0 -183
  503. data/spec/path_spec.rb +0 -86
  504. data/spec/spec_helper.rb +0 -9
  505. data/spec/support/inflector_spec.rb +0 -22
  506. data/spec/support_spec.rb +0 -8
  507. data/spec/templates/classes/example_erb.rb +0 -11
  508. data/spec/templates/classes/example_template.rb +0 -35
  509. data/spec/templates/erb_spec.rb +0 -21
  510. data/spec/templates/helpers/data/includes/_relative.erb +0 -1
  511. data/spec/templates/helpers/data/templates/example.erb +0 -1
  512. data/spec/templates/helpers/data.rb +0 -9
  513. data/spec/templates/template_spec.rb +0 -54
  514. data/spec/ui/classes/test_shell.rb +0 -22
  515. data/spec/ui/output_spec.rb +0 -32
  516. data/spec/ui/shell_spec.rb +0 -83
  517. data/spec/wordlist_spec.rb +0 -151
@@ -0,0 +1,707 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ # Copyright (c) 2006-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
4
+ #
5
+ # ronin-support is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Lesser General Public License as published
7
+ # by the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # ronin-support is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public License
16
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
17
+ #
18
+
19
+ require 'ronin/support/network/dns/idn'
20
+
21
+ require 'resolv'
22
+
23
+ module Ronin
24
+ module Support
25
+ module Network
26
+ module DNS
27
+ #
28
+ # Wraps around [Resolv::DNS].
29
+ #
30
+ # [Resolv::DNS]: https://rubydoc.info/stdlib/resolv/Resolv/DNS
31
+ #
32
+ # @api semipublic
33
+ #
34
+ # @since 1.0.0
35
+ #
36
+ class Resolver
37
+
38
+ # The nameserver(s) to query.
39
+ #
40
+ # @return [Array<String>]
41
+ attr_reader :nameservers
42
+
43
+ #
44
+ # Initializes the resolver.
45
+ #
46
+ # @param [Array<String>] nameservers
47
+ # The nameserver(s) to query.
48
+ #
49
+ # @param [String, nil] nameserver
50
+ # The optional singular nameserver to query.
51
+ #
52
+ # @example Creating a DNS resolver with a single nameserver:
53
+ # resolver = Resolver.new(nameserver: '1.1.1.1')
54
+ #
55
+ # @example Creating a DNS resolver with multiple nameservers:
56
+ # resolver = Resolver.new(nameservers: ['1.1.1.1', '8.8.8.8'])
57
+ #
58
+ def initialize(nameservers: self.class.default_nameservers,
59
+ nameserver: nil)
60
+ @nameservers = if nameserver then [nameserver]
61
+ else nameservers
62
+ end
63
+
64
+ @resolver = Resolv::DNS.new(nameserver: @nameservers)
65
+ end
66
+
67
+ #
68
+ # The system's nameserver(s) to use by default.
69
+ #
70
+ # @return [Array<String>]
71
+ # The nameserver(s) IP addresses.
72
+ #
73
+ def self.default_nameservers
74
+ @default_nameservers ||= Resolv::DNS::Config.default_config_hash[:nameserver]
75
+ end
76
+
77
+ #
78
+ # Queries the first IP address for the given host name.
79
+ #
80
+ # @param [String] host
81
+ # The host name to query.
82
+ #
83
+ # @return [String, nil]
84
+ # The first IP address for the host name or `nil` if the host name
85
+ # has no IP addresses.
86
+ #
87
+ def get_address(host)
88
+ host = IDN.to_ascii(host)
89
+
90
+ begin
91
+ @resolver.getaddress(host).to_s
92
+ rescue Resolv::ResolvError
93
+ end
94
+ end
95
+
96
+ #
97
+ # Queries all IP addresses for the given host name.
98
+ #
99
+ # @param [String] host
100
+ # The host name to query.
101
+ #
102
+ # @return [Array<String>]
103
+ # The IP addresses for the host name.
104
+ #
105
+ def get_addresses(host)
106
+ host = IDN.to_ascii(host)
107
+
108
+ addresses = @resolver.getaddresses(host)
109
+ addresses.map!(&:to_s)
110
+ return addresses
111
+ end
112
+
113
+ #
114
+ # Reverse-queries the first host name for the given IP address.
115
+ #
116
+ # @param [String] ip
117
+ # The IP address to reverse lookup.
118
+ #
119
+ # @return [String, nil]
120
+ # The first host name associated with the given IP address or `nil`
121
+ # if no host names could be found for the IP address.
122
+ #
123
+ def get_name(ip)
124
+ @resolver.getname(ip).to_s
125
+ rescue Resolv::ResolvError
126
+ end
127
+
128
+ #
129
+ # Reverse-queries all host names for the given IP address.
130
+ #
131
+ # @param [String] ip
132
+ # The IP address to reverse lookup.
133
+ #
134
+ # @return [Array<String>]
135
+ # The host names associated with the given IP address.
136
+ #
137
+ def get_names(ip)
138
+ names = @resolver.getnames(ip)
139
+ names.map!(&:to_s)
140
+ names
141
+ end
142
+
143
+ # Mapping of record type names to the `Resolv::DNS::Resource::IN`
144
+ # classes.
145
+ #
146
+ # @api private
147
+ RECORD_TYPES = {
148
+ a: Resolv::DNS::Resource::IN::A,
149
+ aaaa: Resolv::DNS::Resource::IN::AAAA,
150
+ any: Resolv::DNS::Resource::IN::ANY,
151
+ cname: Resolv::DNS::Resource::IN::CNAME,
152
+ hinfo: Resolv::DNS::Resource::IN::HINFO,
153
+ loc: Resolv::DNS::Resource::IN::LOC,
154
+ minfo: Resolv::DNS::Resource::IN::MINFO,
155
+ mx: Resolv::DNS::Resource::IN::MX,
156
+ ns: Resolv::DNS::Resource::IN::NS,
157
+ ptr: Resolv::DNS::Resource::IN::PTR,
158
+ soa: Resolv::DNS::Resource::IN::SOA,
159
+ srv: Resolv::DNS::Resource::IN::SRV,
160
+ txt: Resolv::DNS::Resource::IN::TXT,
161
+ wks: Resolv::DNS::Resource::IN::WKS
162
+ }
163
+
164
+ #
165
+ # Queries a single matching DNS record for the host name.
166
+ #
167
+ # @param [String] name
168
+ # The host name to query.
169
+ #
170
+ # @param [:a, :aaaa, :any, :cname, :hinfo, :loc, :minfo, :mx, :ns, :ptr, :soa, :srv, :txt, :wks] record_type
171
+ # The record type.
172
+ #
173
+ # @return [Resolv::DNS::Resource, nil]
174
+ # The matching DNS records or `nil` if no matching DNS records
175
+ # could be found.
176
+ #
177
+ # @raise [ArgumentError]
178
+ # An unlnown record type was given.
179
+ #
180
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource
181
+ #
182
+ def get_record(name,record_type)
183
+ name = IDN.to_ascii(name)
184
+
185
+ record_class = RECORD_TYPES.fetch(record_type) do
186
+ raise(ArgumentError,"record type (#{record_type.inspect}) must be #{RECORD_TYPES.keys.map(&:inspect).join(', ')}")
187
+ end
188
+
189
+ begin
190
+ @resolver.getresource(name,record_class)
191
+ rescue Resolv::ResolvError
192
+ end
193
+ end
194
+
195
+ #
196
+ # Queries all matching DNS records for the host name.
197
+ #
198
+ # @param [String] name
199
+ # The host name to query.
200
+ #
201
+ # @param [:a, :aaaa, :any, :cname, :hinfo, :loc, :minfo, :mx, :ns, :ptr, :soa, :srv, :txt, :wks] record_type
202
+ # The record type.
203
+ #
204
+ # @return [Array<Resolv::DNS::Resource>]
205
+ # All matching DNS records.
206
+ #
207
+ # @raise [ArgumentError]
208
+ # An unlnown record type was given.
209
+ #
210
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource
211
+ #
212
+ def get_records(name,record_type)
213
+ name = IDN.to_ascii(name)
214
+
215
+ record_class = RECORD_TYPES.fetch(record_type) do
216
+ raise(ArgumentError,"record type (#{record_type.inspect}) must be #{RECORD_TYPES.keys.map(&:inspect).join(', ')}")
217
+ end
218
+
219
+ @resolver.getresources(name,record_class)
220
+ end
221
+
222
+ #
223
+ # Queries all records of the host name using the `ANY` DNS query.
224
+ #
225
+ # @param [String] name
226
+ # The host name to query.
227
+ #
228
+ # @return [Array<Resolv::DNS::Resource>]
229
+ # All of the DNS records belonging to the host name.
230
+ #
231
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/ANY
232
+ #
233
+ def get_any_records(name)
234
+ get_records(name,:any)
235
+ end
236
+
237
+ #
238
+ # Queries the `CNAME` record for the host name.
239
+ #
240
+ # @param [String] name
241
+ # The host name to query.
242
+ #
243
+ # @return [Resolv::DNS::Resource::IN::CNAME, nil]
244
+ # The `CNAME` record or `nil` if the host name has no `CNAME`
245
+ # record.
246
+ #
247
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/CNAME
248
+ #
249
+ def get_cname_record(name)
250
+ get_record(name,:cname)
251
+ end
252
+
253
+ #
254
+ # Queries the canonical name for the host name.
255
+ #
256
+ # @param [String] name
257
+ # The host name to query.
258
+ #
259
+ # @return [String, nil]
260
+ # The canonical name for the host or `nil` if the host has no
261
+ # `CNAME` record.
262
+ #
263
+ def get_cname(name)
264
+ if (cname = get_cname_record(name))
265
+ cname.name.to_s
266
+ end
267
+ end
268
+
269
+ #
270
+ # Queries the `HINFO` record for the host name.
271
+ #
272
+ # @param [String] name
273
+ # The host name to query.
274
+ #
275
+ # @return [Resolv::DNS::Resource::IN::HINFO, nil]
276
+ # The `HINFO` DNS record or `nil` if the host name has no `HINFO`
277
+ # record.
278
+ #
279
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/HINFO
280
+ #
281
+ def get_hinfo_record(name)
282
+ get_record(name,:hinfo)
283
+ end
284
+
285
+ #
286
+ # Queries the first `A` record belonging to the host name.
287
+ #
288
+ # @param [String] name
289
+ # The host name to query.
290
+ #
291
+ # @return [Resolv::DNS::Resource::IN::A, nil]
292
+ # The first `A` DNS record or `nil` if the host name has no `A`
293
+ # records.
294
+ #
295
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/A
296
+ #
297
+ def get_a_record(name)
298
+ get_record(name,:a)
299
+ end
300
+
301
+ #
302
+ # Queries the first IPv4 address belonging to the host name.
303
+ #
304
+ # @param [String] name
305
+ # The host name to query.
306
+ #
307
+ # @return [String, nil]
308
+ # The first IPv4 address belonging to the host name.
309
+ #
310
+ def get_a_address(name)
311
+ if (a = get_a_record(name))
312
+ a.address.to_s
313
+ end
314
+ end
315
+
316
+ alias get_ipv4_address get_a_address
317
+
318
+ #
319
+ # Queries all `A` records belonging to the host name.
320
+ #
321
+ # @param [String] name
322
+ # The host name to query.
323
+ #
324
+ # @return [Array<Resolv::DNS::Resource::IN::A>]
325
+ # All of the `A` DNS records belonging to the host name.
326
+ #
327
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/A
328
+ #
329
+ def get_a_records(name)
330
+ get_records(name,:a)
331
+ end
332
+
333
+ #
334
+ # Queries all IPv4 addresses belonging to the host name.
335
+ #
336
+ # @param [String] name
337
+ # The host name to query.
338
+ #
339
+ # @return [Array<String>]
340
+ # All of the IPv4 addresses belonging to the host name.
341
+ #
342
+ def get_a_addresses(name)
343
+ records = get_a_records(name)
344
+ records.map! { |a| a.address.to_s }
345
+ records
346
+ end
347
+
348
+ alias get_ipv4_addresses get_a_addresses
349
+
350
+ #
351
+ # Queries the first `AAAA` DNS records belonging to the host name.
352
+ #
353
+ # @param [String] name
354
+ # The host name to query.
355
+ #
356
+ # @return [Resolv::DNS::Resource::IN::AAAA, nil]
357
+ # The first `AAAA` DNS record or `nil` if the host name has no
358
+ # `AAAA` records.
359
+ #
360
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/AAAA
361
+ #
362
+ def get_aaaa_record(name)
363
+ get_record(name,:aaaa)
364
+ end
365
+
366
+ #
367
+ # Queries the first IPv6 address belonging to the host name.
368
+ #
369
+ # @param [String] name
370
+ # The host name to query.
371
+ #
372
+ # @return [String, nil]
373
+ # The first IPv6 address or `nil` if the host name has no IPv6
374
+ # addresses.
375
+ #
376
+ def get_aaaa_address(name)
377
+ if (aaaa = get_aaaa_record(name))
378
+ aaaa.address.to_s
379
+ end
380
+ end
381
+
382
+ alias get_ipv6_address get_aaaa_address
383
+
384
+ #
385
+ # Queries all `AAAA` DNS records belonging to the host name.
386
+ #
387
+ # @param [String] name
388
+ # The host name to query.
389
+ #
390
+ # @return [Array<Resolv::DNS::Resource::IN::AAAA>]
391
+ # All of the `AAAA` DNS records belonging to the host name.
392
+ #
393
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/AAAA
394
+ #
395
+ def get_aaaa_records(name)
396
+ get_records(name,:aaaa)
397
+ end
398
+
399
+ #
400
+ # Queries all IPv6 addresses belonging to the host name.
401
+ #
402
+ # @param [String] name
403
+ # The host name to query.
404
+ #
405
+ # @return [Array<String>]
406
+ # All IPv6 addresses belonging to the host name.
407
+ #
408
+ def get_aaaa_addresses(name)
409
+ records = get_aaaa_records(name)
410
+ records.map! { |aaaa| aaaa.address.to_s }
411
+ records
412
+ end
413
+
414
+ alias get_ipv6_addresses get_aaaa_addresses
415
+
416
+ #
417
+ # Queries the first IPv4 or IPv6 address belonging to the host name.
418
+ #
419
+ # @param [String] name
420
+ # The host name to query.
421
+ #
422
+ # @return [String, nil]
423
+ # The first IPv4 or IPv6 address or `nil` if the host name has no
424
+ # IPv4 or IPv6 addresses.
425
+ #
426
+ def get_ip_address(name)
427
+ get_ipv4_address(name) || get_ipv6_address(name)
428
+ end
429
+
430
+ #
431
+ # Queries all IPv4 and IPv6 addresses belonging to the host name.
432
+ #
433
+ # @param [String] name
434
+ # The host name to query.
435
+ #
436
+ # @return [Array<String>]
437
+ # All IPv4 and IPv6 addresses belonging to the host name.
438
+ #
439
+ def get_ip_addresses(name)
440
+ get_ipv4_addresses(name).concat(get_ipv6_addresses(name))
441
+ end
442
+
443
+ #
444
+ # Queries all `SRV` DNS records belonging to the host name.
445
+ #
446
+ # @param [String] name
447
+ # The host name to query.
448
+ #
449
+ # @return [Array<Resolv::DNS::Resource::IN::SRV>]
450
+ # All `SRV` DNS records belonging to the host name.
451
+ #
452
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/SRV
453
+ #
454
+ def get_srv_records(name)
455
+ get_records(name,:srv)
456
+ end
457
+
458
+ #
459
+ # Queries all `WKS` (Well-Known-Service) DNS records belonging to the
460
+ # host name.
461
+ #
462
+ # @param [String] name
463
+ # The host name to query.
464
+ #
465
+ # @return [Array<Resolv::DNS::Resource::IN::WKS>]
466
+ # All `WKS` DNS records belonging to the host name.
467
+ #
468
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/IN/WKS
469
+ #
470
+ def get_wks_records(name)
471
+ get_records(name,:wks)
472
+ end
473
+
474
+ #
475
+ # Queries the `LOC` (Location) DNS record of the host name.
476
+ #
477
+ # @param [String] name
478
+ # The host name to query.
479
+ #
480
+ # @return [Resolv::DNS::Resource::LOC, nil]
481
+ # The `LOC` DNS record of the host name or `nil` if the host name
482
+ # has no `LOC` record.
483
+ #
484
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/LOC
485
+ #
486
+ def get_loc_record(name)
487
+ get_record(name,:loc)
488
+ end
489
+
490
+ #
491
+ # Queries the `MINFO` (Machine-Info) DNS record of the host name.
492
+ #
493
+ # @param [String] name
494
+ # The host name to query.
495
+ #
496
+ # @return [Resolv::DNS::Resource::MINFO, nil]
497
+ # The `MINFO` DNS record of the host name or `nil` if the host name
498
+ # has no `MINFO` record.
499
+ #
500
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/MINFO
501
+ #
502
+ def get_minfo_record(name)
503
+ get_record(name,:minfo)
504
+ end
505
+
506
+ #
507
+ # Queries all `MX` DNS records belonging to the host name.
508
+ #
509
+ # @param [String] name
510
+ # The host name to query.
511
+ #
512
+ # @return [Array<Resolv::DNS::Resource::MX>]
513
+ # All `MX` DNS records belonging to the host name.
514
+ #
515
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/MX
516
+ #
517
+ def get_mx_records(name)
518
+ get_records(name,:mx)
519
+ end
520
+
521
+ #
522
+ # Queries the mailservers for the host name.
523
+ #
524
+ # @param [String] name
525
+ # The host name to query.
526
+ #
527
+ # @return [Array<String>]
528
+ # The host names of the mailservers serving the given host name.
529
+ #
530
+ def get_mailservers(name)
531
+ records = get_mx_records(name)
532
+ records.map! { |mx| mx.exchange.to_s }
533
+ records
534
+ end
535
+
536
+ #
537
+ # Queries all `NS` DNS records belonging to the host name.
538
+ #
539
+ # @param [String] name
540
+ # The host name to query.
541
+ #
542
+ # @return [Array<Resolv::DNS::Resource::NS>]
543
+ # All `NS` DNS records belonging to the host name.
544
+ #
545
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/NS
546
+ #
547
+ def get_ns_records(name)
548
+ get_records(name,:ns)
549
+ end
550
+
551
+ #
552
+ # Queries the nameservers for the host name.
553
+ #
554
+ # @param [String] name
555
+ # The host name to query.
556
+ #
557
+ # @return [Array<String>]
558
+ # The host names of the nameservers serving the given host name.
559
+ #
560
+ def get_nameservers(name)
561
+ records = get_ns_records(name)
562
+ records.map! { |ns| ns.name.to_s }
563
+ records
564
+ end
565
+
566
+ #
567
+ # Queries the first `PTR` DNS record for the IP address.
568
+ #
569
+ # @param [String] ip
570
+ # The IP address to query.
571
+ #
572
+ # @return [Resolv::DNS::Resource::PTR, nil]
573
+ # The first `PTR` DNS record of the host name or `nil` if the host
574
+ # name has no `PTR` records.
575
+ #
576
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/PTR
577
+ #
578
+ def get_ptr_record(ip)
579
+ get_record(ip,:ptr)
580
+ end
581
+
582
+ #
583
+ # Queries the `PTR` host name for the IP address.
584
+ #
585
+ # @param [String] ip
586
+ # The IP address to query.
587
+ #
588
+ # @return [String, nil]
589
+ # The host name that points to the given IP.
590
+ #
591
+ def get_ptr_name(ip)
592
+ if (ptr = get_ptr_record(ip))
593
+ ptr.name.to_s
594
+ end
595
+ end
596
+
597
+ #
598
+ # Queries all `PTR` DNS records for the IP address.
599
+ #
600
+ # @param [String] ip
601
+ # The IP address to query.
602
+ #
603
+ # @return [Array<Resolv::DNS::Resource::PTR>]
604
+ # All `PTR` DNS records for the given IP.
605
+ #
606
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/PTR
607
+ #
608
+ def get_ptr_records(ip)
609
+ get_records(ip,:ptr)
610
+ end
611
+
612
+ #
613
+ # Queries all `PTR` names for the IP address.
614
+ #
615
+ # @param [String] ip
616
+ # The IP address to query.
617
+ #
618
+ # @return [Array<String>]
619
+ # The `PTR` names for the given IP.
620
+ #
621
+ def get_ptr_names(ip)
622
+ records = get_ptr_records(ip)
623
+ records.map! { |ptr| ptr.name.to_s }
624
+ records
625
+ end
626
+
627
+ #
628
+ # Queries the first `SOA` DNS record belonging to the host name.
629
+ #
630
+ # @param [String] name
631
+ # The host name to query.
632
+ #
633
+ # @return [Resolv::DNS::Resource::SOA, nil]
634
+ # The first `SOA` DNS record for the host name or `nil` if the host
635
+ # name has no `SOA` records.
636
+ #
637
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/SOA
638
+ #
639
+ def get_soa_record(name)
640
+ get_record(name,:soa)
641
+ end
642
+
643
+ #
644
+ # Queiries the first `TXT` DNS record belonging to the host name.
645
+ #
646
+ # @param [String] name
647
+ # The host name to query.
648
+ #
649
+ # @return [Resolv::DNS::Resource::TXT, nil]
650
+ # The first `TXT` DNS record for the host name or `nil` if the host
651
+ # name has no `TXT` records.
652
+ #
653
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/TXT
654
+ #
655
+ def get_txt_record(name)
656
+ get_record(name,:txt)
657
+ end
658
+
659
+ #
660
+ # Queries the first `TXT` string belonging to the host name.
661
+ #
662
+ # @param [String] name
663
+ # The host name to query.
664
+ #
665
+ # @return [String, nil]
666
+ # The first `TXT` string belonging to the host name or `nil` if the
667
+ # host name has no `TXT` records.
668
+ #
669
+ def get_txt_string(name)
670
+ if (txt = get_txt_record(name))
671
+ txt.strings.join
672
+ end
673
+ end
674
+
675
+ #
676
+ # Queries all `TXT` DNS records belonging to the host name.
677
+ #
678
+ # @param [String] name
679
+ # The host name to query.
680
+ #
681
+ # @return [Array<Resolv::DNS::Resource::TXT>]
682
+ # All of the `TXT` DNS records belonging to the host name.
683
+ #
684
+ # @see https://rubydoc.info/stdlib/resolv/Resolv/DNS/Resource/TXT
685
+ #
686
+ def get_txt_records(name)
687
+ get_records(name,:txt)
688
+ end
689
+
690
+ #
691
+ # Queries all of the `TXT` string values of the host name.
692
+ #
693
+ # @param [String] name
694
+ # The host name to query.
695
+ #
696
+ # @return [Array<String>]
697
+ # All `TXT` string values belonging of the host name.
698
+ #
699
+ def get_txt_strings(name)
700
+ get_txt_records(name).map(&:strings).flatten
701
+ end
702
+
703
+ end
704
+ end
705
+ end
706
+ end
707
+ end