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,443 @@
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/tcp/proxy'
20
+ require 'ronin/support/network/dns/idn'
21
+
22
+ require 'socket'
23
+ require 'timeout'
24
+
25
+ module Ronin
26
+ module Support
27
+ module Network
28
+ #
29
+ # @since 1.0.0
30
+ #
31
+ module TCP
32
+ #
33
+ # Tests whether a remote TCP port is open.
34
+ #
35
+ # @param [String] host
36
+ # The host to connect to.
37
+ #
38
+ # @param [Integer] port
39
+ # The port to connect to.
40
+ #
41
+ # @param [Integer] timeout (5)
42
+ # The maximum time to attempt connecting.
43
+ #
44
+ # @param [Hash{Symbol => Object}] kwargs
45
+ # Additional keyword arguments for {connect}.
46
+ #
47
+ # @option kwargs [String, nil] bind_host
48
+ # The local host to bind to.
49
+ #
50
+ # @option kwargs [Integer, nil] bind_port
51
+ # The local port to bind to.
52
+ #
53
+ # @return [Boolean, nil]
54
+ # Specifies whether the remote TCP port is open.
55
+ # If the connection was not accepted, `nil` will be returned.
56
+ #
57
+ # @example
58
+ # open?('example.com',80)
59
+ # # => true
60
+ #
61
+ # @example Using a timeout:
62
+ # TCP.open?('example.com',1111, timeout: 5)
63
+ # # => nil
64
+ #
65
+ # @api public
66
+ #
67
+ # @since 0.5.0
68
+ #
69
+ def self.open?(host,port, timeout: 5, **kwargs)
70
+ begin
71
+ Timeout.timeout(timeout) do
72
+ socket = connect(host,port,**kwargs)
73
+ socket.close
74
+ end
75
+
76
+ return true
77
+ rescue Timeout::Error
78
+ return nil
79
+ rescue SocketError, SystemCallError
80
+ return false
81
+ end
82
+ end
83
+
84
+ #
85
+ # Creates a new TCP socket connected to a given host and port.
86
+ #
87
+ # @param [String] host
88
+ # The host to connect to.
89
+ #
90
+ # @param [Integer] port
91
+ # The port to connect to.
92
+ #
93
+ # @param [String, nil] bind_host
94
+ # The local host to bind to.
95
+ #
96
+ # @param [Integer, nil] bind_port
97
+ # The local port to bind to.
98
+ #
99
+ # @yield [socket]
100
+ # If a block is given, it will be passed the newly created socket.
101
+ # Once the block returns the socket will be closed.
102
+ #
103
+ # @yieldparam [TCPsocket] socket
104
+ # The newly created TCP socket.
105
+ #
106
+ # @return [TCPSocket, nil]
107
+ # The newly created TCPSocket object. If a block is given a `nil`
108
+ # will be returned.
109
+ #
110
+ # @example
111
+ # TCP.connect('www.example.com',80)
112
+ # # => #<TCPSocket:fd 5, AF_INET, 192.168.122.165, 40364>
113
+ #
114
+ # @example
115
+ # TCP.connect('www.wired.com',80) do |socket|
116
+ # socket.write("GET /\n\n")
117
+ #
118
+ # puts socket.readlines
119
+ # end
120
+ #
121
+ # @see https://rubydoc.info/stdlib/socket/TCPSocket
122
+ #
123
+ # @api public
124
+ #
125
+ def self.connect(host,port, bind_host: nil, bind_port: nil)
126
+ host = DNS::IDN.to_ascii(host)
127
+ port = port.to_i
128
+
129
+ socket = if bind_host || bind_port
130
+ TCPSocket.new(host,port,bind_host.to_s,bind_port.to_i)
131
+ else
132
+ TCPSocket.new(host,port)
133
+ end
134
+
135
+ if block_given?
136
+ yield socket
137
+ socket.close
138
+ else
139
+ return socket
140
+ end
141
+ end
142
+
143
+ #
144
+ # Creates a new TCPSocket object, connected to a given host and port.
145
+ # The given data will then be written to the newly created TCPSocket.
146
+ #
147
+ # @param [String] data
148
+ # The data to send through the connection.
149
+ #
150
+ # @param [String] host
151
+ # The host to connect to.
152
+ #
153
+ # @param [Integer] port
154
+ # The port to connect to.
155
+ #
156
+ # @param [Hash{Symbol => Object}] kwargs
157
+ # Additional keyword arguments for {connect}.
158
+ #
159
+ # @option kwargs [String, nil] :bind_host
160
+ # The local host to bind to.
161
+ #
162
+ # @option kwargs [Integer, nil] :bind_port
163
+ # The local port to bind to.
164
+ #
165
+ # @yield [socket]
166
+ # If a block is given, it will be passed the newly created socket.
167
+ #
168
+ # @yieldparam [TCPSocket] socket
169
+ # The newly created TCPSocket object.
170
+ #
171
+ # @return [TCPSocket]
172
+ # The newly created TCPSocket object.
173
+ #
174
+ # @api public
175
+ #
176
+ def self.connect_and_send(data,host,port,**kwargs)
177
+ socket = connect(host,port,**kwargs)
178
+ socket.write(data)
179
+
180
+ yield socket if block_given?
181
+ return socket
182
+ end
183
+
184
+ #
185
+ # Reads the banner from the service running on the given host and
186
+ # port.
187
+ #
188
+ # @param [String] host
189
+ # The host to connect to.
190
+ #
191
+ # @param [Integer] port
192
+ # The port to connect to.
193
+ #
194
+ # @param [Hash{Symbol => Object}] kwargs
195
+ # Additional keyword arguments for {connect}.
196
+ #
197
+ # @option kwargs [String] :bind_host
198
+ # The local host to bind to.
199
+ #
200
+ # @option kwargs [Integer] :bind_port
201
+ # The local port to bind to.
202
+ #
203
+ # @yield [banner]
204
+ # If a block is given, it will be passed the grabbed banner.
205
+ #
206
+ # @yieldparam [String] banner
207
+ # The grabbed banner.
208
+ #
209
+ # @return [String]
210
+ # The grabbed banner.
211
+ #
212
+ # @example
213
+ # TCP.banner('pop.gmail.com',25)
214
+ # # => "220 mx.google.com ESMTP c20sm3096959rvf.1"
215
+ #
216
+ # @api public
217
+ #
218
+ def self.banner(host,port,**kwargs)
219
+ banner = nil
220
+
221
+ connect(host,port,**kwargs) do |socket|
222
+ banner = socket.readline.strip
223
+ end
224
+
225
+ yield banner if block_given?
226
+ return banner
227
+ end
228
+
229
+ #
230
+ # Connects to a specified host and port, sends the given data and then
231
+ # closes the connection.
232
+ #
233
+ # @param [String] data
234
+ # The data to send through the connection.
235
+ #
236
+ # @param [String] host
237
+ # The host to connect to.
238
+ #
239
+ # @param [Integer] port
240
+ # The port to connect to.
241
+ #
242
+ # @param [Hash{Symbol => Object}] kwargs
243
+ # Additional keyword arguments for {connect}.
244
+ #
245
+ # @option kwargs [String] :bind_host
246
+ # The local host to bind to.
247
+ #
248
+ # @option kwargs [Integer] :bind_port
249
+ # The local port to bind to.
250
+ #
251
+ # @return [true]
252
+ # The data was successfully sent.
253
+ #
254
+ # @example
255
+ # buffer = "GET /" + ('A' * 4096) + "\n\r"
256
+ # TCP.send(buffer,'victim.com',80)
257
+ # # => true
258
+ #
259
+ # @api public
260
+ #
261
+ def self.send(data,host,port,**kwargs)
262
+ connect(host,port,**kwargs) do |socket|
263
+ socket.write(data)
264
+ end
265
+
266
+ return true
267
+ end
268
+
269
+ #
270
+ # Creates a new TCPServer listening on a given host and port.
271
+ #
272
+ # @param [Integer, nil] port
273
+ # The local port to listen on.
274
+ #
275
+ # @param [String, nil] host
276
+ # The host to bind to.
277
+ #
278
+ # @param [Integer] backlog
279
+ # The maximum backlog of pending connections.
280
+ #
281
+ # @yield [server]
282
+ # The block which will be called after the server has been created.
283
+ #
284
+ # @yieldparam [TCPServer] server
285
+ # The newly created TCP server.
286
+ #
287
+ # @return [TCPServer]
288
+ # The new TCP server.
289
+ #
290
+ # @example
291
+ # server = TCP.server(port: 1337)
292
+ #
293
+ # @see https://rubydoc.info/stdlib/socket/TCPServer
294
+ #
295
+ # @api public
296
+ #
297
+ def self.server(port: 0, host: nil, backlog: 5)
298
+ server = if host
299
+ TCPServer.new(host.to_s,port.to_i)
300
+ else
301
+ TCPServer.new(port.to_i)
302
+ end
303
+ server.listen(backlog)
304
+
305
+ yield server if block_given?
306
+ return server
307
+ end
308
+
309
+ #
310
+ # Creates a new temporary TCPServer listening on a host and port.
311
+ #
312
+ # @param [Hash{Symbol => Object}] kwargs
313
+ # Additional keyword arguments for {server}.
314
+ #
315
+ # @option kwargs [Integer, nil] :port (0)
316
+ # The local port to bind to.
317
+ #
318
+ # @option kwargs [String, nil] :host
319
+ # The host to bind to.
320
+ #
321
+ # @option kwargs [Integer] :backlog (5)
322
+ # The maximum backlog of pending connections.
323
+ #
324
+ # @yield [server]
325
+ # The block which will be called after the server has been created.
326
+ # After the block has finished, the server will be closed.
327
+ #
328
+ # @yieldparam [TCPServer] server
329
+ # The newly created TCP server.
330
+ #
331
+ # @return [nil]
332
+ #
333
+ # @example
334
+ # TCP.server_session(port: 1337) do |server|
335
+ # client1 = server.accept
336
+ # client2 = server.accept
337
+ #
338
+ # client2.write(server.read_line)
339
+ #
340
+ # client1.close
341
+ # client2.close
342
+ # end
343
+ #
344
+ # @api public
345
+ #
346
+ def self.server_session(**kwargs,&block)
347
+ server = server(**kwargs,&block)
348
+ server.close()
349
+ return nil
350
+ end
351
+
352
+ #
353
+ # Creates a new TCPServer listening on a given host and port,
354
+ # accepting clients in a loop.
355
+ #
356
+ # @param [Hash{Symbol => Object}] kwargs
357
+ # Additional keyword arguments for {server}.
358
+ #
359
+ # @option kwargs [Integer, nil] :port (0)
360
+ # The local port to bind to.
361
+ #
362
+ # @option kwargs [String, nil] :host
363
+ # The host to bind to.
364
+ #
365
+ # @option kwargs [Integer] :backlog (5)
366
+ # The maximum backlog of pending connections.
367
+ #
368
+ # @yield [client]
369
+ # The given block will be passed the newly connected client.
370
+ # After the block has finished, the client will be closed.
371
+ #
372
+ # @yieldparam [TCPSocket] client
373
+ # A newly connected client.
374
+ #
375
+ # @return [nil]
376
+ #
377
+ # @example
378
+ # TCP.server_loop(port: 1337) do |client|
379
+ # client.puts 'lol'
380
+ # end
381
+ #
382
+ # @api public
383
+ #
384
+ # @since 0.5.0
385
+ #
386
+ def self.server_loop(**kwargs)
387
+ server_session(**kwargs) do |server|
388
+ loop do
389
+ client = server.accept
390
+
391
+ yield client if block_given?
392
+ client.close
393
+ end
394
+ end
395
+ end
396
+
397
+ #
398
+ # Creates a new TCPServer listening on a given host and port,
399
+ # accepts only one client and then stops listening.
400
+ #
401
+ # @param [Integer] backlog
402
+ # The maximum backlog of pending connections.
403
+ #
404
+ # @param [Hash{Symbol => Object}] kwargs
405
+ # Additional keyword arguments for {server}.
406
+ #
407
+ # @option kwargs [Integer, nil] :port
408
+ # The local port to bind to.
409
+ #
410
+ # @option kwargs [String, nil] :host
411
+ # The host to bind to.
412
+ #
413
+ # @yield [client]
414
+ # The given block will be passed the newly connected client.
415
+ # After the block has finished, both the client and the server
416
+ # will be closed.
417
+ #
418
+ # @yieldparam [TCPSocket] client
419
+ # The newly connected client.
420
+ #
421
+ # @return [nil]
422
+ #
423
+ # @example
424
+ # TCP.accept(port: 1337) do |client|
425
+ # client.puts 'lol'
426
+ # end
427
+ #
428
+ # @api public
429
+ #
430
+ # @since 0.5.0
431
+ #
432
+ def self.accept(backlog: 1, **kwargs)
433
+ server_session(backlog: backlog, **kwargs) do |server|
434
+ client = server.accept
435
+
436
+ yield client if block_given?
437
+ client.close
438
+ end
439
+ end
440
+ end
441
+ end
442
+ end
443
+ end
@@ -0,0 +1,150 @@
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/telnet'
20
+ require 'ronin/support/network/dns/idn'
21
+
22
+ module Ronin
23
+ module Support
24
+ module Network
25
+ #
26
+ # Provides helper methods for communicating with Telnet services.
27
+ #
28
+ # @deprecated Will be removed in 1.0.0.
29
+ #
30
+ module Telnet
31
+ #
32
+ # Provides helper methods for using the Telnet protocol.
33
+ #
34
+ module Mixin
35
+ #
36
+ # Creates a new Telnet connection.
37
+ #
38
+ # @param [String] host
39
+ # The host to connect to.
40
+ #
41
+ # @param [Integer] port
42
+ # The port to connect to.
43
+ #
44
+ # @param [Boolean] binmode
45
+ # Indicates that newline substitution shall not be performed.
46
+ #
47
+ # @param [String, nil] output_log
48
+ # The name of the file to write connection status messages and all
49
+ # received traffic to.
50
+ #
51
+ # @param [String, nil] dump_log
52
+ # Similar to the `:output_log` option, but connection output is also
53
+ # written in hexdump format.
54
+ #
55
+ # @param [Regexp] prompt
56
+ # A regular expression matching the host command-line prompt
57
+ # sequence, used to determine when a command has finished.
58
+ #
59
+ # @param [Boolean] telnet
60
+ # Indicates that the connection shall behave as a telnet connection.
61
+ #
62
+ # @param [Boolean] plain
63
+ # Indicates that the connection shall behave as a normal TCP
64
+ # connection.
65
+ #
66
+ # @param [Integer] timeout
67
+ # The number of seconds to wait before timing out both the initial
68
+ # attempt to connect to host, and all attempts to read data from the
69
+ # host.
70
+ #
71
+ # @param [Integer] wait_time
72
+ # The amount of time to wait after seeing what looks like a prompt.
73
+ #
74
+ # @param [Net::Telnet, IO, nil] proxy
75
+ # A proxy object to used instead of opening a direct connection to
76
+ # the host.
77
+ #
78
+ # @param [String, nil] user
79
+ # The user to login as.
80
+ #
81
+ # @param [String, nil] password
82
+ # The password to login with.
83
+ #
84
+ # @yield [telnet]
85
+ # If a block is given, it will be passed the newly created Telnet
86
+ # session.
87
+ #
88
+ # @yieldparam [Net::Telnet] telnet
89
+ # The newly created Telnet session.
90
+ #
91
+ # @return [Net::Telnet]
92
+ # The Telnet session
93
+ #
94
+ # @example
95
+ # telnet_connect('towel.blinkenlights.nl')
96
+ # # => #<Net::Telnet: ...>
97
+ #
98
+ # @example
99
+ # telnet_connect('towel.blinkenlights.nl') do |movie|
100
+ # movie.each_line { |line| puts line }
101
+ # end
102
+ #
103
+ # @api public
104
+ #
105
+ def telnet_connect(host, # connection options
106
+ proxy: Telnet.proxy,
107
+ port: Telnet::DEFAULT_PORT,
108
+ binmode: false,
109
+ wait_time: 0,
110
+ prompt: Telnet::DEFAULT_PROMPT,
111
+ timeout: Telnet.default_timeout,
112
+ telnet: nil,
113
+ plain: nil,
114
+ # authentication options
115
+ user: nil,
116
+ password: nil,
117
+ # log options
118
+ output_log: nil,
119
+ dump_log: nil)
120
+ host = DNS::IDN.to_ascii(host)
121
+
122
+ telnet_options = {
123
+ 'Host' => host,
124
+ 'Port' => port,
125
+ 'Binmode' => binmode,
126
+ 'Waittime' => wait_time,
127
+ 'Prompt' => prompt,
128
+ 'Timeout' => timeout
129
+ }
130
+
131
+ telnet_options['Telnetmode'] = true if (telnet && !plain)
132
+ telnet_options['Output_log'] = output_log if output_log
133
+ telnet_options['Dump_log'] = dump_log if dump_log
134
+ telnet_options['Proxy'] = proxy if proxy
135
+
136
+ telnet = Net::Telnet.new(telnet_options)
137
+ telnet.login(user,password) if user
138
+
139
+ if block_given?
140
+ yield telnet
141
+ telnet.close
142
+ else
143
+ return telnet
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,90 @@
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
+ begin
20
+ require 'net/telnet'
21
+ rescue LoadError => error
22
+ warn "ronin/network/telnet requires the net-telnet gem be installed."
23
+ raise(error)
24
+ end
25
+
26
+ module Ronin
27
+ module Support
28
+ module Network
29
+ #
30
+ # Provides helper methods for communicating with Telnet services.
31
+ #
32
+ # @deprecated Will be removed in 1.0.0.
33
+ #
34
+ module Telnet
35
+ # Default telnet port
36
+ DEFAULT_PORT = 23
37
+
38
+ # The default prompt regular expression
39
+ DEFAULT_PROMPT = /[$%#>] \z/n
40
+
41
+ # The default timeout
42
+ DEFAULT_TIMEOUT = 10
43
+
44
+ #
45
+ # @return [Integer]
46
+ # The default Ronin Telnet timeout.
47
+ #
48
+ # @api public
49
+ #
50
+ def self.default_timeout
51
+ @default_timeout ||= DEFAULT_TIMEOUT
52
+ end
53
+
54
+ #
55
+ # Sets the default Ronin Telnet timeout.
56
+ #
57
+ # @param [Integer] timeout
58
+ # The new default Ronin Telnet timeout.
59
+ #
60
+ # @api public
61
+ #
62
+ def self.default_timeout=(timeout)
63
+ @default_timeout = timeout
64
+ end
65
+
66
+ #
67
+ # @return [Telnet, IO, nil]
68
+ # The Ronin Telnet proxy.
69
+ #
70
+ # @api public
71
+ #
72
+ def self.proxy
73
+ @proxy ||= nil
74
+ end
75
+
76
+ #
77
+ # Sets the Ronin Telnet proxy.
78
+ #
79
+ # @param [Telnet, IO, nil] new_proxy
80
+ # The new Ronin Telnet proxy.
81
+ #
82
+ # @api public
83
+ #
84
+ def self.proxy=(new_proxy)
85
+ @proxy = new_proxy
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end