ronin-support 0.1.0.pre1
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/.document +4 -0
- data/.rspec +1 -0
- data/.yardopts +1 -0
- data/COPYING.txt +504 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +23 -0
- data/README.md +98 -0
- data/Rakefile +29 -0
- data/gemspec.yml +20 -0
- data/lib/ronin/extensions.rb +28 -0
- data/lib/ronin/extensions/file.rb +63 -0
- data/lib/ronin/extensions/ip_addr.rb +220 -0
- data/lib/ronin/extensions/kernel.rb +45 -0
- data/lib/ronin/extensions/meta.rb +22 -0
- data/lib/ronin/extensions/meta/object.rb +24 -0
- data/lib/ronin/extensions/string.rb +200 -0
- data/lib/ronin/formatting.rb +26 -0
- data/lib/ronin/formatting/binary.rb +22 -0
- data/lib/ronin/formatting/digest.rb +22 -0
- data/lib/ronin/formatting/extensions.rb +25 -0
- data/lib/ronin/formatting/extensions/binary.rb +24 -0
- data/lib/ronin/formatting/extensions/binary/file.rb +35 -0
- data/lib/ronin/formatting/extensions/binary/integer.rb +147 -0
- data/lib/ronin/formatting/extensions/binary/string.rb +363 -0
- data/lib/ronin/formatting/extensions/digest.rb +23 -0
- data/lib/ronin/formatting/extensions/digest/file.rb +117 -0
- data/lib/ronin/formatting/extensions/digest/string.rb +80 -0
- data/lib/ronin/formatting/extensions/http.rb +23 -0
- data/lib/ronin/formatting/extensions/http/integer.rb +57 -0
- data/lib/ronin/formatting/extensions/http/string.rb +102 -0
- data/lib/ronin/formatting/extensions/text.rb +23 -0
- data/lib/ronin/formatting/extensions/text/array.rb +125 -0
- data/lib/ronin/formatting/extensions/text/string.rb +206 -0
- data/lib/ronin/formatting/http.rb +22 -0
- data/lib/ronin/formatting/text.rb +22 -0
- data/lib/ronin/network.rb +29 -0
- data/lib/ronin/network/esmtp.rb +22 -0
- data/lib/ronin/network/extensions.rb +29 -0
- data/lib/ronin/network/extensions/esmtp.rb +22 -0
- data/lib/ronin/network/extensions/esmtp/net.rb +100 -0
- data/lib/ronin/network/extensions/http.rb +22 -0
- data/lib/ronin/network/extensions/http/net.rb +661 -0
- data/lib/ronin/network/extensions/imap.rb +22 -0
- data/lib/ronin/network/extensions/imap/net.rb +124 -0
- data/lib/ronin/network/extensions/pop3.rb +22 -0
- data/lib/ronin/network/extensions/pop3/net.rb +92 -0
- data/lib/ronin/network/extensions/smtp.rb +22 -0
- data/lib/ronin/network/extensions/smtp/net.rb +110 -0
- data/lib/ronin/network/extensions/ssl.rb +22 -0
- data/lib/ronin/network/extensions/ssl/net.rb +147 -0
- data/lib/ronin/network/extensions/tcp.rb +22 -0
- data/lib/ronin/network/extensions/tcp/net.rb +304 -0
- data/lib/ronin/network/extensions/telnet.rb +22 -0
- data/lib/ronin/network/extensions/telnet/net.rb +156 -0
- data/lib/ronin/network/extensions/udp.rb +22 -0
- data/lib/ronin/network/extensions/udp/net.rb +226 -0
- data/lib/ronin/network/http.rb +24 -0
- data/lib/ronin/network/http/exceptions.rb +22 -0
- data/lib/ronin/network/http/exceptions/unknown_request.rb +29 -0
- data/lib/ronin/network/http/http.rb +290 -0
- data/lib/ronin/network/http/proxy.rb +307 -0
- data/lib/ronin/network/imap.rb +49 -0
- data/lib/ronin/network/network.rb +41 -0
- data/lib/ronin/network/pop3.rb +49 -0
- data/lib/ronin/network/smtp.rb +24 -0
- data/lib/ronin/network/smtp/email.rb +143 -0
- data/lib/ronin/network/smtp/smtp.rb +68 -0
- data/lib/ronin/network/ssl.rb +47 -0
- data/lib/ronin/network/tcp.rb +22 -0
- data/lib/ronin/network/telnet.rb +109 -0
- data/lib/ronin/network/udp.rb +22 -0
- data/lib/ronin/path.rb +132 -0
- data/lib/ronin/support.rb +28 -0
- data/lib/ronin/support/inflector.rb +40 -0
- data/lib/ronin/support/version.rb +27 -0
- data/lib/ronin/templates.rb +23 -0
- data/lib/ronin/templates/erb.rb +75 -0
- data/lib/ronin/templates/template.rb +161 -0
- data/ronin-support.gemspec +10 -0
- data/spec/extensions/file_spec.rb +24 -0
- data/spec/extensions/ip_addr_spec.rb +171 -0
- data/spec/extensions/kernel_spec.rb +30 -0
- data/spec/extensions/string_spec.rb +177 -0
- data/spec/formatting/binary/helpers/hexdumps.rb +16 -0
- data/spec/formatting/binary/helpers/hexdumps/ascii.bin +0 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/hexdump_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_decimal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_hex_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_bytes.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_ints.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_quads.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_octal_shorts.txt +17 -0
- data/spec/formatting/binary/helpers/hexdumps/od_repeated.txt +6 -0
- data/spec/formatting/binary/helpers/hexdumps/repeated.bin +1 -0
- data/spec/formatting/binary/integer_spec.rb +140 -0
- data/spec/formatting/binary/string_spec.rb +306 -0
- data/spec/formatting/digest/string_spec.rb +82 -0
- data/spec/formatting/http/integer_spec.rb +42 -0
- data/spec/formatting/http/string_spec.rb +76 -0
- data/spec/formatting/text/array_spec.rb +105 -0
- data/spec/formatting/text/string_spec.rb +180 -0
- data/spec/network/http/http_spec.rb +280 -0
- data/spec/network/http/proxy_spec.rb +150 -0
- data/spec/network/network_spec.rb +8 -0
- data/spec/network/ssl_spec.rb +14 -0
- data/spec/path_spec.rb +84 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support_spec.rb +8 -0
- data/spec/templates/classes/example_erb.rb +11 -0
- data/spec/templates/classes/example_template.rb +35 -0
- data/spec/templates/erb_spec.rb +21 -0
- data/spec/templates/helpers/data.rb +9 -0
- data/spec/templates/helpers/data/includes/_relative.erb +1 -0
- data/spec/templates/helpers/data/templates/example.erb +1 -0
- data/spec/templates/template_spec.rb +54 -0
- metadata +286 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/network/extensions/tcp/net'
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'socket'
|
|
23
|
+
|
|
24
|
+
module Net
|
|
25
|
+
#
|
|
26
|
+
# Creates a new TCPSocket object connected to a given host and port.
|
|
27
|
+
#
|
|
28
|
+
# @param [String] host
|
|
29
|
+
# The host to connect to.
|
|
30
|
+
#
|
|
31
|
+
# @param [Integer] port
|
|
32
|
+
# The port to connect to.
|
|
33
|
+
#
|
|
34
|
+
# @param [String] local_host (nil)
|
|
35
|
+
# The local host to bind to.
|
|
36
|
+
#
|
|
37
|
+
# @param [Integer] local_port (nil)
|
|
38
|
+
# The local port to bind to.
|
|
39
|
+
#
|
|
40
|
+
# @yield [socket]
|
|
41
|
+
# If a block is given, it will be passed the newly created socket.
|
|
42
|
+
#
|
|
43
|
+
# @yieldparam [TCPsocket] socket
|
|
44
|
+
# The newly created TCPSocket object.
|
|
45
|
+
#
|
|
46
|
+
# @return [TCPSocket]
|
|
47
|
+
# The newly created TCPSocket object.
|
|
48
|
+
#
|
|
49
|
+
# @example
|
|
50
|
+
# Net.tcp_connect('www.hackety.org',80) # => TCPSocket
|
|
51
|
+
#
|
|
52
|
+
# @example
|
|
53
|
+
# Net.tcp_connect('www.wired.com',80) do |sock|
|
|
54
|
+
# sock.write("GET /\n\n")
|
|
55
|
+
# puts sock.readlines
|
|
56
|
+
# sock.close
|
|
57
|
+
# end
|
|
58
|
+
#
|
|
59
|
+
def Net.tcp_connect(host,port,local_host=nil,local_port=nil)
|
|
60
|
+
host = host.to_s
|
|
61
|
+
local_host = if local_host
|
|
62
|
+
local_host.to_s
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
sock = TCPSocket.new(host,port,local_host,local_port)
|
|
66
|
+
|
|
67
|
+
yield sock if block_given?
|
|
68
|
+
return sock
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
#
|
|
72
|
+
# Creates a new TCPSocket object, connected to a given host and port.
|
|
73
|
+
# The given data will then be written to the newly created TCPSocket.
|
|
74
|
+
#
|
|
75
|
+
# @param [String] data
|
|
76
|
+
# The data to send through the connection.
|
|
77
|
+
#
|
|
78
|
+
# @param [String] host
|
|
79
|
+
# The host to connect to.
|
|
80
|
+
#
|
|
81
|
+
# @param [Integer] port
|
|
82
|
+
# The port to connect to.
|
|
83
|
+
#
|
|
84
|
+
# @param [String] local_host (nil)
|
|
85
|
+
# The local host to bind to.
|
|
86
|
+
#
|
|
87
|
+
# @param [Integer] local_port (nil)
|
|
88
|
+
# The local port to bind to.
|
|
89
|
+
#
|
|
90
|
+
# @yield [socket]
|
|
91
|
+
# If a block is given, it will be passed the newly created socket.
|
|
92
|
+
#
|
|
93
|
+
# @yieldparam [TCPsocket] socket
|
|
94
|
+
# The newly created TCPSocket object.
|
|
95
|
+
#
|
|
96
|
+
def Net.tcp_connect_and_send(data,host,port,local_host=nil,local_port=nil)
|
|
97
|
+
sock = Net.tcp_connect(host,port,local_host,local_port)
|
|
98
|
+
sock.write(data)
|
|
99
|
+
|
|
100
|
+
yield sock if block_given?
|
|
101
|
+
return sock
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
#
|
|
105
|
+
# Creates a new temporary TCPSocket object, connected to the given host
|
|
106
|
+
# and port.
|
|
107
|
+
#
|
|
108
|
+
# @param [String] host
|
|
109
|
+
# The host to connect to.
|
|
110
|
+
#
|
|
111
|
+
# @param [Integer] port
|
|
112
|
+
# The port to connect to.
|
|
113
|
+
#
|
|
114
|
+
# @param [String] local_host (nil)
|
|
115
|
+
# The local host to bind to.
|
|
116
|
+
#
|
|
117
|
+
# @param [Integer] local_port (nil)
|
|
118
|
+
# The local port to bind to.
|
|
119
|
+
#
|
|
120
|
+
# @yield [socket]
|
|
121
|
+
# If a block is given, it will be passed the newly created socket.
|
|
122
|
+
# After the block has returned, the socket will then be closed.
|
|
123
|
+
#
|
|
124
|
+
# @yieldparam [TCPsocket] socket
|
|
125
|
+
# The newly created TCPSocket object.
|
|
126
|
+
#
|
|
127
|
+
# @return [nil]
|
|
128
|
+
#
|
|
129
|
+
def Net.tcp_session(host,port,local_host=nil,local_port=nil)
|
|
130
|
+
sock = Net.tcp_connect(host,port,local_host,local_port)
|
|
131
|
+
|
|
132
|
+
yield sock if block_given?
|
|
133
|
+
|
|
134
|
+
sock.close
|
|
135
|
+
return nil
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
#
|
|
139
|
+
# Reads the banner from the service running on the given host and port.
|
|
140
|
+
#
|
|
141
|
+
# @param [String] host
|
|
142
|
+
# The host to connect to.
|
|
143
|
+
#
|
|
144
|
+
# @param [Integer] port
|
|
145
|
+
# The port to connect to.
|
|
146
|
+
#
|
|
147
|
+
# @param [String] local_host (nil)
|
|
148
|
+
# The local host to bind to.
|
|
149
|
+
#
|
|
150
|
+
# @param [Integer] local_port (nil)
|
|
151
|
+
# The local port to bind to.
|
|
152
|
+
#
|
|
153
|
+
# @yield [banner]
|
|
154
|
+
# If a block is given, it will be passed the grabbed banner.
|
|
155
|
+
#
|
|
156
|
+
# @yieldparam [String] banner
|
|
157
|
+
# The grabbed banner.
|
|
158
|
+
#
|
|
159
|
+
# @return [String]
|
|
160
|
+
# The grabbed banner.
|
|
161
|
+
#
|
|
162
|
+
# @example
|
|
163
|
+
# Net.tcp_banner('pop.gmail.com',25)
|
|
164
|
+
# # => "220 mx.google.com ESMTP c20sm3096959rvf.1"
|
|
165
|
+
#
|
|
166
|
+
def Net.tcp_banner(host,port,local_host=nil,local_port=nil)
|
|
167
|
+
banner = nil
|
|
168
|
+
|
|
169
|
+
Net.tcp_session(host,port,local_host,local_port) do |sock|
|
|
170
|
+
banner = sock.readline.strip
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
yield banner if block_given?
|
|
174
|
+
return banner
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
#
|
|
178
|
+
# Connects to a specified host and port, sends the given data and then
|
|
179
|
+
# closes the connection.
|
|
180
|
+
#
|
|
181
|
+
# @param [String] data
|
|
182
|
+
# The data to send through the connection.
|
|
183
|
+
#
|
|
184
|
+
# @param [String] host
|
|
185
|
+
# The host to connect to.
|
|
186
|
+
#
|
|
187
|
+
# @param [Integer] port
|
|
188
|
+
# The port to connect to.
|
|
189
|
+
#
|
|
190
|
+
# @param [String] local_host (nil)
|
|
191
|
+
# The local host to bind to.
|
|
192
|
+
#
|
|
193
|
+
# @param [Integer] local_port (nil)
|
|
194
|
+
# The local port to bind to.
|
|
195
|
+
#
|
|
196
|
+
# @return [true]
|
|
197
|
+
# The data was successfully sent.
|
|
198
|
+
#
|
|
199
|
+
# @example
|
|
200
|
+
# buffer = "GET /" + ('A' * 4096) + "\n\r"
|
|
201
|
+
# Net.tcp_send(buffer,'victim.com',80)
|
|
202
|
+
# # => true
|
|
203
|
+
#
|
|
204
|
+
def Net.tcp_send(data,host,port,local_host=nil,local_port=nil)
|
|
205
|
+
Net.tcp_session(host,port,local_host,local_port) do |sock|
|
|
206
|
+
sock.write(data)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
return true
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
#
|
|
213
|
+
# Creates a new TCPServer listening on a given host and port.
|
|
214
|
+
#
|
|
215
|
+
# @param [Integer] port
|
|
216
|
+
# The local port to listen on.
|
|
217
|
+
#
|
|
218
|
+
# @param [String] host ('0.0.0.0')
|
|
219
|
+
# The host to bind to.
|
|
220
|
+
#
|
|
221
|
+
# @return [TCPServer]
|
|
222
|
+
# The new TCP server.
|
|
223
|
+
#
|
|
224
|
+
# @example
|
|
225
|
+
# Net.tcp_server(1337)
|
|
226
|
+
#
|
|
227
|
+
def Net.tcp_server(port,host='0.0.0.0')
|
|
228
|
+
host = host.to_s
|
|
229
|
+
|
|
230
|
+
server = TCPServer.new(host,port)
|
|
231
|
+
server.listen(3)
|
|
232
|
+
|
|
233
|
+
yield server if block_given?
|
|
234
|
+
return server
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
#
|
|
238
|
+
# Creates a new temporary TCPServer listening on a host and port.
|
|
239
|
+
#
|
|
240
|
+
# @param [Integer] port
|
|
241
|
+
# The local port to bind to.
|
|
242
|
+
#
|
|
243
|
+
# @param [String] host ('0.0.0.0')
|
|
244
|
+
# The host to bind to.
|
|
245
|
+
#
|
|
246
|
+
# @yield [server]
|
|
247
|
+
# The block which will be called after the _server_ has been created.
|
|
248
|
+
# After the block has finished, the _server_ will be closed.
|
|
249
|
+
#
|
|
250
|
+
# @yieldparam [TCPServer] server
|
|
251
|
+
# The newly created TCP server.
|
|
252
|
+
#
|
|
253
|
+
# @return [nil]
|
|
254
|
+
#
|
|
255
|
+
# @example
|
|
256
|
+
# Net.tcp_server_session(1337) do |server|
|
|
257
|
+
# client1 = server.accept
|
|
258
|
+
# client2 = server.accept
|
|
259
|
+
#
|
|
260
|
+
# client2.write(server.read_line)
|
|
261
|
+
#
|
|
262
|
+
# client1.close
|
|
263
|
+
# client2.close
|
|
264
|
+
# end
|
|
265
|
+
#
|
|
266
|
+
def Net.tcp_server_session(port,host='0.0.0.0',&block)
|
|
267
|
+
server = Net.tcp_server(port,host,&block)
|
|
268
|
+
server.close()
|
|
269
|
+
return nil
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
#
|
|
273
|
+
# Creates a new TCPServer listening on a given host and port,
|
|
274
|
+
# accepts only one client and then stops listening.
|
|
275
|
+
#
|
|
276
|
+
# @param [Integer] port
|
|
277
|
+
# After the block has finished, the client and the server will be
|
|
278
|
+
# closed.
|
|
279
|
+
#
|
|
280
|
+
# @yieldparam [TCPSocket] client
|
|
281
|
+
# The newly connected client.
|
|
282
|
+
#
|
|
283
|
+
# @return [nil]
|
|
284
|
+
#
|
|
285
|
+
# @example
|
|
286
|
+
# Net.tcp_single_server(1337) do |client|
|
|
287
|
+
# client.puts 'lol'
|
|
288
|
+
# end
|
|
289
|
+
#
|
|
290
|
+
def Net.tcp_single_server(port,host='0.0.0.0')
|
|
291
|
+
host = host.to_s
|
|
292
|
+
|
|
293
|
+
server = TCPServer.new(host,port)
|
|
294
|
+
server.listen(1)
|
|
295
|
+
|
|
296
|
+
client = server.accept
|
|
297
|
+
|
|
298
|
+
yield client if block_given?
|
|
299
|
+
|
|
300
|
+
client.close
|
|
301
|
+
server.close
|
|
302
|
+
return nil
|
|
303
|
+
end
|
|
304
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/network/extensions/telnet/net'
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Ronin - A Ruby platform for exploit development and security research.
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
5
|
+
#
|
|
6
|
+
# This library is free software; you can redistribute it and/or
|
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
|
8
|
+
# License as published by the Free Software Foundation; either
|
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
|
10
|
+
#
|
|
11
|
+
# This library 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 GNU
|
|
14
|
+
# Lesser General Public License for more details.
|
|
15
|
+
#
|
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
|
17
|
+
# License along with this library; if not, write to the Free Software
|
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
19
|
+
# Boston, MA 02110-1301 USA
|
|
20
|
+
#
|
|
21
|
+
|
|
22
|
+
require 'ronin/network/telnet'
|
|
23
|
+
|
|
24
|
+
require 'net/telnet'
|
|
25
|
+
|
|
26
|
+
module Net
|
|
27
|
+
#
|
|
28
|
+
# Creates a new Telnet connection.
|
|
29
|
+
#
|
|
30
|
+
# @param [String] host
|
|
31
|
+
# The host to connect to.
|
|
32
|
+
#
|
|
33
|
+
# @param [Hash] options
|
|
34
|
+
# Additional options.
|
|
35
|
+
#
|
|
36
|
+
# @option options [Integer] :port (Ronin::Network::Telnet.default_port)
|
|
37
|
+
# The port to connect to.
|
|
38
|
+
#
|
|
39
|
+
# @option options [Boolean] :binmode
|
|
40
|
+
# Indicates that newline substitution shall not be performed.
|
|
41
|
+
#
|
|
42
|
+
# @option options [String] :output_log
|
|
43
|
+
# The name of the file to write connection status messages and all
|
|
44
|
+
# received traffic to.
|
|
45
|
+
#
|
|
46
|
+
# @option options [String] :dump_log
|
|
47
|
+
# Similar to the `:output_log` option, but connection output is also
|
|
48
|
+
# written in hexdump format.
|
|
49
|
+
#
|
|
50
|
+
# @option options [Regexp] :prompt (Ronin::Network::Telnet.default_prompt)
|
|
51
|
+
# A regular expression matching the host command-line prompt sequence,
|
|
52
|
+
# used to determine when a command has finished.
|
|
53
|
+
#
|
|
54
|
+
# @option options [Boolean] :telnet (true)
|
|
55
|
+
# Indicates that the connection shall behave as a telnet connection.
|
|
56
|
+
#
|
|
57
|
+
# @option options [Boolean] :plain
|
|
58
|
+
# Indicates that the connection shall behave as a normal TCP
|
|
59
|
+
# connection.
|
|
60
|
+
#
|
|
61
|
+
# @option options [Integer] :timeout (Ronin::Network::Telnet.default_timeout)
|
|
62
|
+
# The number of seconds to wait before timing out both the initial
|
|
63
|
+
# attempt to connect to host, and all attempts to read data from the
|
|
64
|
+
# host.
|
|
65
|
+
#
|
|
66
|
+
# @option options [Integer] :wait_time
|
|
67
|
+
# The amount of time to wait after seeing what looks like a prompt.
|
|
68
|
+
#
|
|
69
|
+
# @option options [Net::Telnet, IO] :proxy (Ronin::Network::Telnet.proxy)
|
|
70
|
+
# A proxy object to used instead of opening a direct connection to the
|
|
71
|
+
# host.
|
|
72
|
+
#
|
|
73
|
+
# @option options [String] :user
|
|
74
|
+
# The user to login as.
|
|
75
|
+
#
|
|
76
|
+
# @option options [String] :password
|
|
77
|
+
# The password to login with.
|
|
78
|
+
#
|
|
79
|
+
# @yield [session]
|
|
80
|
+
# If a block is given, it will be passed the newly created Telnet
|
|
81
|
+
# session.
|
|
82
|
+
#
|
|
83
|
+
# @yieldparam [Net::Telnet] session
|
|
84
|
+
# The newly created Telnet session.
|
|
85
|
+
#
|
|
86
|
+
# @return [Net::Telnet]
|
|
87
|
+
# The Telnet session
|
|
88
|
+
#
|
|
89
|
+
# @example
|
|
90
|
+
# Net.telnet_connect('towel.blinkenlights.nl')
|
|
91
|
+
# # => #<Net::Telnet: ...>
|
|
92
|
+
#
|
|
93
|
+
def Net.telnet_connect(host,options={})
|
|
94
|
+
host = host.to_s
|
|
95
|
+
telnet_options = {}
|
|
96
|
+
|
|
97
|
+
telnet_options['Host'] = host
|
|
98
|
+
telnet_options['Port'] = (options[:port] || Ronin::Network::Telnet.default_port)
|
|
99
|
+
telnet_options['Binmode'] = options[:binmode]
|
|
100
|
+
telnet_options['Output_log'] = options[:output_log]
|
|
101
|
+
telnet_options['Dump_log'] = options[:dump_log]
|
|
102
|
+
telnet_options['Prompt'] = (options[:prompt] || Ronin::Network::Telnet.default_prompt)
|
|
103
|
+
|
|
104
|
+
if (options[:telnet] && !options[:plain])
|
|
105
|
+
telnet_options['Telnetmode'] = true
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
telnet_options['Timeout'] = (options[:timeout] || Ronin::Network::Telnet.default_timeout)
|
|
109
|
+
telnet_options['Waittime'] = options[:wait_time]
|
|
110
|
+
telnet_options['Proxy'] = (options[:proxy] || Ronin::Network::Telnet.proxy)
|
|
111
|
+
|
|
112
|
+
user = options[:user]
|
|
113
|
+
passwd = options[:passwd]
|
|
114
|
+
|
|
115
|
+
session = Net::Telnet.new(telnet_options)
|
|
116
|
+
session.login(user,passwd) if user
|
|
117
|
+
|
|
118
|
+
yield session if block_given?
|
|
119
|
+
return session
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
#
|
|
123
|
+
# Starts a new Telnet session.
|
|
124
|
+
#
|
|
125
|
+
# @param [String] host
|
|
126
|
+
# The host to connect to.
|
|
127
|
+
#
|
|
128
|
+
# @param [Hash] options
|
|
129
|
+
# Additional options.
|
|
130
|
+
#
|
|
131
|
+
# @yield [session]
|
|
132
|
+
# If a block is given, it will be passed the newly created
|
|
133
|
+
# Telnet session. After the block has returned, the Telnet session
|
|
134
|
+
# will be closed.
|
|
135
|
+
#
|
|
136
|
+
# @yieldparam [Net::Telnet] session
|
|
137
|
+
# The newly created Telnet session.
|
|
138
|
+
#
|
|
139
|
+
# @return [nil]
|
|
140
|
+
#
|
|
141
|
+
# @example
|
|
142
|
+
# Net.telnet_session('towel.blinkenlights.nl') do |movie|
|
|
143
|
+
# movie.each_line { |line| puts line }
|
|
144
|
+
# end
|
|
145
|
+
#
|
|
146
|
+
# @see Net.telnet_session
|
|
147
|
+
#
|
|
148
|
+
def Net.telnet_session(host,options={})
|
|
149
|
+
session = Net.telnet_connect(host,options)
|
|
150
|
+
|
|
151
|
+
yield session if block_given?
|
|
152
|
+
|
|
153
|
+
session.close
|
|
154
|
+
return nil
|
|
155
|
+
end
|
|
156
|
+
end
|