ronin-support 0.5.2 → 1.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (505) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +5 -6
  3. data/.gitignore +7 -6
  4. data/.mailmap +1 -0
  5. data/.ruby-version +1 -1
  6. data/.yardopts +0 -1
  7. data/ChangeLog.md +518 -148
  8. data/Gemfile +17 -16
  9. data/README.md +107 -52
  10. data/Rakefile +28 -8
  11. data/data/text/homoglyphs/ascii.txt +8 -0
  12. data/data/text/homoglyphs/cyrillic.txt +33 -0
  13. data/data/text/homoglyphs/full_width.txt +81 -0
  14. data/data/text/homoglyphs/greek.txt +21 -0
  15. data/data/text/homoglyphs/latin_numbers.txt +14 -0
  16. data/data/text/homoglyphs/punctuation.txt +7 -0
  17. data/data/text/patterns/network/public_suffix.rb.erb +44 -0
  18. data/examples/ssl_proxy.rb +38 -0
  19. data/examples/tcp_proxy.rb +41 -0
  20. data/gemspec.yml +16 -15
  21. data/lib/ronin/support/archive/core_ext/file.rb +118 -0
  22. data/lib/ronin/{formatting/sql.rb → support/archive/core_ext.rb} +3 -4
  23. data/lib/ronin/support/archive/mixin.rb +213 -0
  24. data/lib/ronin/support/archive/tar/reader.rb +135 -0
  25. data/lib/ronin/support/archive/tar/writer.rb +197 -0
  26. data/lib/ronin/support/archive/tar.rb +155 -0
  27. data/lib/ronin/support/archive/zip/reader/entry.rb +134 -0
  28. data/lib/ronin/support/archive/zip/reader/statistics.rb +76 -0
  29. data/lib/ronin/support/archive/zip/reader.rb +273 -0
  30. data/lib/ronin/support/archive/zip/writer.rb +175 -0
  31. data/lib/ronin/support/archive/zip.rb +105 -0
  32. data/lib/ronin/support/archive.rb +211 -0
  33. data/lib/ronin/support/binary/array.rb +255 -0
  34. data/lib/ronin/support/binary/bit_flip.rb +147 -0
  35. data/lib/ronin/support/binary/buffer.rb +2027 -0
  36. data/lib/ronin/support/binary/byte_slice.rb +324 -0
  37. data/lib/ronin/{formatting/extensions/binary → support/binary/core_ext}/array.rb +25 -11
  38. data/lib/ronin/support/binary/core_ext/float.rb +80 -0
  39. data/lib/ronin/support/binary/core_ext/integer.rb +305 -0
  40. data/lib/ronin/support/binary/core_ext/io.rb +38 -0
  41. data/lib/ronin/support/binary/core_ext/string.rb +162 -0
  42. data/lib/ronin/{formatting/extensions/text.rb → support/binary/core_ext.rb} +6 -6
  43. data/lib/ronin/support/binary/cstring.rb +259 -0
  44. data/lib/ronin/support/binary/ctypes/aggregate_type.rb +98 -0
  45. data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +77 -0
  46. data/lib/ronin/support/binary/ctypes/arch/arm.rb +75 -0
  47. data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +77 -0
  48. data/lib/ronin/support/binary/ctypes/arch/arm64.rb +75 -0
  49. data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +77 -0
  50. data/lib/ronin/support/binary/ctypes/arch/mips.rb +75 -0
  51. data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +77 -0
  52. data/lib/ronin/support/binary/ctypes/arch/mips64.rb +75 -0
  53. data/lib/ronin/support/binary/ctypes/arch/ppc.rb +75 -0
  54. data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +75 -0
  55. data/lib/ronin/support/binary/ctypes/arch/x86.rb +75 -0
  56. data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +75 -0
  57. data/lib/ronin/support/binary/ctypes/arch.rb +30 -0
  58. data/lib/ronin/support/binary/ctypes/array_object_type.rb +164 -0
  59. data/lib/ronin/support/binary/ctypes/array_type.rb +232 -0
  60. data/lib/ronin/support/binary/ctypes/big_endian.rb +195 -0
  61. data/lib/ronin/support/binary/ctypes/char_type.rb +59 -0
  62. data/lib/ronin/support/binary/ctypes/char_types.rb +39 -0
  63. data/lib/ronin/support/binary/ctypes/enum_type.rb +181 -0
  64. data/lib/ronin/support/binary/ctypes/float32_type.rb +50 -0
  65. data/lib/ronin/support/binary/ctypes/float64_type.rb +50 -0
  66. data/lib/ronin/support/binary/ctypes/float_type.rb +62 -0
  67. data/lib/ronin/support/binary/ctypes/int16_type.rb +50 -0
  68. data/lib/ronin/support/binary/ctypes/int32_type.rb +50 -0
  69. data/lib/ronin/support/binary/ctypes/int64_type.rb +50 -0
  70. data/lib/ronin/support/{support.rb → binary/ctypes/int8_type.rb} +20 -21
  71. data/lib/ronin/support/binary/ctypes/int_type.rb +62 -0
  72. data/lib/ronin/support/binary/ctypes/little_endian.rb +195 -0
  73. data/lib/ronin/support/binary/ctypes/mixin.rb +135 -0
  74. data/lib/ronin/support/binary/ctypes/native.rb +205 -0
  75. data/lib/ronin/support/binary/ctypes/network.rb +29 -0
  76. data/lib/ronin/support/binary/ctypes/object_type.rb +55 -0
  77. data/lib/ronin/support/binary/ctypes/os/bsd.rb +65 -0
  78. data/lib/ronin/support/binary/ctypes/os/freebsd.rb +215 -0
  79. data/lib/ronin/support/binary/ctypes/os/linux.rb +193 -0
  80. data/lib/ronin/support/binary/ctypes/os/macos.rb +151 -0
  81. data/lib/ronin/support/binary/ctypes/os/netbsd.rb +147 -0
  82. data/lib/ronin/support/binary/ctypes/os/openbsd.rb +168 -0
  83. data/lib/ronin/support/binary/ctypes/os/unix.rb +78 -0
  84. data/lib/ronin/support/binary/ctypes/os/windows.rb +125 -0
  85. data/lib/ronin/support/binary/ctypes/os.rb +125 -0
  86. data/lib/ronin/support/binary/ctypes/scalar_type.rb +200 -0
  87. data/lib/ronin/support/binary/ctypes/string_type.rb +143 -0
  88. data/lib/ronin/support/binary/ctypes/struct_object_type.rb +173 -0
  89. data/lib/ronin/support/binary/ctypes/struct_type.rb +359 -0
  90. data/lib/ronin/support/binary/ctypes/type.rb +193 -0
  91. data/lib/ronin/support/binary/ctypes/type_resolver.rb +206 -0
  92. data/lib/ronin/support/binary/ctypes/uint16_type.rb +50 -0
  93. data/lib/ronin/support/binary/ctypes/uint32_type.rb +50 -0
  94. data/lib/ronin/support/binary/ctypes/uint64_type.rb +50 -0
  95. data/lib/ronin/support/binary/ctypes/uint8_type.rb +41 -0
  96. data/lib/ronin/support/binary/ctypes/uint_type.rb +59 -0
  97. data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +258 -0
  98. data/lib/ronin/support/binary/ctypes/union_object_type.rb +173 -0
  99. data/lib/ronin/support/binary/ctypes/union_type.rb +261 -0
  100. data/lib/ronin/support/binary/ctypes.rb +462 -0
  101. data/lib/ronin/support/binary/hexdump/core_ext/file.rb +118 -0
  102. data/lib/ronin/support/binary/hexdump/core_ext/string.rb +115 -0
  103. data/lib/ronin/support/binary/hexdump/core_ext.rb +20 -0
  104. data/lib/ronin/support/binary/hexdump/parser.rb +492 -0
  105. data/lib/ronin/support/binary/hexdump.rb +20 -0
  106. data/lib/ronin/support/binary/memory.rb +268 -0
  107. data/lib/ronin/support/binary/packet.rb +33 -0
  108. data/lib/ronin/support/binary/stack.rb +256 -0
  109. data/lib/ronin/support/binary/stream/methods.rb +1755 -0
  110. data/lib/ronin/support/binary/stream.rb +151 -0
  111. data/lib/ronin/support/binary/struct/member.rb +86 -0
  112. data/lib/ronin/support/binary/struct.rb +830 -0
  113. data/lib/ronin/support/binary/template.rb +284 -0
  114. data/lib/ronin/support/binary/union.rb +162 -0
  115. data/lib/ronin/{formatting/extensions → support}/binary.rb +10 -10
  116. data/lib/ronin/support/cli/ansi.rb +330 -0
  117. data/lib/ronin/support/cli/io_shell/core_ext/io.rb +67 -0
  118. data/lib/ronin/{extensions/meta.rb → support/cli/io_shell/core_ext.rb} +3 -4
  119. data/lib/ronin/support/cli/io_shell.rb +161 -0
  120. data/lib/ronin/support/cli/printing.rb +216 -0
  121. data/lib/ronin/support/cli.rb +20 -0
  122. data/lib/ronin/support/compression/core_ext/file.rb +70 -0
  123. data/lib/ronin/support/compression/core_ext/string.rb +101 -0
  124. data/lib/ronin/{fuzzing/extensions.rb → support/compression/core_ext.rb} +3 -4
  125. data/lib/ronin/support/compression/gzip/reader.rb +70 -0
  126. data/lib/ronin/support/compression/gzip/writer.rb +74 -0
  127. data/lib/ronin/support/compression/gzip.rb +105 -0
  128. data/lib/ronin/support/compression/mixin.rb +180 -0
  129. data/lib/ronin/{network/extensions/esmtp/net.rb → support/compression/zlib.rb} +6 -7
  130. data/lib/ronin/support/compression.rb +174 -0
  131. data/lib/ronin/{extensions → support/core_ext}/enumerable.rb +2 -3
  132. data/lib/ronin/{extensions → support/core_ext}/file.rb +2 -31
  133. data/lib/ronin/support/core_ext/integer.rb +37 -0
  134. data/lib/ronin/support/core_ext/ipaddr.rb +65 -0
  135. data/lib/ronin/{extensions → support/core_ext}/kernel.rb +7 -6
  136. data/lib/ronin/{extensions → support/core_ext}/resolv.rb +2 -25
  137. data/lib/ronin/{extensions → support/core_ext}/string.rb +114 -54
  138. data/lib/ronin/support/core_ext.rb +34 -0
  139. data/lib/ronin/support/crypto/cert.rb +522 -0
  140. data/lib/ronin/support/crypto/cert_chain.rb +204 -0
  141. data/lib/ronin/support/crypto/cipher/aes.rb +71 -0
  142. data/lib/ronin/support/crypto/cipher/aes128.rb +54 -0
  143. data/lib/ronin/support/crypto/cipher/aes256.rb +54 -0
  144. data/lib/ronin/support/crypto/cipher.rb +194 -0
  145. data/lib/ronin/support/crypto/core_ext/file.rb +660 -0
  146. data/lib/ronin/support/crypto/core_ext/string.rb +548 -0
  147. data/lib/ronin/{binary.rb → support/crypto/core_ext.rb} +4 -5
  148. data/lib/ronin/{network/mixins/mixin.rb → support/crypto/hmac.rb} +18 -28
  149. data/lib/ronin/support/crypto/key/dh.rb +122 -0
  150. data/lib/ronin/support/crypto/key/dsa.rb +103 -0
  151. data/lib/ronin/support/crypto/key/ec.rb +99 -0
  152. data/lib/ronin/support/crypto/key/methods.rb +163 -0
  153. data/lib/ronin/support/crypto/key/rsa.rb +169 -0
  154. data/lib/ronin/support/crypto/key.rb +105 -0
  155. data/lib/ronin/support/crypto/mixin.rb +620 -0
  156. data/lib/ronin/{network/extensions/http/net.rb → support/crypto/openssl.rb} +6 -7
  157. data/lib/ronin/support/crypto.rb +779 -0
  158. data/lib/ronin/support/encoding/base16/core_ext/string.rb +63 -0
  159. data/lib/ronin/{formatting/binary.rb → support/encoding/base16/core_ext.rb} +3 -4
  160. data/lib/ronin/support/encoding/base16.rb +82 -0
  161. data/lib/ronin/support/encoding/base32/core_ext/string.rb +63 -0
  162. data/lib/ronin/support/encoding/base32/core_ext.rb +19 -0
  163. data/lib/ronin/support/encoding/base32.rb +164 -0
  164. data/lib/ronin/support/encoding/base64/core_ext/string.rb +76 -0
  165. data/lib/ronin/support/encoding/base64/core_ext.rb +19 -0
  166. data/lib/ronin/support/encoding/base64.rb +78 -0
  167. data/lib/ronin/support/encoding/c/core_ext/integer.rb +82 -0
  168. data/lib/ronin/support/encoding/c/core_ext/string.rb +125 -0
  169. data/lib/ronin/support/encoding/c/core_ext.rb +20 -0
  170. data/lib/ronin/support/encoding/c.rb +277 -0
  171. data/lib/ronin/support/encoding/core_ext/string.rb +107 -0
  172. data/lib/ronin/support/encoding/core_ext.rb +33 -0
  173. data/lib/ronin/support/encoding/hex/core_ext/integer.rb +82 -0
  174. data/lib/ronin/support/encoding/hex/core_ext/string.rb +133 -0
  175. data/lib/ronin/support/encoding/hex/core_ext.rb +22 -0
  176. data/lib/ronin/support/encoding/hex.rb +248 -0
  177. data/lib/ronin/support/encoding/html/core_ext/integer.rb +106 -0
  178. data/lib/ronin/support/encoding/html/core_ext/string.rb +130 -0
  179. data/lib/ronin/support/encoding/html/core_ext.rb +20 -0
  180. data/lib/ronin/support/encoding/html.rb +233 -0
  181. data/lib/ronin/support/encoding/http/core_ext/integer.rb +95 -0
  182. data/lib/ronin/support/encoding/http/core_ext/string.rb +129 -0
  183. data/lib/ronin/support/encoding/http/core_ext.rb +20 -0
  184. data/lib/ronin/support/encoding/http.rb +241 -0
  185. data/lib/ronin/support/encoding/js/core_ext/integer.rb +67 -0
  186. data/lib/ronin/support/encoding/js/core_ext/string.rb +125 -0
  187. data/lib/ronin/support/encoding/js/core_ext.rb +20 -0
  188. data/lib/ronin/support/encoding/js.rb +279 -0
  189. data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +87 -0
  190. data/lib/ronin/support/encoding/powershell/core_ext/string.rb +145 -0
  191. data/lib/ronin/support/encoding/powershell/core_ext.rb +20 -0
  192. data/lib/ronin/support/encoding/powershell.rb +297 -0
  193. data/lib/ronin/{formatting/extensions/http/integer.rb → support/encoding/punycode/core_ext/string.rb} +23 -29
  194. data/lib/ronin/support/encoding/punycode/core_ext.rb +19 -0
  195. data/lib/ronin/support/encoding/punycode.rb +76 -0
  196. data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +75 -0
  197. data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +19 -0
  198. data/lib/ronin/support/encoding/quoted_printable.rb +102 -0
  199. data/lib/ronin/support/encoding/ruby/core_ext/string.rb +129 -0
  200. data/lib/ronin/support/encoding/ruby/core_ext.rb +19 -0
  201. data/lib/ronin/support/encoding/ruby.rb +235 -0
  202. data/lib/ronin/support/encoding/shell/core_ext/integer.rb +89 -0
  203. data/lib/ronin/support/encoding/shell/core_ext/string.rb +134 -0
  204. data/lib/ronin/support/encoding/shell/core_ext.rb +20 -0
  205. data/lib/ronin/support/encoding/shell.rb +293 -0
  206. data/lib/ronin/{network/extensions → support/encoding}/smtp.rb +4 -4
  207. data/lib/ronin/support/encoding/sql/core_ext/string.rb +114 -0
  208. data/lib/ronin/{formatting/html.rb → support/encoding/sql/core_ext.rb} +3 -4
  209. data/lib/ronin/support/encoding/sql.rb +124 -0
  210. data/lib/ronin/support/encoding/uri/core_ext/integer.rb +149 -0
  211. data/lib/ronin/support/encoding/uri/core_ext/string.rb +195 -0
  212. data/lib/ronin/support/encoding/uri/core_ext.rb +20 -0
  213. data/lib/ronin/support/encoding/uri.rb +424 -0
  214. data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +73 -0
  215. data/lib/ronin/support/encoding/uuencoding/core_ext.rb +19 -0
  216. data/lib/ronin/support/encoding/uuencoding.rb +70 -0
  217. data/lib/ronin/support/encoding/xml/core_ext/integer.rb +100 -0
  218. data/lib/ronin/support/encoding/xml/core_ext/string.rb +124 -0
  219. data/lib/ronin/support/encoding/xml/core_ext.rb +20 -0
  220. data/lib/ronin/support/encoding/xml.rb +328 -0
  221. data/lib/ronin/support/encoding.rb +46 -0
  222. data/lib/ronin/support/home.rb +88 -0
  223. data/lib/ronin/{network/network.rb → support/mixin.rb} +17 -20
  224. data/lib/ronin/support/network/asn/dns_record.rb +112 -0
  225. data/lib/ronin/support/network/asn/list.rb +269 -0
  226. data/lib/ronin/support/network/asn/record.rb +164 -0
  227. data/lib/ronin/support/network/asn/record_set.rb +226 -0
  228. data/lib/ronin/support/network/asn.rb +88 -0
  229. data/lib/ronin/{binary/hexdump.rb → support/network/core_ext.rb} +3 -4
  230. data/lib/ronin/support/network/dns/idn.rb +38 -0
  231. data/lib/ronin/support/network/dns/mixin.rb +941 -0
  232. data/lib/ronin/support/network/dns/resolver.rb +707 -0
  233. data/lib/ronin/support/network/dns.rb +1109 -0
  234. data/lib/ronin/support/network/domain.rb +70 -0
  235. data/lib/ronin/support/network/email_address.rb +574 -0
  236. data/lib/ronin/support/network/esmtp/mixin.rb +115 -0
  237. data/lib/ronin/support/network/exceptions.rb +43 -0
  238. data/lib/ronin/support/network/ftp/mixin.rb +106 -0
  239. data/lib/ronin/support/network/host.rb +1473 -0
  240. data/lib/ronin/support/network/http/cookie.rb +245 -0
  241. data/lib/ronin/support/network/http/core_ext/uri/http.rb +63 -0
  242. data/lib/ronin/support/network/http/core_ext.rb +19 -0
  243. data/lib/ronin/support/network/http/mixin.rb +890 -0
  244. data/lib/ronin/support/network/http/request.rb +215 -0
  245. data/lib/ronin/support/network/http/set_cookie.rb +210 -0
  246. data/lib/ronin/support/network/http/user_agents.rb +115 -0
  247. data/lib/ronin/support/network/http.rb +2582 -0
  248. data/lib/ronin/support/network/imap/mixin.rb +133 -0
  249. data/lib/ronin/support/network/ip/mixin.rb +114 -0
  250. data/lib/ronin/support/network/ip.rb +540 -0
  251. data/lib/ronin/support/network/ip_range/cidr.rb +252 -0
  252. data/lib/ronin/support/network/ip_range/glob.rb +309 -0
  253. data/lib/ronin/support/network/ip_range/range.rb +249 -0
  254. data/lib/ronin/support/network/ip_range.rb +284 -0
  255. data/lib/ronin/support/network/mixin.rb +58 -0
  256. data/lib/ronin/support/network/packet.rb +27 -0
  257. data/lib/ronin/support/network/pop3/mixin.rb +113 -0
  258. data/lib/ronin/support/network/proxy.rb +602 -0
  259. data/lib/ronin/support/network/public_suffix/list.rb +339 -0
  260. data/lib/ronin/support/network/public_suffix/suffix.rb +118 -0
  261. data/lib/ronin/support/network/public_suffix/suffix_set.rb +150 -0
  262. data/lib/ronin/support/network/public_suffix.rb +41 -0
  263. data/lib/ronin/support/network/smtp/email.rb +190 -0
  264. data/lib/ronin/support/network/smtp/mixin.rb +290 -0
  265. data/lib/ronin/support/network/smtp.rb +19 -0
  266. data/lib/ronin/support/network/ssl/local_cert.rb +114 -0
  267. data/lib/ronin/support/network/ssl/local_key.rb +84 -0
  268. data/lib/ronin/support/network/ssl/mixin.rb +740 -0
  269. data/lib/ronin/{network/extensions/imap/net.rb → support/network/ssl/openssl.rb} +6 -7
  270. data/lib/ronin/support/network/ssl/proxy.rb +296 -0
  271. data/lib/ronin/support/network/ssl.rb +173 -0
  272. data/lib/ronin/support/network/tcp/mixin.rb +400 -0
  273. data/lib/ronin/support/network/tcp/proxy.rb +435 -0
  274. data/lib/ronin/support/network/tcp.rb +443 -0
  275. data/lib/ronin/support/network/telnet/mixin.rb +150 -0
  276. data/lib/ronin/support/network/telnet.rb +90 -0
  277. data/lib/ronin/support/network/tld/list.rb +266 -0
  278. data/lib/ronin/support/network/tld.rb +41 -0
  279. data/lib/ronin/support/network/tls/mixin.rb +670 -0
  280. data/lib/ronin/support/network/tls/proxy.rb +135 -0
  281. data/lib/ronin/{network/mixins/dns.rb → support/network/tls.rb} +23 -25
  282. data/lib/ronin/support/network/udp/mixin.rb +389 -0
  283. data/lib/ronin/support/network/udp/proxy.rb +192 -0
  284. data/lib/ronin/support/network/udp.rb +435 -0
  285. data/lib/ronin/support/network/unix/mixin.rb +273 -0
  286. data/lib/ronin/support/network.rb +37 -0
  287. data/lib/ronin/support/path.rb +136 -0
  288. data/lib/ronin/{network/extensions/dns/net.rb → support/text/core_ext/regexp.rb} +5 -6
  289. data/lib/ronin/support/text/core_ext/string.rb +46 -0
  290. data/lib/ronin/{formatting.rb → support/text/core_ext.rb} +7 -9
  291. data/lib/ronin/support/text/entropy/core_ext/string.rb +45 -0
  292. data/lib/ronin/{formatting/http.rb → support/text/entropy/core_ext.rb} +3 -4
  293. data/lib/ronin/support/text/entropy.rb +66 -0
  294. data/lib/ronin/support/text/erb/mixin.rb +44 -0
  295. data/lib/ronin/support/text/erb.rb +19 -0
  296. data/lib/ronin/support/text/homoglyph/core_ext/string.rb +108 -0
  297. data/lib/ronin/{formatting/digest.rb → support/text/homoglyph/core_ext.rb} +3 -4
  298. data/lib/ronin/{network/http/exceptions/unknown_request.rb → support/text/homoglyph/exceptions.rb} +7 -6
  299. data/lib/ronin/support/text/homoglyph/table.rb +228 -0
  300. data/lib/ronin/support/text/homoglyph.rb +142 -0
  301. data/lib/ronin/support/text/mixin.rb +31 -0
  302. data/lib/ronin/support/text/patterns/credentials.rb +75 -0
  303. data/lib/ronin/support/text/patterns/crypto.rb +67 -0
  304. data/lib/ronin/support/text/patterns/file_system.rb +93 -0
  305. data/lib/ronin/support/text/patterns/language.rb +37 -0
  306. data/lib/ronin/support/text/patterns/network/public_suffix.rb +44 -0
  307. data/lib/ronin/support/text/patterns/network.rb +140 -0
  308. data/lib/ronin/support/text/patterns/numeric.rb +52 -0
  309. data/lib/ronin/support/text/patterns/pii.rb +105 -0
  310. data/lib/ronin/support/text/patterns/source_code.rb +148 -0
  311. data/lib/ronin/{extensions.rb → support/text/patterns.rb} +10 -13
  312. data/lib/ronin/support/text/random/mixin.rb +437 -0
  313. data/lib/ronin/support/text/random.rb +419 -0
  314. data/lib/ronin/support/text/typo/core_ext/string.rb +123 -0
  315. data/lib/ronin/support/text/typo/core_ext.rb +19 -0
  316. data/lib/ronin/support/text/typo/exceptions.rb +28 -0
  317. data/lib/ronin/support/text/typo/generator.rb +161 -0
  318. data/lib/ronin/support/text/typo.rb +260 -0
  319. data/lib/ronin/{formatting → support}/text.rb +10 -4
  320. data/lib/ronin/support/version.rb +3 -4
  321. data/lib/ronin/support.rb +17 -12
  322. data/ronin-support.gemspec +2 -1
  323. metadata +342 -291
  324. data/lib/ronin/binary/hexdump/parser.rb +0 -403
  325. data/lib/ronin/binary/struct.rb +0 -567
  326. data/lib/ronin/binary/template.rb +0 -454
  327. data/lib/ronin/extensions/ip_addr.rb +0 -216
  328. data/lib/ronin/extensions/meta/object.rb +0 -24
  329. data/lib/ronin/extensions/regexp.rb +0 -157
  330. data/lib/ronin/formatting/extensions/binary/base64.rb +0 -106
  331. data/lib/ronin/formatting/extensions/binary/file.rb +0 -77
  332. data/lib/ronin/formatting/extensions/binary/float.rb +0 -65
  333. data/lib/ronin/formatting/extensions/binary/integer.rb +0 -180
  334. data/lib/ronin/formatting/extensions/binary/string.rb +0 -345
  335. data/lib/ronin/formatting/extensions/digest/file.rb +0 -129
  336. data/lib/ronin/formatting/extensions/digest/string.rb +0 -86
  337. data/lib/ronin/formatting/extensions/digest.rb +0 -21
  338. data/lib/ronin/formatting/extensions/html/integer.rb +0 -142
  339. data/lib/ronin/formatting/extensions/html/string.rb +0 -194
  340. data/lib/ronin/formatting/extensions/html.rb +0 -21
  341. data/lib/ronin/formatting/extensions/http/string.rb +0 -110
  342. data/lib/ronin/formatting/extensions/http.rb +0 -21
  343. data/lib/ronin/formatting/extensions/sql/string.rb +0 -130
  344. data/lib/ronin/formatting/extensions/sql.rb +0 -20
  345. data/lib/ronin/formatting/extensions/text/array.rb +0 -137
  346. data/lib/ronin/formatting/extensions/text/string.rb +0 -297
  347. data/lib/ronin/formatting/extensions.rb +0 -24
  348. data/lib/ronin/fuzzing/extensions/string.rb +0 -209
  349. data/lib/ronin/fuzzing/fuzzer.rb +0 -110
  350. data/lib/ronin/fuzzing/fuzzing.rb +0 -360
  351. data/lib/ronin/fuzzing/mutator.rb +0 -161
  352. data/lib/ronin/fuzzing/repeater.rb +0 -81
  353. data/lib/ronin/fuzzing/template.rb +0 -133
  354. data/lib/ronin/fuzzing.rb +0 -21
  355. data/lib/ronin/mixin.rb +0 -89
  356. data/lib/ronin/network/dns.rb +0 -201
  357. data/lib/ronin/network/esmtp.rb +0 -113
  358. data/lib/ronin/network/extensions/dns.rb +0 -20
  359. data/lib/ronin/network/extensions/esmtp.rb +0 -20
  360. data/lib/ronin/network/extensions/http/uri/http.rb +0 -228
  361. data/lib/ronin/network/extensions/http.rb +0 -21
  362. data/lib/ronin/network/extensions/imap.rb +0 -20
  363. data/lib/ronin/network/extensions/pop3/net.rb +0 -24
  364. data/lib/ronin/network/extensions/pop3.rb +0 -20
  365. data/lib/ronin/network/extensions/smtp/net.rb +0 -24
  366. data/lib/ronin/network/extensions/ssl/net.rb +0 -24
  367. data/lib/ronin/network/extensions/ssl.rb +0 -20
  368. data/lib/ronin/network/extensions/tcp/net.rb +0 -24
  369. data/lib/ronin/network/extensions/tcp.rb +0 -20
  370. data/lib/ronin/network/extensions/telnet/net.rb +0 -24
  371. data/lib/ronin/network/extensions/telnet.rb +0 -20
  372. data/lib/ronin/network/extensions/udp/net.rb +0 -24
  373. data/lib/ronin/network/extensions/udp.rb +0 -20
  374. data/lib/ronin/network/extensions.rb +0 -29
  375. data/lib/ronin/network/ftp.rb +0 -149
  376. data/lib/ronin/network/http/exceptions.rb +0 -20
  377. data/lib/ronin/network/http/http.rb +0 -1122
  378. data/lib/ronin/network/http/proxy.rb +0 -330
  379. data/lib/ronin/network/http.rb +0 -22
  380. data/lib/ronin/network/imap.rb +0 -158
  381. data/lib/ronin/network/mixins/esmtp.rb +0 -164
  382. data/lib/ronin/network/mixins/ftp.rb +0 -155
  383. data/lib/ronin/network/mixins/http.rb +0 -227
  384. data/lib/ronin/network/mixins/imap.rb +0 -156
  385. data/lib/ronin/network/mixins/pop3.rb +0 -149
  386. data/lib/ronin/network/mixins/smtp.rb +0 -159
  387. data/lib/ronin/network/mixins/ssl.rb +0 -148
  388. data/lib/ronin/network/mixins/tcp.rb +0 -368
  389. data/lib/ronin/network/mixins/telnet.rb +0 -208
  390. data/lib/ronin/network/mixins/udp.rb +0 -381
  391. data/lib/ronin/network/mixins/unix.rb +0 -279
  392. data/lib/ronin/network/mixins.rb +0 -29
  393. data/lib/ronin/network/pop3.rb +0 -124
  394. data/lib/ronin/network/proxy.rb +0 -578
  395. data/lib/ronin/network/smtp/email.rb +0 -174
  396. data/lib/ronin/network/smtp/smtp.rb +0 -230
  397. data/lib/ronin/network/smtp.rb +0 -22
  398. data/lib/ronin/network/ssl.rb +0 -186
  399. data/lib/ronin/network/tcp/proxy.rb +0 -417
  400. data/lib/ronin/network/tcp/tcp.rb +0 -452
  401. data/lib/ronin/network/tcp.rb +0 -21
  402. data/lib/ronin/network/telnet.rb +0 -266
  403. data/lib/ronin/network/udp/proxy.rb +0 -191
  404. data/lib/ronin/network/udp/udp.rb +0 -452
  405. data/lib/ronin/network/udp.rb +0 -21
  406. data/lib/ronin/network/unix.rb +0 -286
  407. data/lib/ronin/network.rb +0 -31
  408. data/lib/ronin/path.rb +0 -133
  409. data/lib/ronin/spec/ui/output.rb +0 -22
  410. data/lib/ronin/support/inflector.rb +0 -92
  411. data/lib/ronin/templates/erb.rb +0 -78
  412. data/lib/ronin/templates/template.rb +0 -169
  413. data/lib/ronin/templates.rb +0 -21
  414. data/lib/ronin/ui/output/helpers.rb +0 -296
  415. data/lib/ronin/ui/output/output.rb +0 -142
  416. data/lib/ronin/ui/output/terminal/color.rb +0 -124
  417. data/lib/ronin/ui/output/terminal/raw.rb +0 -103
  418. data/lib/ronin/ui/output/terminal.rb +0 -21
  419. data/lib/ronin/ui/output.rb +0 -21
  420. data/lib/ronin/ui/shell.rb +0 -286
  421. data/lib/ronin/wordlist.rb +0 -287
  422. data/spec/binary/hexdump/helpers/hexdumps/ascii.bin +0 -0
  423. data/spec/binary/hexdump/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -17
  424. data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_bytes.txt +0 -17
  425. data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_shorts.txt +0 -17
  426. data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_bytes.txt +0 -17
  427. data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_shorts.txt +0 -17
  428. data/spec/binary/hexdump/helpers/hexdumps/hexdump_repeated.txt +0 -6
  429. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_bytes.txt +0 -17
  430. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_ints.txt +0 -17
  431. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_quads.txt +0 -17
  432. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_shorts.txt +0 -17
  433. data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +0 -17
  434. data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +0 -17
  435. data/spec/binary/hexdump/helpers/hexdumps/od_hex_bytes.txt +0 -17
  436. data/spec/binary/hexdump/helpers/hexdumps/od_hex_ints.txt +0 -17
  437. data/spec/binary/hexdump/helpers/hexdumps/od_hex_quads.txt +0 -17
  438. data/spec/binary/hexdump/helpers/hexdumps/od_hex_shorts.txt +0 -17
  439. data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +0 -17
  440. data/spec/binary/hexdump/helpers/hexdumps/od_octal_bytes.txt +0 -17
  441. data/spec/binary/hexdump/helpers/hexdumps/od_octal_ints.txt +0 -17
  442. data/spec/binary/hexdump/helpers/hexdumps/od_octal_quads.txt +0 -17
  443. data/spec/binary/hexdump/helpers/hexdumps/od_octal_shorts.txt +0 -17
  444. data/spec/binary/hexdump/helpers/hexdumps/od_repeated.txt +0 -6
  445. data/spec/binary/hexdump/helpers/hexdumps/repeated.bin +0 -1
  446. data/spec/binary/hexdump/helpers/hexdumps.rb +0 -13
  447. data/spec/binary/hexdump/parser_spec.rb +0 -302
  448. data/spec/binary/struct_spec.rb +0 -496
  449. data/spec/binary/template_spec.rb +0 -416
  450. data/spec/extensions/enumerable_spec.rb +0 -24
  451. data/spec/extensions/file_spec.rb +0 -61
  452. data/spec/extensions/ip_addr_spec.rb +0 -203
  453. data/spec/extensions/kernel_spec.rb +0 -30
  454. data/spec/extensions/regexp_spec.rb +0 -482
  455. data/spec/extensions/resolv_spec.rb +0 -18
  456. data/spec/extensions/string_spec.rb +0 -180
  457. data/spec/formatting/binary/array_spec.rb +0 -26
  458. data/spec/formatting/binary/base64_spec.rb +0 -50
  459. data/spec/formatting/binary/float_spec.rb +0 -36
  460. data/spec/formatting/binary/integer_spec.rb +0 -166
  461. data/spec/formatting/binary/string_spec.rb +0 -199
  462. data/spec/formatting/digest/string_spec.rb +0 -82
  463. data/spec/formatting/html/integer_spec.rb +0 -66
  464. data/spec/formatting/html/string_spec.rb +0 -103
  465. data/spec/formatting/http/integer_spec.rb +0 -42
  466. data/spec/formatting/http/string_spec.rb +0 -76
  467. data/spec/formatting/sql/string_spec.rb +0 -77
  468. data/spec/formatting/text/array_spec.rb +0 -105
  469. data/spec/formatting/text/string_spec.rb +0 -162
  470. data/spec/fuzzing/extensions/string_spec.rb +0 -87
  471. data/spec/fuzzing/fuzzer_spec.rb +0 -109
  472. data/spec/fuzzing/fuzzing_spec.rb +0 -24
  473. data/spec/fuzzing/mutator_spec.rb +0 -112
  474. data/spec/fuzzing/repeater_spec.rb +0 -57
  475. data/spec/fuzzing/template_spec.rb +0 -54
  476. data/spec/mixin_spec.rb +0 -51
  477. data/spec/network/dns_spec.rb +0 -203
  478. data/spec/network/ftp_spec.rb +0 -81
  479. data/spec/network/http/http_spec.rb +0 -559
  480. data/spec/network/http/proxy_spec.rb +0 -148
  481. data/spec/network/network_spec.rb +0 -8
  482. data/spec/network/proxy_spec.rb +0 -121
  483. data/spec/network/shared/unix_server.rb +0 -31
  484. data/spec/network/smtp/email_spec.rb +0 -100
  485. data/spec/network/ssl_spec.rb +0 -70
  486. data/spec/network/tcp/proxy_spec.rb +0 -118
  487. data/spec/network/tcp/tcp_spec.rb +0 -316
  488. data/spec/network/telnet_spec.rb +0 -67
  489. data/spec/network/udp/udp_spec.rb +0 -298
  490. data/spec/network/unix_spec.rb +0 -182
  491. data/spec/path_spec.rb +0 -111
  492. data/spec/spec_helper.rb +0 -8
  493. data/spec/support/inflector_spec.rb +0 -22
  494. data/spec/support_spec.rb +0 -8
  495. data/spec/templates/classes/example_erb.rb +0 -11
  496. data/spec/templates/classes/example_template.rb +0 -35
  497. data/spec/templates/erb_spec.rb +0 -21
  498. data/spec/templates/helpers/data/includes/_relative.erb +0 -1
  499. data/spec/templates/helpers/data/templates/example.erb +0 -1
  500. data/spec/templates/helpers/data.rb +0 -9
  501. data/spec/templates/template_spec.rb +0 -54
  502. data/spec/ui/classes/test_shell.rb +0 -22
  503. data/spec/ui/output_spec.rb +0 -32
  504. data/spec/ui/shell_spec.rb +0 -83
  505. data/spec/wordlist_spec.rb +0 -151
@@ -1,454 +0,0 @@
1
- #
2
- # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
- #
4
- # This file is part of ronin-support.
5
- #
6
- # ronin-support is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU Lesser General Public License as published
8
- # by the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # ronin-support is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License
17
- # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
- #
19
-
20
- require 'set'
21
-
22
- module Ronin
23
- module Binary
24
- #
25
- # Provides a translation layer between C-types and Ruby `Array#pack`
26
- # codes.
27
- #
28
- # ## Types
29
- #
30
- # * `:uint8` (`C`) - unsigned 8-bit integer.
31
- # * `:uint16` (`S`) - unsigned 16-bit integer.
32
- # * `:uint32` (`L`) - unsigned 32-bit integer.
33
- # * `:uint64` (`Q`) - unsigned 64-bit integer.
34
- # * `:int8` (`c`) - signed 8-bit integer.
35
- # * `:int16` (`s`) - signed 16-bit integer.
36
- # * `:int32` (`l`) - signed 32-bit integer.
37
- # * `:int64` (`q`) - signed 64-bit integer.
38
- # * `:uint16_le` (`v`) - unsigned 16-bit integer, little endian.
39
- # * `:uint32_le` (`V`) - unsigned 32-bit integer, little endian.
40
- # * `:uint16_be` (`n`) - unsigned 16-bit integer, big endian.
41
- # * `:uint32_be` (`N`) - unsigned 32-bit integer, big endian.
42
- # * `:uchar` (`Z`) - unsigned character.
43
- # * `:ushort` (`S!`) - unsigned short integer, native endian.
44
- # * `:uint` (`I!`) - unsigned integer, native endian.
45
- # * `:ulong` (`L!`) - unsigned long integer, native endian.
46
- # * `:ulong_long` (`Q`) - unsigned quad integer, native endian.
47
- # * `:char` (`Z`) - signed character.
48
- # * `:short` (`s!`) - signed short integer, native endian.
49
- # * `:int` (`i!`) - signed integer, native endian.
50
- # * `:long` (`l!`) - signed long integer, native endian.
51
- # * `:long_long` (`q`) - signed quad integer, native endian.
52
- # * `:utf8` (`U`) - UTF8 character.
53
- # * `:float` (`F`) - single-precision float, native format.
54
- # * `:double` (`D`) - double-precision float, native format.
55
- # * `:float_le` (`e`) - single-precision float, little endian.
56
- # * `:double_le` (`E`) - double-precision float, little endian.
57
- # * `:float_be` (`g`) - single-precision float, big endian.
58
- # * `:double_be` (`G`) - double-precision float, big endian.
59
- # * `:ubyte` (`C`) - unsigned byte.
60
- # * `:byte` (`c`) - signed byte.
61
- # * `:string` (`Z*`) - binary String, `\0` terminated.
62
- #
63
- # ### Ruby 1.9 specific C-types
64
- #
65
- # * `:uint16_le` (`S<`) - unsigned 16-bit integer, little endian.
66
- # * `:uint32_le` (`L<`) - unsigned 32-bit integer, little endian.
67
- # * `:uint64_le` (`Q<`) - unsigned 64-bit integer, little endian.
68
- # * `:int16_le` (`s<`) - signed 16-bit integer, little endian.
69
- # * `:int32_le` (`l<`) - signed 32-bit integer, little endian.
70
- # * `:int64_le` (`q<`) - signed 64-bit integer, little endian.
71
- # * `:uint16_be` (`S>`) - unsigned 16-bit integer, big endian.
72
- # * `:uint32_be` (`L>`) - unsigned 32-bit integer, big endian.
73
- # * `:uint64_be` (`Q>`) - unsigned 64-bit integer, big endian.
74
- # * `:int16_be` (`s>`) - signed 16-bit integer, big endian.
75
- # * `:int32_be` (`l>`) - signed 32-bit integer, big endian.
76
- # * `:int64_be` (`q>`) - signed 64-bit integer, big endian.
77
- # * `:ushort_le` (`S<`) - unsigned short integer, little endian.
78
- # * `:uint_le` (`I<`) - unsigned integer, little endian.
79
- # * `:ulong_le` (`L<`) - unsigned long integer, little endian.
80
- # * `:ulong_long_le` (`Q<`) - unsigned quad integer, little endian.
81
- # * `:short_le` (`s<`) - signed short integer, little endian.
82
- # * `:int_le` (`i<`) - signed integer, little endian.
83
- # * `:long_le` (`l<`) - signed long integer, little endian.
84
- # * `:long_long_le` (`q<`) - signed quad integer, little endian.
85
- # * `:ushort_be` (`S>`) - unsigned short integer, little endian.
86
- # * `:uint_be` (`I>`) - unsigned integer, little endian.
87
- # * `:ulong_be` (`L>`) - unsigned long integer, little endian.
88
- # * `:ulong_long_be` (`Q>`) - unsigned quad integer, little endian.
89
- # * `:short_be` (`s>`) - signed short integer, little endian.
90
- # * `:int_be` (`i>`) - signed integer, little endian.
91
- # * `:long_be` (`l>`) - signed long integer, little endian.
92
- # * `:long_long_be` (`q>`) - signed quad integer, little endian.
93
- #
94
- # @see https://rubydoc.info/stdlib/core/Array:pack
95
- #
96
- # @api semipbulic
97
- #
98
- # @since 0.5.0
99
- #
100
- class Template
101
-
102
- # Supported C-types and corresponding `Array#pack` codes.
103
- TYPES = {
104
- :uint8 => 'C',
105
- :uint16 => 'S',
106
- :uint32 => 'L',
107
- :uint64 => 'Q',
108
-
109
- :int8 => 'c',
110
- :int16 => 's',
111
- :int32 => 'l',
112
- :int64 => 'q',
113
-
114
- :uint16_le => 'v',
115
- :uint32_le => 'V',
116
- :uint16_be => 'n',
117
- :uint32_be => 'N',
118
-
119
- :uchar => 'Z',
120
- :ushort => 'S!',
121
- :uint => 'I!',
122
- :ulong => 'L!',
123
- :ulong_long => 'Q',
124
-
125
- :char => 'Z',
126
- :short => 's!',
127
- :int => 'i!',
128
- :long => 'l!',
129
- :long_long => 'q',
130
-
131
- :utf8 => 'U',
132
-
133
- :float => 'F',
134
- :double => 'D',
135
-
136
- :float_le => 'e',
137
- :double_le => 'E',
138
-
139
- :float_be => 'g',
140
- :double_be => 'G',
141
-
142
- :ubyte => 'C',
143
- :byte => 'c',
144
- :string => 'Z*'
145
- }
146
-
147
- # Additional C-types, not available on Ruby 1.8:
148
- if RUBY_VERSION > '1.9.'
149
- TYPES.merge!(
150
- :uint16_le => 'S<',
151
- :uint32_le => 'L<',
152
- :uint64_le => 'Q<',
153
-
154
- :int16_le => 's<',
155
- :int32_le => 'l<',
156
- :int64_le => 'q<',
157
-
158
- :uint16_be => 'S>',
159
- :uint32_be => 'L>',
160
- :uint64_be => 'Q>',
161
-
162
- :int16_be => 's>',
163
- :int32_be => 'l>',
164
- :int64_be => 'q>',
165
-
166
- :ushort_le => 'S!<',
167
- :uint_le => 'I!<',
168
- :ulong_le => 'L!<',
169
- :ulong_long_le => 'Q<',
170
-
171
- :short_le => 's!<',
172
- :int_le => 'i!<',
173
- :long_le => 'l!<',
174
- :long_long_le => 'q<',
175
-
176
- :ushort_be => 'S!>',
177
- :uint_be => 'I!>',
178
- :ulong_be => 'L!>',
179
- :ulong_long_be => 'Q>',
180
-
181
- :short_be => 's!>',
182
- :int_be => 'i!>',
183
- :long_be => 'l!>',
184
- :long_long_be => 'q>'
185
- )
186
- end
187
-
188
- # Integer C-types
189
- INT_TYPES = Set[
190
- :uint8,
191
- :uint16,
192
- :uint32,
193
- :uint64,
194
-
195
- :int8,
196
- :int16,
197
- :int32,
198
- :int64,
199
-
200
- :ubyte,
201
- :ushort,
202
- :uint,
203
- :ulong,
204
- :ulong_long,
205
-
206
- :byte,
207
- :short,
208
- :int,
209
- :long,
210
- :long_long,
211
-
212
- :uint16_le,
213
- :uint32_le,
214
- :uint64_le,
215
-
216
- :int16_le,
217
- :int32_le,
218
- :int64_le,
219
-
220
- :ushort_le,
221
- :uint_le,
222
- :ulong_le,
223
- :ulong_long_le,
224
-
225
- :short_le,
226
- :int_le,
227
- :long_le,
228
- :long_long_le,
229
-
230
- :uint16_be,
231
- :uint32_be,
232
- :uint64_be,
233
-
234
- :int16_be,
235
- :int32_be,
236
- :int64_be,
237
-
238
- :ushort_be,
239
- :uint_be,
240
- :ulong_be,
241
- :ulong_long_be,
242
-
243
- :short_be,
244
- :int_be,
245
- :long_be,
246
- :long_long_be
247
- ]
248
-
249
- # Float C-types
250
- FLOAT_TYPES = Set[
251
- :float, :double,
252
- :float_le, :double_le,
253
- :float_be, :double_be
254
- ]
255
-
256
- # Character C-types
257
- CHAR_TYPES = Set[:uchar, :char]
258
-
259
- # String C-types
260
- STRING_TYPES = CHAR_TYPES + Set[:string]
261
-
262
- # Types which have little and big endian forms
263
- ENDIAN_TYPES = Set[
264
- :uint16, :uint32, :uint64,
265
- :int16, :int32, :int64,
266
- :ushort, :uint, :ulong, :ulong_long,
267
- :short, :int, :long, :long_long,
268
- :float, :double
269
- ]
270
-
271
- # The fields of the template
272
- attr_reader :fields
273
-
274
- #
275
- # Creates a new Binary Template.
276
- #
277
- # @param [Array<type, (type, length)>] fields
278
- # The C-types which the packer will use.
279
- #
280
- # @param [Hash] options
281
- # Template options.
282
- #
283
- # @option options [:little, :big, :network] :endian
284
- # The endianness to apply to the C-types.
285
- #
286
- # @raise [ArgumentError]
287
- # A given type is not known.
288
- #
289
- # @note
290
- # The following C-types are **not supported** on Ruby 1.8:
291
- #
292
- # * `:uint16_le`
293
- # * `:uint32_le`
294
- # * `:uint64_le`
295
- # * `:int16_le`
296
- # * `:int32_le`
297
- # * `:int64_le`
298
- # * `:uint16_be`
299
- # * `:uint32_be`
300
- # * `:uint64_be`
301
- # * `:int16_be`
302
- # * `:int32_be`
303
- # * `:int64_be`
304
- # * `:ushort_le`
305
- # * `:uint_le`
306
- # * `:ulong_le`
307
- # * `:ulong_long_le`
308
- # * `:short_le`
309
- # * `:int_le`
310
- # * `:long_le`
311
- # * `:long_long_le`
312
- # * `:ushort_be`
313
- # * `:uint_be`
314
- # * `:ulong_be`
315
- # * `:ulong_long_be`
316
- # * `:short_be`
317
- # * `:int_be`
318
- # * `:long_be`
319
- # * `:long_long_be`
320
- #
321
- # @example
322
- # Template.new(:uint32, [:char, 100])
323
- #
324
- def initialize(fields,options={})
325
- @fields = fields
326
- @template = self.class.compile(@fields,options)
327
- end
328
-
329
- #
330
- # @see #initialize
331
- #
332
- def self.[](*fields)
333
- new(fields)
334
- end
335
-
336
- #
337
- # Translates the type of the field.
338
- #
339
- # @param [Symbol] type
340
- # The type to translate.
341
- #
342
- # @param [Hash] options
343
- # Translation options.
344
- #
345
- # @option options [:little, :big, :network] :endian
346
- # The endianness to apply to the C-types.
347
- #
348
- # @return [Symbol]
349
- # The translated type.
350
- #
351
- # @raise [ArgumentError]
352
- # The value of `:endian` is unknown.
353
- #
354
- def self.translate(type,options={})
355
- if (options[:endian] && ENDIAN_TYPES.include?(type))
356
- type = case options[:endian]
357
- when :little then :"#{type}_le"
358
- when :big, :network then :"#{type}_be"
359
- else
360
- raise(ArgumentError,"unknown endianness: #{type}")
361
- end
362
- end
363
-
364
- return type
365
- end
366
-
367
- #
368
- # Compiles C-types into an `Array#pack` / `String#unpack`
369
- # template.
370
- #
371
- # @param [Array<type, (type, length)>] types
372
- # The C-types which the packer will use.
373
- #
374
- # @param [Hash] options
375
- # Type options.
376
- #
377
- # @option options [:little, :big, :network] :endian
378
- # The endianness to apply to the C-types.
379
- #
380
- # @return [String]
381
- # The `Array#pack` / `String#unpack` template.
382
- #
383
- # @raise [ArgumentError]
384
- # A given type is not known.
385
- #
386
- def self.compile(types,options={})
387
- string = ''
388
-
389
- types.each do |(type,length)|
390
- type = translate(type,options)
391
-
392
- unless (code = TYPES[type])
393
- raise(ArgumentError,"#{type.inspect} not supported")
394
- end
395
-
396
- string << code << length.to_s
397
- end
398
-
399
- return string
400
- end
401
-
402
- #
403
- # Packs the data.
404
- #
405
- # @param [Array] data
406
- # The data to pack.
407
- #
408
- # @return [String]
409
- # The packed data.
410
- #
411
- def pack(*data)
412
- data.pack(@template)
413
- end
414
-
415
- #
416
- # Unpacks the string.
417
- #
418
- # @param [String] string
419
- # The raw String to unpack.
420
- #
421
- # @return [Array]
422
- # The unpacked data.
423
- #
424
- def unpack(string)
425
- string.unpack(@template)
426
- end
427
-
428
- #
429
- # Converts the template to a `Array#pack` template String.
430
- #
431
- # @return [String]
432
- # The template String.
433
- #
434
- # @see https://rubydoc.info/stdlib/core/Array:pack
435
- #
436
- def to_s
437
- @template
438
- end
439
-
440
- #
441
- # Inspects the template.
442
- #
443
- # @return [String]
444
- # The inspected template.
445
- #
446
- # @since 1.5.1
447
- #
448
- def inspect
449
- "<#{self.class}: #{@fields.inspect}>"
450
- end
451
-
452
- end
453
- end
454
- end
@@ -1,216 +0,0 @@
1
- #
2
- # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
- #
4
- # This file is part of ronin-support.
5
- #
6
- # ronin-support is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU Lesser General Public License as published
8
- # by the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # ronin-support is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License
17
- # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
- #
19
-
20
- require 'ronin/extensions/resolv'
21
- require 'ronin/extensions/regexp'
22
-
23
- require 'ipaddr'
24
- require 'combinatorics/list_comprehension'
25
-
26
- class IPAddr
27
-
28
- include Enumerable
29
-
30
- # Socket families and IP address masks
31
- MASKS = {
32
- Socket::AF_INET => IN4MASK,
33
- Socket::AF_INET6 => IN6MASK
34
- }
35
-
36
- #
37
- # Extracts IP Addresses from text.
38
- #
39
- # @param [String] text
40
- # The text to scan for IP Addresses.
41
- #
42
- # @param [Integer, Symbol] version
43
- # The version of IP Address to scan for (`4`, `6`, `:v4` or `:v6`).
44
- #
45
- # @yield [ip]
46
- # The given block will be passed each extracted IP Address.
47
- #
48
- # @yieldparam [String] ip
49
- # An IP Address from the text.
50
- #
51
- # @return [Array<String>]
52
- # The IP Addresses found in the text.
53
- #
54
- # @example
55
- # IPAddr.extract("Host: 127.0.0.1\n\rHost: 10.1.1.1\n\r")
56
- # # => ["127.0.0.1", "10.1.1.1"]
57
- #
58
- # @example Extract only IPv4 addresses from a large amount of text:
59
- # IPAddr.extract(text,:v4) do |ip|
60
- # puts ip
61
- # end
62
- #
63
- # @api public
64
- #
65
- def IPAddr.extract(text,version=nil,&block)
66
- return enum_for(__method__,text,version).to_a unless block_given?
67
-
68
- regexp = case version
69
- when :ipv4, :v4, 4 then Regexp::IPv4
70
- when :ipv6, :v6, 6 then Regexp::IPv6
71
- else Regexp::IP
72
- end
73
-
74
- text.scan(regexp) do |match|
75
- yield match
76
- end
77
-
78
- return nil
79
- end
80
-
81
- #
82
- # Iterates over each IP address within the IP Address range. Supports
83
- # both IPv4 and IPv6 address ranges.
84
- #
85
- # @param [String] cidr_or_glob
86
- # The IP address range to iterate over.
87
- # May be in standard CIDR notation or globbed format.
88
- #
89
- # @yield [ip]
90
- # The block which will be passed each IP address contained within the
91
- # IP address range.
92
- #
93
- # @yieldparam [String] ip
94
- # An IP address within the IP address range.
95
- #
96
- # @return [nil]
97
- #
98
- # @example Enumerate through a CIDR range
99
- # IPAddr.each('10.1.1.1/24') do |ip|
100
- # puts ip
101
- # end
102
- #
103
- # @example Enumerate through a globbed IP range
104
- # IPAddr.each('10.1.1-5,10-20.*') do |ip|
105
- # puts ip
106
- # end
107
- #
108
- # @example Enumerate through a globbed IPv6 range
109
- # IPAddr.each('::ff::02-0a::c3') do |ip|
110
- # puts ip
111
- # end
112
- #
113
- # @api public
114
- #
115
- def IPAddr.each(cidr_or_glob,&block)
116
- unless (cidr_or_glob.include?('*') ||
117
- cidr_or_glob.include?(',') ||
118
- cidr_or_glob.include?('-'))
119
- return IPAddr.new(cidr_or_glob).each(&block)
120
- end
121
-
122
- return enum_for(__method__,cidr_or_glob) unless block
123
-
124
- if cidr_or_glob.include?('::')
125
- separator = '::'
126
- base = 16
127
-
128
- prefix = if cidr_or_glob.start_with?('::') then '::'
129
- else ''
130
- end
131
-
132
- format = lambda { |address|
133
- prefix + address.map { |i| '%.2x' % i }.join('::')
134
- }
135
- else
136
- separator = '.'
137
- base = 10
138
- format = lambda { |address| address.join('.') }
139
- end
140
-
141
- # split the address
142
- segments = cidr_or_glob.split(separator)
143
- ranges = []
144
-
145
- # map the components of the address to numeric ranges
146
- segments.each do |segment|
147
- next if segment.empty?
148
-
149
- ranges << if segment == '*'
150
- (1..254)
151
- else
152
- segment.split(',').map { |octet|
153
- if octet.include?('-')
154
- start, stop = octet.split('-',2)
155
-
156
- (start.to_i(base)..stop.to_i(base)).to_a
157
- else
158
- octet.to_i(base)
159
- end
160
- }.flatten
161
- end
162
- end
163
-
164
- # cycle through the address ranges
165
- ranges.comprehension { |address| yield format[address] }
166
- return nil
167
- end
168
-
169
- #
170
- # Resolves the host-names for the IP address.
171
- #
172
- # @param [String] nameserver
173
- # The optional nameserver to query.
174
- #
175
- # @return [Array<String>]
176
- # The host-names for the IP address.
177
- #
178
- # @api public
179
- #
180
- def lookup(nameserver=nil)
181
- Resolv.resolver(nameserver).getnames(self.to_s)
182
- end
183
-
184
- #
185
- # Iterates over each IP address that is included in the addresses
186
- # netmask. Supports both IPv4 and IPv6 addresses.
187
- #
188
- # @yield [ip]
189
- # The block which will be passed every IP address covered be the
190
- # netmask of the IPAddr object.
191
- #
192
- # @yieldparam [String] ip
193
- # An IP address.
194
- #
195
- # @example
196
- # netblock = IPAddr.new('10.1.1.1/24')
197
- #
198
- # netblock.each do |ip|
199
- # puts ip
200
- # end
201
- #
202
- # @api public
203
- #
204
- def each
205
- return enum_for(__method__) unless block_given?
206
-
207
- family_mask = MASKS[@family]
208
-
209
- (0..((~@mask_addr) & family_mask)).each do |i|
210
- yield _to_string(@addr | i)
211
- end
212
-
213
- return self
214
- end
215
-
216
- end
@@ -1,24 +0,0 @@
1
- # metaprogramming assistant -- metaid.rb
2
- class Object # :nodoc:
3
- # The hidden singleton lurks behind everyone
4
- def metaclass; class << self; self; end; end
5
- def meta_eval(&blk); metaclass.instance_eval(&blk); end
6
-
7
- # A class_eval version of meta_eval
8
- def metaclass_eval(&blk); metaclass.class_eval(&blk); end
9
-
10
- # A class_def version of meta_def
11
- def metaclass_def(name, &blk)
12
- metaclass_eval { define_method(name, &blk) }
13
- end
14
-
15
- # Adds methods to a metaclass
16
- def meta_def(name, &blk)
17
- meta_eval { define_method(name, &blk) }
18
- end
19
-
20
- # Defines an instance method within a class
21
- def class_def(name, &blk)
22
- class_eval { define_method(name, &blk) }
23
- end
24
- end