ronin 0.2.4 → 0.3.0

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 (240) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +95 -0
  3. data/Manifest.txt +55 -25
  4. data/README.txt +64 -52
  5. data/Rakefile +21 -14
  6. data/bin/ronin +1 -1
  7. data/bin/ronin-add +1 -1
  8. data/bin/ronin-console +1 -1
  9. data/bin/ronin-help +1 -1
  10. data/bin/ronin-install +1 -1
  11. data/bin/ronin-list +1 -1
  12. data/bin/ronin-remove +1 -1
  13. data/bin/ronin-uninstall +1 -1
  14. data/bin/ronin-update +1 -1
  15. data/lib/ronin.rb +2 -4
  16. data/lib/ronin/arch.rb +66 -21
  17. data/lib/ronin/author.rb +27 -18
  18. data/lib/ronin/cacheable.rb +63 -23
  19. data/lib/ronin/code/emittable.rb +1 -4
  20. data/lib/ronin/code/reference.rb +2 -5
  21. data/lib/ronin/code/symbol_table.rb +1 -4
  22. data/lib/ronin/code/token.rb +1 -4
  23. data/lib/ronin/config.rb +31 -10
  24. data/lib/ronin/database.rb +1 -4
  25. data/lib/ronin/database/database.rb +42 -23
  26. data/lib/ronin/database/exceptions.rb +1 -4
  27. data/lib/ronin/database/exceptions/invalid_config.rb +1 -4
  28. data/lib/ronin/environment.rb +1 -5
  29. data/lib/ronin/extensions.rb +1 -5
  30. data/lib/ronin/extensions/array.rb +8 -6
  31. data/lib/ronin/extensions/file.rb +9 -4
  32. data/lib/ronin/extensions/ip_addr.rb +33 -13
  33. data/lib/ronin/extensions/kernel.rb +44 -9
  34. data/lib/ronin/extensions/meta.rb +1 -4
  35. data/lib/ronin/extensions/string.rb +8 -7
  36. data/lib/ronin/extensions/uri.rb +1 -4
  37. data/lib/ronin/extensions/uri/http.rb +1 -48
  38. data/lib/ronin/extensions/uri/query_params.rb +27 -8
  39. data/lib/ronin/formatting.rb +1 -4
  40. data/lib/ronin/formatting/binary.rb +1 -4
  41. data/lib/ronin/formatting/digest.rb +1 -4
  42. data/lib/ronin/formatting/extensions.rb +1 -4
  43. data/lib/ronin/formatting/extensions/binary.rb +1 -4
  44. data/lib/ronin/formatting/extensions/binary/file.rb +3 -28
  45. data/lib/ronin/formatting/extensions/binary/integer.rb +31 -12
  46. data/lib/ronin/formatting/extensions/binary/string.rb +59 -36
  47. data/lib/ronin/formatting/extensions/digest.rb +1 -4
  48. data/lib/ronin/formatting/extensions/digest/string.rb +31 -9
  49. data/lib/ronin/formatting/extensions/http.rb +1 -4
  50. data/lib/ronin/formatting/extensions/http/string.rb +16 -9
  51. data/lib/ronin/formatting/extensions/text.rb +1 -4
  52. data/lib/ronin/formatting/extensions/text/array.rb +17 -7
  53. data/lib/ronin/formatting/extensions/text/string.rb +70 -27
  54. data/lib/ronin/formatting/http.rb +1 -4
  55. data/lib/ronin/formatting/text.rb +1 -4
  56. data/lib/ronin/license.rb +72 -65
  57. data/lib/ronin/model.rb +1 -4
  58. data/lib/ronin/model/has_description.rb +37 -8
  59. data/lib/ronin/model/has_license.rb +12 -8
  60. data/lib/ronin/model/has_name.rb +10 -7
  61. data/lib/ronin/model/has_version.rb +14 -4
  62. data/lib/ronin/model/model.rb +71 -14
  63. data/lib/ronin/network.rb +1 -4
  64. data/lib/ronin/network/esmtp.rb +1 -4
  65. data/lib/ronin/network/extensions.rb +1 -4
  66. data/lib/ronin/network/extensions/esmtp.rb +1 -4
  67. data/lib/ronin/network/extensions/esmtp/net.rb +49 -21
  68. data/lib/ronin/network/extensions/http.rb +1 -4
  69. data/lib/ronin/network/extensions/http/net.rb +319 -531
  70. data/lib/ronin/network/extensions/imap.rb +1 -4
  71. data/lib/ronin/network/extensions/imap/net.rb +50 -23
  72. data/lib/ronin/network/extensions/pop3.rb +1 -4
  73. data/lib/ronin/network/extensions/pop3/net.rb +40 -17
  74. data/lib/ronin/network/extensions/smtp.rb +1 -4
  75. data/lib/ronin/network/extensions/smtp/net.rb +49 -21
  76. data/lib/ronin/network/extensions/tcp.rb +1 -4
  77. data/lib/ronin/network/extensions/tcp/net.rb +234 -31
  78. data/lib/ronin/network/extensions/telnet.rb +1 -4
  79. data/lib/ronin/network/extensions/telnet/net.rb +83 -51
  80. data/lib/ronin/network/extensions/udp.rb +1 -4
  81. data/lib/ronin/network/extensions/udp/net.rb +164 -27
  82. data/lib/ronin/{sessions.rb → network/helpers.rb} +10 -13
  83. data/lib/ronin/network/helpers/esmtp.rb +129 -0
  84. data/lib/ronin/{sessions/session.rb → network/helpers/helper.rb} +25 -17
  85. data/lib/ronin/network/helpers/http.rb +444 -0
  86. data/lib/ronin/network/helpers/imap.rb +115 -0
  87. data/lib/ronin/network/helpers/pop3.rb +110 -0
  88. data/lib/ronin/network/helpers/smtp.rb +123 -0
  89. data/lib/ronin/network/helpers/tcp.rb +309 -0
  90. data/lib/ronin/network/helpers/telnet.rb +158 -0
  91. data/lib/ronin/network/helpers/udp.rb +197 -0
  92. data/lib/ronin/network/http.rb +3 -156
  93. data/lib/ronin/network/http/exceptions.rb +1 -4
  94. data/lib/ronin/network/http/exceptions/unknown_request.rb +1 -4
  95. data/lib/ronin/network/http/http.rb +214 -0
  96. data/lib/ronin/network/http/proxy.rb +308 -0
  97. data/lib/ronin/network/imap.rb +7 -6
  98. data/lib/ronin/network/pop3.rb +7 -6
  99. data/lib/ronin/network/smtp.rb +1 -4
  100. data/lib/ronin/network/smtp/email.rb +34 -18
  101. data/lib/ronin/network/smtp/smtp.rb +19 -7
  102. data/lib/ronin/network/tcp.rb +1 -4
  103. data/lib/ronin/network/telnet.rb +25 -12
  104. data/lib/ronin/network/udp.rb +1 -4
  105. data/lib/ronin/os.rb +43 -21
  106. data/lib/ronin/path.rb +29 -9
  107. data/lib/ronin/platform.rb +1 -4
  108. data/lib/ronin/platform/exceptions.rb +1 -4
  109. data/lib/ronin/platform/exceptions/extension_not_found.rb +1 -4
  110. data/lib/ronin/platform/exceptions/overlay_cached.rb +1 -4
  111. data/lib/ronin/platform/exceptions/overlay_not_found.rb +1 -4
  112. data/lib/ronin/platform/extension.rb +195 -52
  113. data/lib/ronin/platform/extension_cache.rb +60 -24
  114. data/lib/ronin/platform/maintainer.rb +15 -8
  115. data/lib/ronin/platform/object_cache.rb +29 -8
  116. data/lib/ronin/platform/overlay.rb +82 -26
  117. data/lib/ronin/platform/overlay_cache.rb +179 -56
  118. data/lib/ronin/platform/platform.rb +154 -58
  119. data/lib/ronin/platform/ronin.rb +38 -11
  120. data/lib/ronin/product.rb +17 -17
  121. data/lib/ronin/rpc.rb +1 -4
  122. data/lib/ronin/rpc/call.rb +1 -4
  123. data/lib/ronin/rpc/client.rb +1 -4
  124. data/lib/ronin/rpc/console.rb +1 -4
  125. data/lib/ronin/rpc/exceptions.rb +1 -4
  126. data/lib/ronin/rpc/exceptions/not_implemented.rb +1 -4
  127. data/lib/ronin/rpc/exceptions/response_missing.rb +1 -4
  128. data/lib/ronin/rpc/response.rb +1 -4
  129. data/lib/ronin/rpc/service.rb +1 -4
  130. data/lib/ronin/rpc/shell.rb +1 -4
  131. data/lib/ronin/scanners.rb +1 -4
  132. data/lib/ronin/scanners/exceptions.rb +1 -4
  133. data/lib/ronin/scanners/exceptions/unknown_category.rb +1 -4
  134. data/lib/ronin/scanners/scanner.rb +82 -26
  135. data/lib/ronin/static.rb +1 -4
  136. data/lib/ronin/static/finders.rb +1 -4
  137. data/lib/ronin/static/static.rb +16 -7
  138. data/lib/ronin/templates.rb +2 -4
  139. data/lib/ronin/templates/erb.rb +24 -10
  140. data/lib/ronin/templates/template.rb +130 -0
  141. data/lib/ronin/ui.rb +2 -6
  142. data/lib/ronin/ui/command_line.rb +1 -4
  143. data/lib/ronin/ui/command_line/command.rb +137 -68
  144. data/lib/ronin/ui/command_line/command_line.rb +52 -29
  145. data/lib/ronin/ui/command_line/commands/add.rb +39 -67
  146. data/lib/ronin/ui/command_line/commands/console.rb +23 -27
  147. data/lib/ronin/ui/command_line/commands/help.rb +10 -29
  148. data/lib/ronin/ui/command_line/commands/install.rb +31 -56
  149. data/lib/ronin/ui/command_line/commands/list.rb +34 -52
  150. data/lib/ronin/ui/command_line/commands/remove.rb +12 -32
  151. data/lib/ronin/ui/command_line/commands/uninstall.rb +11 -31
  152. data/lib/ronin/ui/command_line/commands/update.rb +15 -35
  153. data/lib/ronin/ui/command_line/exceptions.rb +1 -4
  154. data/lib/ronin/ui/command_line/exceptions/unknown_command.rb +1 -4
  155. data/lib/ronin/ui/console.rb +54 -23
  156. data/lib/ronin/ui/hexdump.rb +1 -4
  157. data/lib/ronin/ui/hexdump/extensions.rb +1 -4
  158. data/lib/ronin/ui/hexdump/extensions/file.rb +8 -6
  159. data/lib/ronin/ui/hexdump/extensions/kernel.rb +4 -5
  160. data/lib/ronin/ui/hexdump/hexdump.rb +8 -5
  161. data/lib/ronin/{sessions/exceptions.rb → ui/output.rb} +3 -5
  162. data/lib/ronin/ui/output/handler.rb +121 -0
  163. data/lib/ronin/ui/output/helpers.rb +110 -0
  164. data/lib/ronin/ui/output/output.rb +144 -0
  165. data/lib/ronin/ui/shell.rb +38 -12
  166. data/lib/ronin/version.rb +2 -5
  167. data/lib/ronin/{sessions/exceptions/variable_missing.rb → yard.rb} +2 -10
  168. data/lib/ronin/{ronin.rb → yard/handlers.rb} +5 -15
  169. data/lib/ronin/yard/handlers/ruby.rb +27 -0
  170. data/lib/ronin/yard/handlers/ruby/base.rb +27 -0
  171. data/lib/ronin/yard/handlers/ruby/belongs_to_handler.rb +45 -0
  172. data/lib/ronin/yard/handlers/ruby/eval_block_handler.rb +18 -0
  173. data/lib/ronin/yard/handlers/ruby/has_handler.rb +49 -0
  174. data/lib/ronin/yard/handlers/ruby/legacy.rb +26 -0
  175. data/lib/ronin/yard/handlers/ruby/legacy/belongs_to_handler.rb +41 -0
  176. data/lib/ronin/yard/handlers/ruby/legacy/eval_block_handler.rb +19 -0
  177. data/lib/ronin/yard/handlers/ruby/legacy/has_handler.rb +34 -0
  178. data/lib/ronin/yard/handlers/ruby/legacy/metaclass_eval_handler.rb +21 -0
  179. data/lib/ronin/yard/handlers/ruby/legacy/property_handler.rb +41 -0
  180. data/lib/ronin/yard/handlers/ruby/legacy/scanner_handler.rb +61 -0
  181. data/lib/ronin/yard/handlers/ruby/metaclass_eval_handler.rb +18 -0
  182. data/lib/ronin/yard/handlers/ruby/property_handler.rb +45 -0
  183. data/lib/ronin/yard/handlers/ruby/scanner_handler.rb +66 -0
  184. data/spec/author_spec.rb +3 -3
  185. data/spec/extensions/classes/some_class.rb +2 -0
  186. data/spec/extensions/kernel_spec.rb +17 -0
  187. data/spec/extensions/uri/http_spec.rb +0 -31
  188. data/spec/formatting/binary/integer_spec.rb +4 -0
  189. data/spec/formatting/text/string_spec.rb +96 -0
  190. data/spec/license_spec.rb +6 -6
  191. data/spec/model/classes/basic_model.rb +13 -0
  192. data/spec/model/classes/custom_model.rb +17 -0
  193. data/spec/model/classes/described_model.rb +10 -0
  194. data/spec/model/has_description_spec.rb +42 -0
  195. data/spec/model/has_license_spec.rb +18 -4
  196. data/spec/model/model_spec.rb +68 -0
  197. data/spec/network/helpers/classes/test_helper.rb +11 -0
  198. data/spec/network/helpers/classes/uses_test_helper.rb +10 -0
  199. data/spec/network/helpers/helper_spec.rb +25 -0
  200. data/spec/network/{http_spec.rb → http/http_spec.rb} +0 -0
  201. data/spec/network/http/proxy_spec.rb +116 -0
  202. data/spec/os_spec.rb +4 -4
  203. data/spec/platform/extension_cache_spec.rb +14 -0
  204. data/spec/platform/extension_spec.rb +11 -0
  205. data/spec/platform/platform_spec.rb +8 -0
  206. data/spec/product_spec.rb +9 -9
  207. data/spec/spec_helper.rb +1 -1
  208. data/spec/templates/classes/{uses_erb.rb → example_erb.rb} +1 -1
  209. data/spec/templates/classes/example_template.rb +21 -0
  210. data/spec/templates/erb_spec.rb +2 -2
  211. data/spec/templates/helpers/static.rb +5 -0
  212. data/spec/templates/helpers/static/templates/_relative.erb +1 -0
  213. data/spec/templates/helpers/static/templates/example.erb +1 -0
  214. data/spec/templates/template_spec.rb +41 -0
  215. data/spec/ui/command_line/classes/test_command.rb +23 -0
  216. data/spec/ui/command_line/command_spec.rb +31 -0
  217. data/spec/ui/output_spec.rb +29 -0
  218. data/static/ronin/platform/overlay.xsl +135 -114
  219. data/tasks/spec.rb +1 -0
  220. data/tasks/yard.rb +18 -0
  221. metadata +98 -59
  222. metadata.gz.sig +0 -0
  223. data/TODO.txt +0 -15
  224. data/lib/ronin/extensions/hash.rb +0 -62
  225. data/lib/ronin/sessions/esmtp.rb +0 -57
  226. data/lib/ronin/sessions/http.rb +0 -678
  227. data/lib/ronin/sessions/imap.rb +0 -54
  228. data/lib/ronin/sessions/pop3.rb +0 -52
  229. data/lib/ronin/sessions/smtp.rb +0 -57
  230. data/lib/ronin/sessions/tcp.rb +0 -100
  231. data/lib/ronin/sessions/telnet.rb +0 -55
  232. data/lib/ronin/sessions/udp.rb +0 -73
  233. data/lib/ronin/ui/command_line/options.rb +0 -136
  234. data/lib/ronin/ui/diagnostics.rb +0 -66
  235. data/lib/ronin/ui/verbose.rb +0 -58
  236. data/spec/extensions/hash_spec.rb +0 -38
  237. data/spec/sessions/classes/test_session.rb +0 -11
  238. data/spec/sessions/classes/uses_test_session.rb +0 -10
  239. data/spec/sessions/session_spec.rb +0 -25
  240. data/spec/ui/verbose_spec.rb +0 -17
@@ -0,0 +1,158 @@
1
+ #
2
+ # Ronin - A Ruby platform for exploit development and security research.
3
+ #
4
+ # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This program is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # This program 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 General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program; if not, write to the Free Software
18
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
+ #
20
+
21
+ require 'ronin/network/helpers/helper'
22
+ require 'ronin/network/telnet'
23
+
24
+ module Ronin
25
+ module Network
26
+ module Helpers
27
+ module Telnet
28
+ include Helper
29
+
30
+ protected
31
+
32
+ #
33
+ # Creates a connection to a Telnet server. The +@host+, +@port+,
34
+ # +@telnet_user+, +@telnet_password+, +@telnet_proxy+ and
35
+ # +@telnet_ssl+ instance variables will also be used to connect
36
+ # to the Telnet server.
37
+ #
38
+ # @param [Hash] options
39
+ # Additional options.
40
+ #
41
+ # @option options [Integer] :port (Ronin::Network::Telnet.default_port)
42
+ # The port to connect to.
43
+ #
44
+ # @option options [Boolean] :binmode
45
+ # Indicates that newline substitution shall not be performed.
46
+ #
47
+ # @option options [String] :output_log
48
+ # The name of the file to write connection status messages
49
+ # and all received traffic to.
50
+ #
51
+ # @option options [String] :dump_log
52
+ # Similar to the +:output_log+ option, but connection output
53
+ # is also written in hexdump format.
54
+ #
55
+ # @option options [Regexp] :prompt (Ronin::Network::Telnet.default_prompt)
56
+ # A regular expression matching the host command-line prompt
57
+ # sequence, used to determine when a command has finished.
58
+ #
59
+ # @option options [Boolean] :telnet (true)
60
+ # Indicates that the connection shall behave as a telnet
61
+ # connection.
62
+ #
63
+ # @option options [Boolean] :plain
64
+ # Indicates that the connection shall behave as a normal TCP
65
+ # connection.
66
+ #
67
+ # @option options [Integer] :timeout (Ronin::Network::Telnet.default_timeout)
68
+ # The number of seconds to wait before timing out both the
69
+ # initial attempt to connect to host, and all attempts to read
70
+ # data from the host.
71
+ #
72
+ # @option options [Integer] :wait_time
73
+ # The amount of time to wait after seeing what looks like
74
+ # a prompt.
75
+ #
76
+ # @option options [Net::Telnet, IO] :proxy (Ronin::Network::Telnet.proxy)
77
+ # A proxy object to used instead of opening a direct connection
78
+ # to the host.
79
+ #
80
+ # @option options [String] :user
81
+ # The user to login as.
82
+ #
83
+ # @option options [String] :password
84
+ # The password to login with.
85
+ #
86
+ # @yield [connection]
87
+ # If a block is given, it will be passed the newly created
88
+ # Telnet connection.
89
+ #
90
+ # @yieldparam [Net::Telnet] connection
91
+ # The newly created Telnet connection.
92
+ #
93
+ # @return [Net::Telnet]
94
+ # The Telnet session
95
+ #
96
+ # @example
97
+ # telnet_connect
98
+ # # => Net::Telnet
99
+ #
100
+ # @since 0.3.0
101
+ #
102
+ def telnet_connect(options={},&block)
103
+ require_variable :host
104
+
105
+ options[:port] ||= @port
106
+ options[:user] ||= @telnet_user
107
+ options[:password] ||= @telnet_password
108
+
109
+ options[:proxy] ||= @telnet_proxy
110
+ options[:ssl] ||= @telnet_ssl
111
+
112
+ if @port
113
+ print_info "Connecting to #{@host}:#{@port} ..."
114
+ else
115
+ print_info "Connecting to #{@host} ..."
116
+ end
117
+
118
+ return ::Net.telnet_connect(@host,options,&block)
119
+ end
120
+
121
+ #
122
+ # Starts a session with a Telnet server. The +@host+, +@port+,
123
+ # +@telnet_user+, +@telnet_password+, +@telnet_proxy+ and
124
+ # +@telnet_ssl+ instance variables will also be used to connect
125
+ # to the Telnet server.
126
+ #
127
+ # @yield [session]
128
+ # If a block is given, it will be passed the newly created
129
+ # Telnet session. After the block has returned, the Telnet
130
+ # session will be closed.
131
+ #
132
+ # @yieldparam [Net::Telnet] session
133
+ # The newly created Telnet session.
134
+ #
135
+ # @example
136
+ # telnet_session do |movie|
137
+ # movie.each_line { |line| puts line }
138
+ # end
139
+ #
140
+ # @see telnet_connect
141
+ # @since 0.3.0
142
+ #
143
+ def telnet_session(options={},&block)
144
+ return telnet_connect(options) do |sess|
145
+ block.call(sess) if block
146
+ sess.close
147
+
148
+ if @port
149
+ print_info "Disconnecting to #{@host}:#{@port}"
150
+ else
151
+ print_info "Disconnecting to #{@host}"
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,197 @@
1
+ #
2
+ # Ronin - A Ruby platform for exploit development and security research.
3
+ #
4
+ # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This program is free software; you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation; either version 2 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # This program 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 General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program; if not, write to the Free Software
18
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
+ #
20
+
21
+ require 'ronin/network/helpers/helper'
22
+ require 'ronin/network/udp'
23
+
24
+ module Ronin
25
+ module Network
26
+ module Helpers
27
+ module UDP
28
+ include Helper
29
+
30
+ protected
31
+
32
+ #
33
+ # Opens a UDP connection to the host and port specified by the
34
+ # +@host+ and +@port+ instance variables. If the +@local_host+ and
35
+ # +@local_port+ instance variables are set, they will be used for
36
+ # the local host and port of the UDP connection.
37
+ #
38
+ # @yield [socket]
39
+ # If a block is given, it will be passed the newly created socket.
40
+ #
41
+ # @yieldparam [UDPsocket] socket
42
+ # The newly created UDPSocket object.
43
+ #
44
+ # @return [UDPSocket]
45
+ # The newly created UDPSocket object.
46
+ #
47
+ # @example
48
+ # udp_connect
49
+ # # => UDPSocket
50
+ #
51
+ # @example
52
+ # udp_connect do |sock|
53
+ # puts sock.readlines
54
+ # end
55
+ #
56
+ # @since 0.3.0
57
+ #
58
+ def udp_connect(&block)
59
+ require_variable :host
60
+ require_variable :port
61
+
62
+ print_info "Connecting to #{@host}:#{@port} ..."
63
+
64
+ return ::Net.udp_connect(@host,@port,@local_host,@local_port,&block)
65
+ end
66
+
67
+ #
68
+ # Connects to the host and port specified by the +@host+ and +@port+
69
+ # instance variables, then sends the specified _data_. If the
70
+ # +@local_host+ and +@local_port+ instance variables are set, they
71
+ # will be used for the local host and port of the UDP connection.
72
+ #
73
+ # @param [String] data
74
+ # The data to send through the connection.
75
+ #
76
+ # @yield [socket]
77
+ # If a block is given, it will be passed the newly created socket.
78
+ #
79
+ # @yieldparam [UDPsocket] socket
80
+ # The newly created UDPSocket object.
81
+ #
82
+ # @return [UDPSocket]
83
+ # The newly created UDPSocket object.
84
+ #
85
+ # @since 0.3.0
86
+ #
87
+ def udp_connect_and_send(data,&block)
88
+ require_variable :host
89
+ require_variable :port
90
+
91
+ print_info "Connecting to #{@host}:#{@port} ..."
92
+ print_debug "Sending data: #{data.inspect}"
93
+
94
+ return ::Net.udp_connect_and_send(data,@host,@port,@local_host,@local_port,&block)
95
+ end
96
+
97
+ #
98
+ # Creates a UDP session to the host and port specified by the
99
+ # +@host+ and +@port+ instance variables. If the +@local_host+ and
100
+ # +@local_port+ instance variables are set, they will be used for
101
+ # the local host and port of the UDP connection.
102
+ #
103
+ # @yield [socket]
104
+ # If a block is given, it will be passed the newly created socket.
105
+ # After the block has returned, the socket will then be closed.
106
+ #
107
+ # @yieldparam [UDPsocket] socket
108
+ # The newly created UDPSocket object.
109
+ #
110
+ # @since 0.3.0
111
+ #
112
+ def udp_session(&block)
113
+ require_variable :host
114
+ require_variable :port
115
+
116
+ print_info "Connecting to #{@host}:#{@port} ..."
117
+
118
+ ::Net.udp_session(@host,@port,@local_host,@local_port,&block)
119
+
120
+ print_info "Disconnected from #{@host}:#{@port}"
121
+ return nil
122
+ end
123
+
124
+ #
125
+ # Creates a new UDPServer object listening on +server_host+ and
126
+ # +server_port+.
127
+ #
128
+ # @yield [server]
129
+ # The given block will be passed the newly created server.
130
+ #
131
+ # @yieldparam [UDPServer] server
132
+ # The newly created server.
133
+ #
134
+ # @return [UDPServer]
135
+ # The newly created server.
136
+ #
137
+ # @example
138
+ # udp_server
139
+ #
140
+ # @since 0.3.0
141
+ #
142
+ def udp_server(&block)
143
+ require_variable :server_port
144
+
145
+ if @server_host
146
+ print_info "Listening on #{@server_host}:#{@server_port} ..."
147
+ else
148
+ print_info "Listening on #{@server_port} ..."
149
+ end
150
+
151
+ return ::Net.udp_server(@server_port,@server_host,&block)
152
+ end
153
+
154
+ #
155
+ # Creates a new UDPServer object listening on +server_host+ and
156
+ # +server_port+, passing it to the given _block then closing the
157
+ # server.
158
+ #
159
+ # @yield [server]
160
+ # The given block will be passed the newly created server.
161
+ # When the block has finished, the server will be closed.
162
+ #
163
+ # @yieldparam [UDPServer] server
164
+ # The newly created server.
165
+ #
166
+ # @return [nil]
167
+ #
168
+ # @example
169
+ # udp_server_session do |server|
170
+ # data, sender = server.recvfrom(1024)
171
+ # end
172
+ #
173
+ # @since 0.3.0
174
+ #
175
+ def udp_server_session(&block)
176
+ require_variable :server_port
177
+
178
+ if @server_host
179
+ print_info "Listening on #{@server_host}:#{@server_port} ..."
180
+ else
181
+ print_info "Listening on #{@server_port} ..."
182
+ end
183
+
184
+ ::Net.udp_server_session(&block)
185
+
186
+ if @server_host
187
+ print_info "Closed #{@server_host}:#{@server_port}"
188
+ else
189
+ print_info "Closed #{@server_port}"
190
+ end
191
+
192
+ return nil
193
+ end
194
+ end
195
+ end
196
+ end
197
+ end
@@ -1,7 +1,5 @@
1
1
  #
2
- #--
3
- # Ronin - A Ruby platform designed for information security and data
4
- # exploration tasks.
2
+ # Ronin - A Ruby platform for exploit development and security research.
5
3
  #
6
4
  # Copyright (c) 2006-2009 Hal Brodigan (postmodern.mod3 at gmail.com)
7
5
  #
@@ -18,159 +16,8 @@
18
16
  # You should have received a copy of the GNU General Public License
19
17
  # along with this program; if not, write to the Free Software
20
18
  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
- #++
22
19
  #
23
20
 
21
+ require 'ronin/network/http/exceptions'
22
+ require 'ronin/network/http/http'
24
23
  require 'ronin/network/extensions/http'
25
- require 'ronin/network/http/exceptions/unknown_request'
26
-
27
- module Ronin
28
- module Network
29
- module HTTP
30
- # Common HTTP proxy port
31
- COMMON_PROXY_PORT = 8080
32
-
33
- #
34
- # Returns the default Ronin HTTP proxy port to use for HTTP proxies.
35
- #
36
- def HTTP.default_proxy_port
37
- @@http_default_proxy_port ||= COMMON_PROXY_PORT
38
- end
39
-
40
- #
41
- # Sets the default Ronin HTTP proxy port to the specified _port_.
42
- #
43
- def HTTP.default_proxy_port=(port)
44
- @@http_default_proxy_port = port
45
- end
46
-
47
- #
48
- # Returns the default Ronin HTTP proxy hash.
49
- #
50
- def HTTP.default_proxy
51
- {:host => nil, :port => HTTP.default_proxy_port, :user => nil, :pass => nil}
52
- end
53
-
54
- #
55
- # Returns the Ronin HTTP proxy hash.
56
- #
57
- def HTTP.proxy
58
- @@http_proxy ||= default_proxy
59
- end
60
-
61
- #
62
- # Resets the Ronin HTTP proxy setting.
63
- #
64
- def HTTP.disable_proxy
65
- @@http_proxy = default_proxy
66
- end
67
-
68
- #
69
- # Returns the default Ronin HTTP User-Agent.
70
- #
71
- def HTTP.user_agent
72
- @@http_user_agent ||= nil
73
- end
74
-
75
- #
76
- # Sets the default Ronin HTTP User-Agent to the specified _agent_.
77
- #
78
- def HTTP.user_agent=(agent)
79
- @@http_user_agent = agent
80
- end
81
-
82
- #
83
- # Expands the given HTTP _options_.
84
- #
85
- def HTTP.expand_options(options={})
86
- new_options = options.dup
87
-
88
- if new_options[:url]
89
- url = URI(new_options.delete(:url).to_s)
90
-
91
- new_options[:host] = url.host
92
- new_options[:port] = url.port
93
-
94
- new_options[:user] = url.user if url.user
95
- new_options[:password] = url.password if url.password
96
-
97
- unless url.path.empty?
98
- new_options[:path] = url.path
99
- else
100
- new_options[:path] = '/'
101
- end
102
-
103
- new_options[:path] << "?#{url.query}" if url.query
104
- else
105
- new_options[:port] ||= ::Net::HTTP.default_port
106
- new_options[:path] ||= '/'
107
- end
108
-
109
- if (proxy = new_options[:proxy])
110
- proxy[:port] ||= Ronin::Network::HTTP.default_proxy_port
111
- else
112
- new_options[:proxy] = Ronin::Network::HTTP.proxy
113
- end
114
-
115
- return new_options
116
- end
117
-
118
- #
119
- # Returns Ronin HTTP headers created from the given _options_.
120
- #
121
- def HTTP.headers(options={})
122
- headers = {}
123
-
124
- if HTTP.user_agent
125
- headers['User-Agent'] = HTTP.user_agent
126
- end
127
-
128
- if options
129
- options.each do |name,value|
130
- header_name = name.to_s.split(/[\s+_-]/).map { |word|
131
- word.capitalize
132
- }.join('-')
133
-
134
- headers[header_name] = value.to_s
135
- end
136
- end
137
-
138
- return headers
139
- end
140
-
141
- #
142
- # Creates an HTTP request object with the specified _type_ and
143
- # given _options_. If type does not represent the name of an Net:HTTP
144
- # Request Class an UnknownRequest exception will be raised.
145
- #
146
- def HTTP.request(options={})
147
- unless options[:method]
148
- raise(ArgumentError,"the :method option must be specified",caller)
149
- end
150
-
151
- name = options[:method].to_s.capitalize
152
-
153
- unless Net::HTTP.const_defined?(name)
154
- raise(UnknownRequest,"unknown HTTP request type #{name.dump}",caller)
155
- end
156
-
157
- headers = HTTP.headers(options[:headers])
158
- path = (options[:path] || '/').to_s
159
-
160
- request = Net::HTTP.const_get(name).new(path,headers)
161
-
162
- if (user = options.delete(:user))
163
- user = user.to_s
164
-
165
- if (password = options.delete(:password))
166
- password = password.to_s
167
- end
168
-
169
- request.basic_auth(user,password)
170
- end
171
-
172
- return request
173
- end
174
- end
175
- end
176
- end