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.
- data.tar.gz.sig +0 -0
- data/History.txt +95 -0
- data/Manifest.txt +55 -25
- data/README.txt +64 -52
- data/Rakefile +21 -14
- data/bin/ronin +1 -1
- data/bin/ronin-add +1 -1
- data/bin/ronin-console +1 -1
- data/bin/ronin-help +1 -1
- data/bin/ronin-install +1 -1
- data/bin/ronin-list +1 -1
- data/bin/ronin-remove +1 -1
- data/bin/ronin-uninstall +1 -1
- data/bin/ronin-update +1 -1
- data/lib/ronin.rb +2 -4
- data/lib/ronin/arch.rb +66 -21
- data/lib/ronin/author.rb +27 -18
- data/lib/ronin/cacheable.rb +63 -23
- data/lib/ronin/code/emittable.rb +1 -4
- data/lib/ronin/code/reference.rb +2 -5
- data/lib/ronin/code/symbol_table.rb +1 -4
- data/lib/ronin/code/token.rb +1 -4
- data/lib/ronin/config.rb +31 -10
- data/lib/ronin/database.rb +1 -4
- data/lib/ronin/database/database.rb +42 -23
- data/lib/ronin/database/exceptions.rb +1 -4
- data/lib/ronin/database/exceptions/invalid_config.rb +1 -4
- data/lib/ronin/environment.rb +1 -5
- data/lib/ronin/extensions.rb +1 -5
- data/lib/ronin/extensions/array.rb +8 -6
- data/lib/ronin/extensions/file.rb +9 -4
- data/lib/ronin/extensions/ip_addr.rb +33 -13
- data/lib/ronin/extensions/kernel.rb +44 -9
- data/lib/ronin/extensions/meta.rb +1 -4
- data/lib/ronin/extensions/string.rb +8 -7
- data/lib/ronin/extensions/uri.rb +1 -4
- data/lib/ronin/extensions/uri/http.rb +1 -48
- data/lib/ronin/extensions/uri/query_params.rb +27 -8
- data/lib/ronin/formatting.rb +1 -4
- data/lib/ronin/formatting/binary.rb +1 -4
- data/lib/ronin/formatting/digest.rb +1 -4
- data/lib/ronin/formatting/extensions.rb +1 -4
- data/lib/ronin/formatting/extensions/binary.rb +1 -4
- data/lib/ronin/formatting/extensions/binary/file.rb +3 -28
- data/lib/ronin/formatting/extensions/binary/integer.rb +31 -12
- data/lib/ronin/formatting/extensions/binary/string.rb +59 -36
- data/lib/ronin/formatting/extensions/digest.rb +1 -4
- data/lib/ronin/formatting/extensions/digest/string.rb +31 -9
- data/lib/ronin/formatting/extensions/http.rb +1 -4
- data/lib/ronin/formatting/extensions/http/string.rb +16 -9
- data/lib/ronin/formatting/extensions/text.rb +1 -4
- data/lib/ronin/formatting/extensions/text/array.rb +17 -7
- data/lib/ronin/formatting/extensions/text/string.rb +70 -27
- data/lib/ronin/formatting/http.rb +1 -4
- data/lib/ronin/formatting/text.rb +1 -4
- data/lib/ronin/license.rb +72 -65
- data/lib/ronin/model.rb +1 -4
- data/lib/ronin/model/has_description.rb +37 -8
- data/lib/ronin/model/has_license.rb +12 -8
- data/lib/ronin/model/has_name.rb +10 -7
- data/lib/ronin/model/has_version.rb +14 -4
- data/lib/ronin/model/model.rb +71 -14
- data/lib/ronin/network.rb +1 -4
- data/lib/ronin/network/esmtp.rb +1 -4
- data/lib/ronin/network/extensions.rb +1 -4
- data/lib/ronin/network/extensions/esmtp.rb +1 -4
- data/lib/ronin/network/extensions/esmtp/net.rb +49 -21
- data/lib/ronin/network/extensions/http.rb +1 -4
- data/lib/ronin/network/extensions/http/net.rb +319 -531
- data/lib/ronin/network/extensions/imap.rb +1 -4
- data/lib/ronin/network/extensions/imap/net.rb +50 -23
- data/lib/ronin/network/extensions/pop3.rb +1 -4
- data/lib/ronin/network/extensions/pop3/net.rb +40 -17
- data/lib/ronin/network/extensions/smtp.rb +1 -4
- data/lib/ronin/network/extensions/smtp/net.rb +49 -21
- data/lib/ronin/network/extensions/tcp.rb +1 -4
- data/lib/ronin/network/extensions/tcp/net.rb +234 -31
- data/lib/ronin/network/extensions/telnet.rb +1 -4
- data/lib/ronin/network/extensions/telnet/net.rb +83 -51
- data/lib/ronin/network/extensions/udp.rb +1 -4
- data/lib/ronin/network/extensions/udp/net.rb +164 -27
- data/lib/ronin/{sessions.rb → network/helpers.rb} +10 -13
- data/lib/ronin/network/helpers/esmtp.rb +129 -0
- data/lib/ronin/{sessions/session.rb → network/helpers/helper.rb} +25 -17
- data/lib/ronin/network/helpers/http.rb +444 -0
- data/lib/ronin/network/helpers/imap.rb +115 -0
- data/lib/ronin/network/helpers/pop3.rb +110 -0
- data/lib/ronin/network/helpers/smtp.rb +123 -0
- data/lib/ronin/network/helpers/tcp.rb +309 -0
- data/lib/ronin/network/helpers/telnet.rb +158 -0
- data/lib/ronin/network/helpers/udp.rb +197 -0
- data/lib/ronin/network/http.rb +3 -156
- data/lib/ronin/network/http/exceptions.rb +1 -4
- data/lib/ronin/network/http/exceptions/unknown_request.rb +1 -4
- data/lib/ronin/network/http/http.rb +214 -0
- data/lib/ronin/network/http/proxy.rb +308 -0
- data/lib/ronin/network/imap.rb +7 -6
- data/lib/ronin/network/pop3.rb +7 -6
- data/lib/ronin/network/smtp.rb +1 -4
- data/lib/ronin/network/smtp/email.rb +34 -18
- data/lib/ronin/network/smtp/smtp.rb +19 -7
- data/lib/ronin/network/tcp.rb +1 -4
- data/lib/ronin/network/telnet.rb +25 -12
- data/lib/ronin/network/udp.rb +1 -4
- data/lib/ronin/os.rb +43 -21
- data/lib/ronin/path.rb +29 -9
- data/lib/ronin/platform.rb +1 -4
- data/lib/ronin/platform/exceptions.rb +1 -4
- data/lib/ronin/platform/exceptions/extension_not_found.rb +1 -4
- data/lib/ronin/platform/exceptions/overlay_cached.rb +1 -4
- data/lib/ronin/platform/exceptions/overlay_not_found.rb +1 -4
- data/lib/ronin/platform/extension.rb +195 -52
- data/lib/ronin/platform/extension_cache.rb +60 -24
- data/lib/ronin/platform/maintainer.rb +15 -8
- data/lib/ronin/platform/object_cache.rb +29 -8
- data/lib/ronin/platform/overlay.rb +82 -26
- data/lib/ronin/platform/overlay_cache.rb +179 -56
- data/lib/ronin/platform/platform.rb +154 -58
- data/lib/ronin/platform/ronin.rb +38 -11
- data/lib/ronin/product.rb +17 -17
- data/lib/ronin/rpc.rb +1 -4
- data/lib/ronin/rpc/call.rb +1 -4
- data/lib/ronin/rpc/client.rb +1 -4
- data/lib/ronin/rpc/console.rb +1 -4
- data/lib/ronin/rpc/exceptions.rb +1 -4
- data/lib/ronin/rpc/exceptions/not_implemented.rb +1 -4
- data/lib/ronin/rpc/exceptions/response_missing.rb +1 -4
- data/lib/ronin/rpc/response.rb +1 -4
- data/lib/ronin/rpc/service.rb +1 -4
- data/lib/ronin/rpc/shell.rb +1 -4
- data/lib/ronin/scanners.rb +1 -4
- data/lib/ronin/scanners/exceptions.rb +1 -4
- data/lib/ronin/scanners/exceptions/unknown_category.rb +1 -4
- data/lib/ronin/scanners/scanner.rb +82 -26
- data/lib/ronin/static.rb +1 -4
- data/lib/ronin/static/finders.rb +1 -4
- data/lib/ronin/static/static.rb +16 -7
- data/lib/ronin/templates.rb +2 -4
- data/lib/ronin/templates/erb.rb +24 -10
- data/lib/ronin/templates/template.rb +130 -0
- data/lib/ronin/ui.rb +2 -6
- data/lib/ronin/ui/command_line.rb +1 -4
- data/lib/ronin/ui/command_line/command.rb +137 -68
- data/lib/ronin/ui/command_line/command_line.rb +52 -29
- data/lib/ronin/ui/command_line/commands/add.rb +39 -67
- data/lib/ronin/ui/command_line/commands/console.rb +23 -27
- data/lib/ronin/ui/command_line/commands/help.rb +10 -29
- data/lib/ronin/ui/command_line/commands/install.rb +31 -56
- data/lib/ronin/ui/command_line/commands/list.rb +34 -52
- data/lib/ronin/ui/command_line/commands/remove.rb +12 -32
- data/lib/ronin/ui/command_line/commands/uninstall.rb +11 -31
- data/lib/ronin/ui/command_line/commands/update.rb +15 -35
- data/lib/ronin/ui/command_line/exceptions.rb +1 -4
- data/lib/ronin/ui/command_line/exceptions/unknown_command.rb +1 -4
- data/lib/ronin/ui/console.rb +54 -23
- data/lib/ronin/ui/hexdump.rb +1 -4
- data/lib/ronin/ui/hexdump/extensions.rb +1 -4
- data/lib/ronin/ui/hexdump/extensions/file.rb +8 -6
- data/lib/ronin/ui/hexdump/extensions/kernel.rb +4 -5
- data/lib/ronin/ui/hexdump/hexdump.rb +8 -5
- data/lib/ronin/{sessions/exceptions.rb → ui/output.rb} +3 -5
- data/lib/ronin/ui/output/handler.rb +121 -0
- data/lib/ronin/ui/output/helpers.rb +110 -0
- data/lib/ronin/ui/output/output.rb +144 -0
- data/lib/ronin/ui/shell.rb +38 -12
- data/lib/ronin/version.rb +2 -5
- data/lib/ronin/{sessions/exceptions/variable_missing.rb → yard.rb} +2 -10
- data/lib/ronin/{ronin.rb → yard/handlers.rb} +5 -15
- data/lib/ronin/yard/handlers/ruby.rb +27 -0
- data/lib/ronin/yard/handlers/ruby/base.rb +27 -0
- data/lib/ronin/yard/handlers/ruby/belongs_to_handler.rb +45 -0
- data/lib/ronin/yard/handlers/ruby/eval_block_handler.rb +18 -0
- data/lib/ronin/yard/handlers/ruby/has_handler.rb +49 -0
- data/lib/ronin/yard/handlers/ruby/legacy.rb +26 -0
- data/lib/ronin/yard/handlers/ruby/legacy/belongs_to_handler.rb +41 -0
- data/lib/ronin/yard/handlers/ruby/legacy/eval_block_handler.rb +19 -0
- data/lib/ronin/yard/handlers/ruby/legacy/has_handler.rb +34 -0
- data/lib/ronin/yard/handlers/ruby/legacy/metaclass_eval_handler.rb +21 -0
- data/lib/ronin/yard/handlers/ruby/legacy/property_handler.rb +41 -0
- data/lib/ronin/yard/handlers/ruby/legacy/scanner_handler.rb +61 -0
- data/lib/ronin/yard/handlers/ruby/metaclass_eval_handler.rb +18 -0
- data/lib/ronin/yard/handlers/ruby/property_handler.rb +45 -0
- data/lib/ronin/yard/handlers/ruby/scanner_handler.rb +66 -0
- data/spec/author_spec.rb +3 -3
- data/spec/extensions/classes/some_class.rb +2 -0
- data/spec/extensions/kernel_spec.rb +17 -0
- data/spec/extensions/uri/http_spec.rb +0 -31
- data/spec/formatting/binary/integer_spec.rb +4 -0
- data/spec/formatting/text/string_spec.rb +96 -0
- data/spec/license_spec.rb +6 -6
- data/spec/model/classes/basic_model.rb +13 -0
- data/spec/model/classes/custom_model.rb +17 -0
- data/spec/model/classes/described_model.rb +10 -0
- data/spec/model/has_description_spec.rb +42 -0
- data/spec/model/has_license_spec.rb +18 -4
- data/spec/model/model_spec.rb +68 -0
- data/spec/network/helpers/classes/test_helper.rb +11 -0
- data/spec/network/helpers/classes/uses_test_helper.rb +10 -0
- data/spec/network/helpers/helper_spec.rb +25 -0
- data/spec/network/{http_spec.rb → http/http_spec.rb} +0 -0
- data/spec/network/http/proxy_spec.rb +116 -0
- data/spec/os_spec.rb +4 -4
- data/spec/platform/extension_cache_spec.rb +14 -0
- data/spec/platform/extension_spec.rb +11 -0
- data/spec/platform/platform_spec.rb +8 -0
- data/spec/product_spec.rb +9 -9
- data/spec/spec_helper.rb +1 -1
- data/spec/templates/classes/{uses_erb.rb → example_erb.rb} +1 -1
- data/spec/templates/classes/example_template.rb +21 -0
- data/spec/templates/erb_spec.rb +2 -2
- data/spec/templates/helpers/static.rb +5 -0
- data/spec/templates/helpers/static/templates/_relative.erb +1 -0
- data/spec/templates/helpers/static/templates/example.erb +1 -0
- data/spec/templates/template_spec.rb +41 -0
- data/spec/ui/command_line/classes/test_command.rb +23 -0
- data/spec/ui/command_line/command_spec.rb +31 -0
- data/spec/ui/output_spec.rb +29 -0
- data/static/ronin/platform/overlay.xsl +135 -114
- data/tasks/spec.rb +1 -0
- data/tasks/yard.rb +18 -0
- metadata +98 -59
- metadata.gz.sig +0 -0
- data/TODO.txt +0 -15
- data/lib/ronin/extensions/hash.rb +0 -62
- data/lib/ronin/sessions/esmtp.rb +0 -57
- data/lib/ronin/sessions/http.rb +0 -678
- data/lib/ronin/sessions/imap.rb +0 -54
- data/lib/ronin/sessions/pop3.rb +0 -52
- data/lib/ronin/sessions/smtp.rb +0 -57
- data/lib/ronin/sessions/tcp.rb +0 -100
- data/lib/ronin/sessions/telnet.rb +0 -55
- data/lib/ronin/sessions/udp.rb +0 -73
- data/lib/ronin/ui/command_line/options.rb +0 -136
- data/lib/ronin/ui/diagnostics.rb +0 -66
- data/lib/ronin/ui/verbose.rb +0 -58
- data/spec/extensions/hash_spec.rb +0 -38
- data/spec/sessions/classes/test_session.rb +0 -11
- data/spec/sessions/classes/uses_test_session.rb +0 -10
- data/spec/sessions/session_spec.rb +0 -25
- 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
|
data/lib/ronin/network/http.rb
CHANGED
|
@@ -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
|