ronin-support 0.4.1 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (224) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +11 -0
  3. data/.github/workflows/ruby.yml +28 -0
  4. data/.ruby-version +1 -0
  5. data/.yardopts +1 -1
  6. data/ChangeLog.md +121 -33
  7. data/Gemfile +17 -18
  8. data/README.md +57 -33
  9. data/Rakefile +10 -3
  10. data/gemspec.yml +16 -7
  11. data/lib/ronin/binary.rb +21 -0
  12. data/lib/ronin/binary/hexdump.rb +20 -0
  13. data/lib/ronin/binary/hexdump/parser.rb +403 -0
  14. data/lib/ronin/binary/struct.rb +567 -0
  15. data/lib/ronin/binary/template.rb +454 -0
  16. data/lib/ronin/extensions.rb +5 -5
  17. data/lib/ronin/extensions/enumerable.rb +5 -5
  18. data/lib/ronin/extensions/file.rb +39 -33
  19. data/lib/ronin/extensions/ip_addr.rb +29 -31
  20. data/lib/ronin/extensions/kernel.rb +5 -5
  21. data/lib/ronin/extensions/meta.rb +5 -5
  22. data/lib/ronin/extensions/regexp.rb +50 -5
  23. data/lib/ronin/extensions/resolv.rb +7 -9
  24. data/lib/ronin/extensions/string.rb +10 -10
  25. data/lib/ronin/formatting.rb +5 -5
  26. data/lib/ronin/formatting/binary.rb +5 -5
  27. data/lib/ronin/formatting/digest.rb +5 -5
  28. data/lib/ronin/formatting/extensions.rb +5 -5
  29. data/lib/ronin/formatting/extensions/binary.rb +7 -5
  30. data/lib/ronin/formatting/extensions/binary/array.rb +61 -0
  31. data/lib/ronin/formatting/extensions/binary/base64.rb +106 -0
  32. data/lib/ronin/formatting/extensions/binary/file.rb +44 -11
  33. data/lib/ronin/formatting/extensions/binary/float.rb +65 -0
  34. data/lib/ronin/formatting/extensions/binary/integer.rb +66 -50
  35. data/lib/ronin/formatting/extensions/binary/string.rb +81 -205
  36. data/lib/ronin/formatting/extensions/digest.rb +5 -5
  37. data/lib/ronin/formatting/extensions/digest/file.rb +5 -5
  38. data/lib/ronin/formatting/extensions/digest/string.rb +5 -5
  39. data/lib/ronin/formatting/extensions/html.rb +5 -5
  40. data/lib/ronin/formatting/extensions/html/integer.rb +9 -13
  41. data/lib/ronin/formatting/extensions/html/string.rb +31 -39
  42. data/lib/ronin/formatting/extensions/http.rb +5 -5
  43. data/lib/ronin/formatting/extensions/http/integer.rb +6 -6
  44. data/lib/ronin/formatting/extensions/http/string.rb +7 -7
  45. data/lib/ronin/formatting/extensions/sql.rb +5 -5
  46. data/lib/ronin/formatting/extensions/sql/string.rb +22 -24
  47. data/lib/ronin/formatting/extensions/text.rb +5 -5
  48. data/lib/ronin/formatting/extensions/text/array.rb +13 -11
  49. data/lib/ronin/formatting/extensions/text/string.rb +70 -13
  50. data/lib/ronin/formatting/html.rb +5 -5
  51. data/lib/ronin/formatting/http.rb +5 -5
  52. data/lib/ronin/formatting/sql.rb +5 -5
  53. data/lib/ronin/formatting/text.rb +5 -5
  54. data/lib/ronin/fuzzing.rb +5 -5
  55. data/lib/ronin/fuzzing/extensions.rb +5 -5
  56. data/lib/ronin/fuzzing/extensions/string.rb +42 -213
  57. data/lib/ronin/fuzzing/fuzzer.rb +110 -0
  58. data/lib/ronin/fuzzing/fuzzing.rb +33 -26
  59. data/lib/ronin/fuzzing/mutator.rb +161 -0
  60. data/lib/ronin/fuzzing/repeater.rb +81 -0
  61. data/lib/ronin/fuzzing/template.rb +133 -0
  62. data/lib/ronin/mixin.rb +2 -2
  63. data/lib/ronin/network.rb +7 -5
  64. data/lib/ronin/network/dns.rb +64 -24
  65. data/lib/ronin/network/esmtp.rb +5 -5
  66. data/lib/ronin/network/extensions.rb +5 -5
  67. data/lib/ronin/network/extensions/dns.rb +5 -5
  68. data/lib/ronin/network/extensions/dns/net.rb +5 -5
  69. data/lib/ronin/network/extensions/esmtp.rb +5 -5
  70. data/lib/ronin/network/extensions/esmtp/net.rb +5 -5
  71. data/lib/ronin/network/extensions/http.rb +5 -5
  72. data/lib/ronin/network/extensions/http/net.rb +5 -5
  73. data/lib/ronin/network/extensions/http/uri/http.rb +5 -5
  74. data/lib/ronin/network/extensions/imap.rb +5 -5
  75. data/lib/ronin/network/extensions/imap/net.rb +5 -5
  76. data/lib/ronin/network/extensions/pop3.rb +5 -5
  77. data/lib/ronin/network/extensions/pop3/net.rb +5 -5
  78. data/lib/ronin/network/extensions/smtp.rb +5 -5
  79. data/lib/ronin/network/extensions/smtp/net.rb +5 -5
  80. data/lib/ronin/network/extensions/ssl.rb +5 -5
  81. data/lib/ronin/network/extensions/ssl/net.rb +5 -5
  82. data/lib/ronin/network/extensions/tcp.rb +5 -5
  83. data/lib/ronin/network/extensions/tcp/net.rb +5 -5
  84. data/lib/ronin/network/extensions/telnet.rb +5 -5
  85. data/lib/ronin/network/extensions/telnet/net.rb +5 -5
  86. data/lib/ronin/network/extensions/udp.rb +5 -5
  87. data/lib/ronin/network/extensions/udp/net.rb +5 -5
  88. data/lib/ronin/network/ftp.rb +149 -0
  89. data/lib/ronin/network/http.rb +5 -5
  90. data/lib/ronin/network/http/exceptions.rb +5 -5
  91. data/lib/ronin/network/http/exceptions/unknown_request.rb +5 -5
  92. data/lib/ronin/network/http/http.rb +65 -70
  93. data/lib/ronin/network/http/proxy.rb +5 -5
  94. data/lib/ronin/network/imap.rb +16 -15
  95. data/lib/ronin/network/mixins.rb +6 -5
  96. data/lib/ronin/network/mixins/dns.rb +5 -5
  97. data/lib/ronin/network/mixins/esmtp.rb +5 -5
  98. data/lib/ronin/network/mixins/ftp.rb +155 -0
  99. data/lib/ronin/network/mixins/http.rb +58 -587
  100. data/lib/ronin/network/mixins/imap.rb +5 -5
  101. data/lib/ronin/network/mixins/mixin.rb +5 -5
  102. data/lib/ronin/network/mixins/pop3.rb +5 -5
  103. data/lib/ronin/network/mixins/smtp.rb +5 -5
  104. data/lib/ronin/network/mixins/ssl.rb +5 -5
  105. data/lib/ronin/network/mixins/tcp.rb +43 -10
  106. data/lib/ronin/network/mixins/telnet.rb +5 -5
  107. data/lib/ronin/network/mixins/udp.rb +126 -6
  108. data/lib/ronin/network/mixins/unix.rb +279 -0
  109. data/lib/ronin/network/network.rb +5 -5
  110. data/lib/ronin/network/pop3.rb +10 -10
  111. data/lib/ronin/network/proxy.rb +578 -0
  112. data/lib/ronin/network/smtp.rb +5 -5
  113. data/lib/ronin/network/smtp/email.rb +6 -6
  114. data/lib/ronin/network/smtp/smtp.rb +12 -13
  115. data/lib/ronin/network/ssl.rb +16 -17
  116. data/lib/ronin/network/tcp.rb +7 -310
  117. data/lib/ronin/network/tcp/proxy.rb +417 -0
  118. data/lib/ronin/network/tcp/tcp.rb +452 -0
  119. data/lib/ronin/network/telnet.rb +34 -28
  120. data/lib/ronin/network/udp.rb +7 -271
  121. data/lib/ronin/network/udp/proxy.rb +191 -0
  122. data/lib/ronin/network/udp/udp.rb +452 -0
  123. data/lib/ronin/network/unix.rb +286 -0
  124. data/lib/ronin/path.rb +35 -39
  125. data/lib/ronin/spec/ui/output.rb +6 -12
  126. data/lib/ronin/support.rb +6 -5
  127. data/lib/ronin/support/inflector.rb +8 -12
  128. data/lib/ronin/support/support.rb +7 -5
  129. data/lib/ronin/support/version.rb +6 -6
  130. data/lib/ronin/templates.rb +5 -5
  131. data/lib/ronin/templates/erb.rb +5 -5
  132. data/lib/ronin/templates/template.rb +5 -5
  133. data/lib/ronin/ui/output.rb +5 -5
  134. data/lib/ronin/ui/output/helpers.rb +42 -28
  135. data/lib/ronin/ui/output/output.rb +17 -21
  136. data/lib/ronin/ui/output/terminal.rb +5 -5
  137. data/lib/ronin/ui/output/terminal/color.rb +15 -9
  138. data/lib/ronin/ui/output/terminal/raw.rb +5 -5
  139. data/lib/ronin/ui/shell.rb +8 -11
  140. data/lib/ronin/wordlist.rb +110 -30
  141. data/ronin-support.gemspec +39 -109
  142. data/spec/binary/hexdump/helpers/hexdumps.rb +13 -0
  143. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/ascii.bin +0 -0
  144. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -0
  145. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_hex_bytes.txt +0 -0
  146. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_hex_shorts.txt +0 -0
  147. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_octal_bytes.txt +0 -0
  148. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_octal_shorts.txt +0 -0
  149. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/hexdump_repeated.txt +0 -0
  150. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_bytes.txt +0 -0
  151. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_ints.txt +0 -0
  152. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_quads.txt +0 -0
  153. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_decimal_shorts.txt +0 -0
  154. data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +17 -0
  155. data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +17 -0
  156. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_bytes.txt +0 -0
  157. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_ints.txt +0 -0
  158. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_quads.txt +0 -0
  159. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_hex_shorts.txt +0 -0
  160. data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +17 -0
  161. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_bytes.txt +0 -0
  162. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_ints.txt +0 -0
  163. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_quads.txt +0 -0
  164. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_octal_shorts.txt +0 -0
  165. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/od_repeated.txt +0 -0
  166. data/spec/{formatting/binary → binary/hexdump}/helpers/hexdumps/repeated.bin +0 -0
  167. data/spec/binary/hexdump/parser_spec.rb +302 -0
  168. data/spec/binary/struct_spec.rb +496 -0
  169. data/spec/binary/template_spec.rb +416 -0
  170. data/spec/extensions/enumerable_spec.rb +4 -4
  171. data/spec/extensions/file_spec.rb +12 -14
  172. data/spec/extensions/ip_addr_spec.rb +76 -50
  173. data/spec/extensions/kernel_spec.rb +7 -7
  174. data/spec/extensions/regexp_spec.rb +119 -59
  175. data/spec/extensions/resolv_spec.rb +2 -2
  176. data/spec/extensions/string_spec.rb +31 -30
  177. data/spec/formatting/binary/array_spec.rb +26 -0
  178. data/spec/formatting/binary/base64_spec.rb +50 -0
  179. data/spec/formatting/binary/float_spec.rb +36 -0
  180. data/spec/formatting/binary/integer_spec.rb +76 -50
  181. data/spec/formatting/binary/string_spec.rb +91 -198
  182. data/spec/formatting/digest/string_spec.rb +5 -5
  183. data/spec/formatting/html/integer_spec.rb +6 -6
  184. data/spec/formatting/html/string_spec.rb +10 -10
  185. data/spec/formatting/http/integer_spec.rb +3 -3
  186. data/spec/formatting/http/string_spec.rb +5 -5
  187. data/spec/formatting/sql/string_spec.rb +21 -19
  188. data/spec/formatting/text/array_spec.rb +15 -15
  189. data/spec/formatting/text/string_spec.rb +58 -28
  190. data/spec/fuzzing/extensions/string_spec.rb +87 -0
  191. data/spec/fuzzing/fuzzer_spec.rb +109 -0
  192. data/spec/fuzzing/fuzzing_spec.rb +24 -0
  193. data/spec/fuzzing/mutator_spec.rb +112 -0
  194. data/spec/fuzzing/repeater_spec.rb +57 -0
  195. data/spec/fuzzing/template_spec.rb +54 -0
  196. data/spec/mixin_spec.rb +10 -12
  197. data/spec/network/dns_spec.rb +89 -23
  198. data/spec/network/ftp_spec.rb +81 -0
  199. data/spec/network/http/http_spec.rb +237 -144
  200. data/spec/network/http/proxy_spec.rb +37 -37
  201. data/spec/network/network_spec.rb +2 -2
  202. data/spec/network/proxy_spec.rb +121 -0
  203. data/spec/network/shared/unix_server.rb +31 -0
  204. data/spec/network/smtp/email_spec.rb +14 -14
  205. data/spec/network/ssl_spec.rb +53 -3
  206. data/spec/network/tcp/proxy_spec.rb +118 -0
  207. data/spec/network/tcp/tcp_spec.rb +316 -0
  208. data/spec/network/telnet_spec.rb +67 -0
  209. data/spec/network/udp/udp_spec.rb +298 -0
  210. data/spec/network/unix_spec.rb +182 -0
  211. data/spec/path_spec.rb +43 -18
  212. data/spec/spec_helper.rb +2 -3
  213. data/spec/support/inflector_spec.rb +4 -4
  214. data/spec/support_spec.rb +1 -1
  215. data/spec/templates/erb_spec.rb +3 -3
  216. data/spec/templates/template_spec.rb +10 -10
  217. data/spec/ui/shell_spec.rb +15 -15
  218. data/spec/wordlist_spec.rb +80 -19
  219. metadata +176 -121
  220. data/.gemtest +0 -0
  221. data/spec/formatting/binary/helpers/hexdumps.rb +0 -16
  222. data/spec/fuzzing/string_spec.rb +0 -158
  223. data/spec/network/tcp_spec.rb +0 -247
  224. data/spec/network/udp_spec.rb +0 -248
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
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/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'ronin/network/tcp'
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
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/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'ronin/network/extensions/telnet/net'
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
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/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'ronin/network/telnet'
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
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/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'ronin/network/extensions/udp/net'
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
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/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'ronin/network/udp'
@@ -0,0 +1,149 @@
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 'net/ftp'
21
+
22
+ module Ronin
23
+ module Network
24
+ #
25
+ # Provides helper methods for communicating with FTP servers.
26
+ #
27
+ # @since 0.5.0
28
+ #
29
+ module FTP
30
+ # Default FTP port
31
+ DEFAULT_PORT = 21
32
+
33
+ # Default FTP user
34
+ DEFAULT_USER = 'anonymous'
35
+
36
+ #
37
+ # Default port used by {FTP}.
38
+ #
39
+ # @return [Integer]
40
+ # The default Ronin FTP port.
41
+ #
42
+ # @api public
43
+ #
44
+ def self.default_port
45
+ @default_port ||= DEFAULT_PORT
46
+ end
47
+
48
+ #
49
+ # Sets the default port used by {FTP}.
50
+ #
51
+ # @param [Integer] new_port
52
+ # The new default Ronin FTP port.
53
+ #
54
+ # @api public
55
+ #
56
+ def self.default_port=(new_port)
57
+ @default_port = new_port
58
+ end
59
+
60
+ #
61
+ # Creates a connection to the FTP server.
62
+ #
63
+ # @param [String] host
64
+ # The host to connect to.
65
+ #
66
+ # @param [Hash] options
67
+ # Additional options.
68
+ #
69
+ # @option options [Integer] :port (FTP.default_port)
70
+ # The port to connect to.
71
+ #
72
+ # @option options [String] :user (DEFAULT_USER)
73
+ # The user to authenticate with.
74
+ #
75
+ # @option options [String] :password
76
+ # The password to authenticate with.
77
+ #
78
+ # @option options [String] :account
79
+ # The FTP account information to send via the `ACCT` command.
80
+ #
81
+ # @option options [Boolean] :passive (true)
82
+ # Specifies whether the FTP session should use passive mode.
83
+ #
84
+ # @yield [session]
85
+ # If a block is given, it will be passed an FTP session object.
86
+ #
87
+ # @yieldparam [Net::FTP] session
88
+ # The FTP session.
89
+ #
90
+ # @return [Net::FTP]
91
+ # The FTP session.
92
+ #
93
+ # @example
94
+ # ftp_connect('www.example.com', :user => 'joe', :password => 'secret')
95
+ #
96
+ # @api public
97
+ #
98
+ def ftp_connect(host,options={})
99
+ host = host.to_s
100
+ port = (options[:port] || FTP.default_port)
101
+ user = (options[:user] || DEFAULT_USER)
102
+ password = options[:password]
103
+ acct = options[:account]
104
+
105
+ session = Net::FTP.new
106
+ session.connect(host,port)
107
+ session.login(user,password,acct)
108
+ session.passive = options.fetch(:passive,true)
109
+
110
+ yield session if block_given?
111
+ return session
112
+ end
113
+
114
+ #
115
+ # Starts a session with the FTP server.
116
+ #
117
+ # @param [String] host
118
+ # The host to connect to.
119
+ #
120
+ # @param [Hash] options
121
+ # Additional options.
122
+ #
123
+ # @yield [session]
124
+ # If a block is given, it will be passed an FTP session object.
125
+ # After the block has returned, the session will be closed.
126
+ #
127
+ # @yieldparam [Net::FTP] session
128
+ # The FTP session.
129
+ #
130
+ # @example
131
+ # ftp_session('www.example.com', :user => 'joe') do |ftp|
132
+ # # ...
133
+ # end
134
+ #
135
+ # @see #ftp_connect
136
+ #
137
+ # @api public
138
+ #
139
+ def ftp_session(host,options={})
140
+ ftp = ftp_connect(host,options)
141
+
142
+ yield ftp if block_given?
143
+
144
+ ftp.close
145
+ return nil
146
+ end
147
+ end
148
+ end
149
+ end
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
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/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'ronin/network/http/exceptions'
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
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/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'ronin/network/http/exceptions/unknown_request'
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
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/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  module Ronin
@@ -1,20 +1,20 @@
1
1
  #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
2
+ # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
3
  #
4
- # This file is part of Ronin Support.
4
+ # This file is part of ronin-support.
5
5
  #
6
- # Ronin Support is free software: you can redistribute it and/or modify
6
+ # ronin-support is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU Lesser General Public License as published
8
8
  # by the Free Software Foundation, either version 3 of the License, or
9
9
  # (at your option) any later version.
10
10
  #
11
- # Ronin Support is distributed in the hope that it will be useful,
11
+ # ronin-support is distributed in the hope that it will be useful,
12
12
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
13
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
14
  # GNU Lesser General Public License for more details.
15
15
  #
16
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/>.
17
+ # along with ronin-support. If not, see <https://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
20
  require 'ronin/network/http/exceptions/unknown_request'
@@ -51,7 +51,7 @@ module Ronin
51
51
  #
52
52
  # @api public
53
53
  #
54
- def HTTP.proxy
54
+ def self.proxy
55
55
  @proxy ||= if ENV['HTTP_PROXY']
56
56
  Proxy.parse(ENV['HTTP_PROXY'])
57
57
  else
@@ -74,7 +74,7 @@ module Ronin
74
74
  #
75
75
  # @api public
76
76
  #
77
- def HTTP.proxy=(new_proxy)
77
+ def self.proxy=(new_proxy)
78
78
  @proxy = Proxy.create(new_proxy)
79
79
  end
80
80
 
@@ -86,7 +86,7 @@ module Ronin
86
86
  #
87
87
  # @api public
88
88
  #
89
- def HTTP.user_agent
89
+ def self.user_agent
90
90
  @user_agent ||= nil
91
91
  end
92
92
 
@@ -98,7 +98,7 @@ module Ronin
98
98
  #
99
99
  # @api public
100
100
  #
101
- def HTTP.user_agent=(agent)
101
+ def self.user_agent=(agent)
102
102
  @user_agent = agent
103
103
  end
104
104
 
@@ -113,16 +113,13 @@ module Ronin
113
113
  #
114
114
  # @api private
115
115
  #
116
- def HTTP.expand_url(url)
116
+ def self.expand_url(url)
117
117
  new_options = {}
118
118
 
119
119
  url = case url
120
- when URI
121
- url
122
- when Hash
123
- URI::HTTP.build(url)
124
- else
125
- URI(url.to_s)
120
+ when URI then url
121
+ when Hash then URI::HTTP.build(url)
122
+ else URI(url.to_s)
126
123
  end
127
124
 
128
125
  new_options[:ssl] = {} if url.scheme == 'https'
@@ -133,12 +130,8 @@ module Ronin
133
130
  new_options[:user] = url.user if url.user
134
131
  new_options[:password] = url.password if url.password
135
132
 
136
- new_options[:path] = unless url.path.empty?
137
- url.path
138
- else
139
- '/'
140
- end
141
- new_options[:path] += "?#{url.query}" if url.query
133
+ new_options[:path] = url.path unless url.path.empty?
134
+ new_options[:query] = url.query unless url.query.nil?
142
135
 
143
136
  return new_options
144
137
  end
@@ -155,7 +148,7 @@ module Ronin
155
148
  # @option options [String] :host
156
149
  # The host to connect to.
157
150
  #
158
- # @option options [String] :port (::Net::HTTP.default_port)
151
+ # @option options [String] :port (Net::HTTP.default_port)
159
152
  # The port to connect to.
160
153
  #
161
154
  # @option options [String] :user
@@ -175,7 +168,7 @@ module Ronin
175
168
  #
176
169
  # @api private
177
170
  #
178
- def HTTP.expand_options(options={})
171
+ def self.expand_options(options={})
179
172
  new_options = options.dup
180
173
 
181
174
  new_options[:port] ||= Net::HTTP.default_port
@@ -210,7 +203,7 @@ module Ronin
210
203
  #
211
204
  # @api private
212
205
  #
213
- def HTTP.header_name(name)
206
+ def self.header_name(name)
214
207
  words = name.to_s.split(/[\s+_-]/)
215
208
 
216
209
  words.each { |word| word.capitalize! }
@@ -229,11 +222,11 @@ module Ronin
229
222
  #
230
223
  # @api private
231
224
  #
232
- def HTTP.headers(options={})
225
+ def self.headers(options={})
233
226
  headers = {}
234
227
 
235
- if HTTP.user_agent
236
- headers['User-Agent'] = HTTP.user_agent
228
+ if user_agent
229
+ headers['User-Agent'] = user_agent
237
230
  end
238
231
 
239
232
  if options
@@ -292,7 +285,7 @@ module Ronin
292
285
  #
293
286
  # @api private
294
287
  #
295
- def HTTP.request(options={})
288
+ def self.request(options={})
296
289
  unless options[:method]
297
290
  raise(ArgumentError,"the :method option must be specified")
298
291
  end
@@ -303,31 +296,33 @@ module Ronin
303
296
  raise(UnknownRequest,"unknown HTTP request type #{name.dump}")
304
297
  end
305
298
 
306
- headers = HTTP.headers(options[:headers])
299
+ headers = headers(options[:headers])
307
300
  path = (options[:path] || '/').to_s
308
301
  query = if options[:query]
309
- URI.escape(options[:query])
302
+ options[:query].to_s
310
303
  elsif options[:query_params]
311
304
  URI::QueryParams.dump(options[:query_params])
312
305
  end
313
306
 
314
307
  if query
315
308
  # append the query-string onto the path
316
- path += if path.include?('?')
317
- "&#{query}"
318
- else
319
- "?#{query}"
309
+ path += if path.include?('?') then "&#{query}"
310
+ else "?#{query}"
320
311
  end
321
312
  end
322
313
 
323
314
  request = Net::HTTP.const_get(name).new(path,headers)
324
315
 
325
- if request.request_body_permitted?
326
- if options[:form_data]
327
- request.set_form_data(options[:form_data])
328
- elsif options[:body]
329
- request.body = options[:body]
316
+ if options[:form_data]
317
+ case options[:form_data]
318
+ when String
319
+ request.content_type = 'application/x-www-form-urlencoded'
320
+ request.body = options[:form_data]
321
+ else
322
+ request.form_data = options[:form_data]
330
323
  end
324
+ elsif options[:body]
325
+ request.body = options[:body]
331
326
  end
332
327
 
333
328
  if options[:user]
@@ -505,13 +500,13 @@ module Ronin
505
500
  # If the block has an arity of 2, it will also be passed the expanded
506
501
  # version of the given _options_.
507
502
  #
508
- # @yieldparam [Net::HTTP::Request] request
503
+ # @yieldparam [Net::HTTPRequest] request
509
504
  # The HTTP request object to use in the request.
510
505
  #
511
506
  # @yieldparam [Hash] options
512
507
  # The expanded version of the given _options_.
513
508
  #
514
- # @return [Net::HTTP::Response]
509
+ # @return [Net::HTTPResponse]
515
510
  # The response of the HTTP request.
516
511
  #
517
512
  # @see #http_session
@@ -636,10 +631,10 @@ module Ronin
636
631
  # If a block is given, it will be passed the response received
637
632
  # from the request.
638
633
  #
639
- # @yieldparam [Net::HTTP::Response] response
634
+ # @yieldparam [Net::HTTPResponse] response
640
635
  # The HTTP response object.
641
636
  #
642
- # @return [Net::HTTP::Response]
637
+ # @return [Net::HTTPResponse]
643
638
  # The response of the HTTP request.
644
639
  #
645
640
  # @see #http_request
@@ -663,10 +658,10 @@ module Ronin
663
658
  # If a block is given, it will be passed the response received from
664
659
  # the request.
665
660
  #
666
- # @yieldparam [Net::HTTP::Response] response
661
+ # @yieldparam [Net::HTTPResponse] response
667
662
  # The HTTP response object.
668
663
  #
669
- # @return [Net::HTTP::Response]
664
+ # @return [Net::HTTPResponse]
670
665
  # The response of the HTTP request.
671
666
  #
672
667
  # @see #http_request
@@ -699,10 +694,10 @@ module Ronin
699
694
  # If a block is given, it will be passed the response received from
700
695
  # the request.
701
696
  #
702
- # @yieldparam [Net::HTTP::Response] response
697
+ # @yieldparam [Net::HTTPResponse] response
703
698
  # The HTTP response object.
704
699
  #
705
- # @return [Net::HTTP::Response]
700
+ # @return [Net::HTTPResponse]
706
701
  # The response of the HTTP request.
707
702
  #
708
703
  # @see #http_request
@@ -768,10 +763,10 @@ module Ronin
768
763
  # If a block is given, it will be passed the response received from
769
764
  # the request.
770
765
  #
771
- # @yieldparam [Net::HTTP::Response] response
766
+ # @yieldparam [Net::HTTPResponse] response
772
767
  # The HTTP response object.
773
768
  #
774
- # @return [Net::HTTP::Response]
769
+ # @return [Net::HTTPResponse]
775
770
  # The response of the HTTP request.
776
771
  #
777
772
  # @see #http_request
@@ -795,10 +790,10 @@ module Ronin
795
790
  # If a block is given, it will be passed the response received from
796
791
  # the request.
797
792
  #
798
- # @yieldparam [Net::HTTP::Response] response
793
+ # @yieldparam [Net::HTTPResponse] response
799
794
  # The HTTP response object.
800
795
  #
801
- # @return [Net::HTTP::Response]
796
+ # @return [Net::HTTPResponse]
802
797
  # The response of the HTTP request.
803
798
  #
804
799
  # @see #http_request
@@ -822,10 +817,10 @@ module Ronin
822
817
  # If a block is given, it will be passed the response received from
823
818
  # the request.
824
819
  #
825
- # @yieldparam [Net::HTTP::Response] response
820
+ # @yieldparam [Net::HTTPResponse] response
826
821
  # The HTTP response object.
827
822
  #
828
- # @return [Net::HTTP::Response]
823
+ # @return [Net::HTTPResponse]
829
824
  # The response of the HTTP request.
830
825
  #
831
826
  # @see #http_request
@@ -849,10 +844,10 @@ module Ronin
849
844
  # If a block is given, it will be passed the response received from
850
845
  # the request.
851
846
  #
852
- # @yieldparam [Net::HTTP::Response] response
847
+ # @yieldparam [Net::HTTPResponse] response
853
848
  # The HTTP response object.
854
849
  #
855
- # @return [Net::HTTP::Response]
850
+ # @return [Net::HTTPResponse]
856
851
  # The response of the HTTP request.
857
852
  #
858
853
  # @see #http_request
@@ -876,10 +871,10 @@ module Ronin
876
871
  # If a block is given, it will be passed the response received from
877
872
  # the request.
878
873
  #
879
- # @yieldparam [Net::HTTP::Response] response
874
+ # @yieldparam [Net::HTTPResponse] response
880
875
  # The HTTP response object.
881
876
  #
882
- # @return [Net::HTTP::Response]
877
+ # @return [Net::HTTPResponse]
883
878
  # The response of the HTTP request.
884
879
  #
885
880
  # @see #http_request
@@ -906,10 +901,10 @@ module Ronin
906
901
  # If a block is given, it will be passed the response received from
907
902
  # the request.
908
903
  #
909
- # @yieldparam [Net::HTTP::Response] response
904
+ # @yieldparam [Net::HTTPResponse] response
910
905
  # The HTTP response object.
911
906
  #
912
- # @return [Net::HTTP::Response]
907
+ # @return [Net::HTTPResponse]
913
908
  # The response of the HTTP request.
914
909
  #
915
910
  # @see #http_request
@@ -987,10 +982,10 @@ module Ronin
987
982
  # If a block is given, it will be passed the response received from
988
983
  # the request.
989
984
  #
990
- # @yieldparam [Net::HTTP::Response] response
985
+ # @yieldparam [Net::HTTPResponse] response
991
986
  # The HTTP response object.
992
987
  #
993
- # @return [Net::HTTP::Response]
988
+ # @return [Net::HTTPResponse]
994
989
  # The response of the HTTP request.
995
990
  #
996
991
  # @see #http_request
@@ -1016,10 +1011,10 @@ module Ronin
1016
1011
  # If a block is given, it will be passed the response received from
1017
1012
  # the request.
1018
1013
  #
1019
- # @yieldparam [Net::HTTP::Response] response
1014
+ # @yieldparam [Net::HTTPResponse] response
1020
1015
  # The HTTP response object.
1021
1016
  #
1022
- # @return [Net::HTTP::Response]
1017
+ # @return [Net::HTTPResponse]
1023
1018
  # The response of the HTTP request.
1024
1019
  #
1025
1020
  # @see #http_request
@@ -1052,10 +1047,10 @@ module Ronin
1052
1047
  # If a block is given, it will be passed the response received from
1053
1048
  # the request.
1054
1049
  #
1055
- # @yieldparam [Net::HTTP::Response] response
1050
+ # @yieldparam [Net::HTTPResponse] response
1056
1051
  # The HTTP response object.
1057
1052
  #
1058
- # @return [Net::HTTP::Response]
1053
+ # @return [Net::HTTPResponse]
1059
1054
  # The response of the HTTP request.
1060
1055
  #
1061
1056
  # @see #http_request
@@ -1079,10 +1074,10 @@ module Ronin
1079
1074
  # If a block is given, it will be passed the response received from
1080
1075
  # the request.
1081
1076
  #
1082
- # @yieldparam [Net::HTTP::Response] response
1077
+ # @yieldparam [Net::HTTPResponse] response
1083
1078
  # The HTTP response object.
1084
1079
  #
1085
- # @return [Net::HTTP::Response]
1080
+ # @return [Net::HTTPResponse]
1086
1081
  # The response of the HTTP request.
1087
1082
  #
1088
1083
  # @see #http_request
@@ -1106,10 +1101,10 @@ module Ronin
1106
1101
  # If a block is given, it will be passed the response received from
1107
1102
  # the request.
1108
1103
  #
1109
- # @yieldparam [Net::HTTP::Response] response
1104
+ # @yieldparam [Net::HTTPResponse] response
1110
1105
  # The HTTP response object.
1111
1106
  #
1112
- # @return [Net::HTTP::Response]
1107
+ # @return [Net::HTTPResponse]
1113
1108
  # The response of the HTTP request.
1114
1109
  #
1115
1110
  # @see #http_request