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
@@ -1,454 +0,0 @@
1
- #
2
- # Copyright (c) 2006-2012 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 <http://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 http://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 http://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,217 +0,0 @@
1
- #
2
- # Copyright (c) 2006-2012 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 <http://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
- start, stop = start.to_i(base), stop.to_i(base)
156
-
157
- (start..stop).to_a
158
- else
159
- octet.to_i(base)
160
- end
161
- }.flatten
162
- end
163
- end
164
-
165
- # cycle through the address ranges
166
- ranges.comprehension { |address| yield format[address] }
167
- return nil
168
- end
169
-
170
- #
171
- # Resolves the host-names for the IP address.
172
- #
173
- # @param [String] nameserver
174
- # The optional nameserver to query.
175
- #
176
- # @return [Array<String>]
177
- # The host-names for the IP address.
178
- #
179
- # @api public
180
- #
181
- def lookup(nameserver=nil)
182
- Resolv.resolver(nameserver).getnames(self.to_s)
183
- end
184
-
185
- #
186
- # Iterates over each IP address that is included in the addresses
187
- # netmask. Supports both IPv4 and IPv6 addresses.
188
- #
189
- # @yield [ip]
190
- # The block which will be passed every IP address covered be the
191
- # netmask of the IPAddr object.
192
- #
193
- # @yieldparam [String] ip
194
- # An IP address.
195
- #
196
- # @example
197
- # netblock = IPAddr.new('10.1.1.1/24')
198
- #
199
- # netblock.each do |ip|
200
- # puts ip
201
- # end
202
- #
203
- # @api public
204
- #
205
- def each
206
- return enum_for(__method__) unless block_given?
207
-
208
- family_mask = MASKS[@family]
209
-
210
- (0..((~@mask_addr) & family_mask)).each do |i|
211
- yield _to_string(@addr | i)
212
- end
213
-
214
- return self
215
- end
216
-
217
- 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