ronin-support 0.3.0 → 0.4.0.rc1

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 (59) hide show
  1. data/ChangeLog.md +77 -7
  2. data/README.md +19 -3
  3. data/gemspec.yml +2 -2
  4. data/lib/ronin/extensions/regexp.rb +50 -2
  5. data/lib/ronin/extensions/string.rb +1 -0
  6. data/lib/ronin/formatting.rb +1 -0
  7. data/lib/ronin/formatting/extensions.rb +1 -0
  8. data/lib/ronin/formatting/extensions/binary/string.rb +56 -5
  9. data/lib/ronin/formatting/extensions/html/string.rb +6 -7
  10. data/lib/ronin/formatting/extensions/sql/string.rb +34 -0
  11. data/lib/ronin/formatting/extensions/text/string.rb +0 -180
  12. data/lib/ronin/fuzzing.rb +21 -0
  13. data/lib/ronin/fuzzing/extensions.rb +20 -0
  14. data/lib/ronin/fuzzing/extensions/string.rb +380 -0
  15. data/lib/ronin/fuzzing/fuzzing.rb +191 -0
  16. data/lib/ronin/network/esmtp.rb +94 -1
  17. data/lib/ronin/network/extensions/esmtp/net.rb +2 -82
  18. data/lib/ronin/network/extensions/http/net.rb +1 -736
  19. data/lib/ronin/network/extensions/imap/net.rb +1 -103
  20. data/lib/ronin/network/extensions/pop3/net.rb +1 -71
  21. data/lib/ronin/network/extensions/smtp/net.rb +2 -157
  22. data/lib/ronin/network/extensions/ssl/net.rb +1 -132
  23. data/lib/ronin/network/extensions/tcp/net.rb +2 -296
  24. data/lib/ronin/network/extensions/telnet/net.rb +1 -135
  25. data/lib/ronin/network/extensions/udp/net.rb +2 -214
  26. data/lib/ronin/network/http/http.rb +750 -5
  27. data/lib/ronin/network/imap.rb +105 -2
  28. data/lib/ronin/network/mixins.rb +1 -1
  29. data/lib/ronin/network/mixins/esmtp.rb +49 -52
  30. data/lib/ronin/network/mixins/http.rb +49 -53
  31. data/lib/ronin/network/mixins/imap.rb +47 -44
  32. data/lib/ronin/network/mixins/mixin.rb +58 -0
  33. data/lib/ronin/network/mixins/pop3.rb +44 -38
  34. data/lib/ronin/network/mixins/smtp.rb +49 -51
  35. data/lib/ronin/network/mixins/tcp.rb +56 -69
  36. data/lib/ronin/network/mixins/telnet.rb +57 -50
  37. data/lib/ronin/network/mixins/udp.rb +48 -52
  38. data/lib/ronin/network/network.rb +1 -0
  39. data/lib/ronin/network/pop3.rb +72 -2
  40. data/lib/ronin/network/smtp/email.rb +1 -0
  41. data/lib/ronin/network/smtp/smtp.rb +159 -3
  42. data/lib/ronin/network/ssl.rb +131 -2
  43. data/lib/ronin/network/tcp.rb +306 -1
  44. data/lib/ronin/network/telnet.rb +136 -2
  45. data/lib/ronin/network/udp.rb +229 -1
  46. data/lib/ronin/support.rb +2 -3
  47. data/lib/ronin/support/support.rb +38 -0
  48. data/lib/ronin/support/version.rb +1 -1
  49. data/lib/ronin/templates/erb.rb +2 -1
  50. data/lib/ronin/ui/output/helpers.rb +35 -1
  51. data/lib/ronin/ui/shell.rb +12 -2
  52. data/lib/ronin/wordlist.rb +157 -0
  53. data/spec/extensions/regexp_spec.rb +38 -0
  54. data/spec/formatting/html/string_spec.rb +1 -1
  55. data/spec/formatting/sql/string_spec.rb +23 -3
  56. data/spec/formatting/text/string_spec.rb +0 -110
  57. data/spec/fuzzing/string_spec.rb +158 -0
  58. data/spec/wordlist_spec.rb +65 -0
  59. metadata +35 -27
@@ -17,11 +17,8 @@
17
17
  # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
+ require 'ronin/network/mixins/mixin'
20
21
  require 'ronin/network/imap'
21
- require 'ronin/ui/output/helpers'
22
- require 'ronin/mixin'
23
-
24
- require 'parameters'
25
22
 
26
23
  module Ronin
27
24
  module Network
@@ -38,31 +35,27 @@ module Ronin
38
35
  # * `imap_password` (`String`) - IMAP password to login with.
39
36
  #
40
37
  module IMAP
41
- include Mixin
42
-
43
- mixin UI::Output::Helpers, Parameters
38
+ include Mixin, Network::IMAP
44
39
 
45
- mixin do
46
- # IMAP host
47
- parameter :host, :type => String,
48
- :description => 'IMAP host'
40
+ # IMAP host
41
+ parameter :host, :type => String,
42
+ :description => 'IMAP host'
49
43
 
50
- # IMAP port
51
- parameter :port, :type => Integer,
52
- :description => 'IMAP port'
44
+ # IMAP port
45
+ parameter :port, :type => Integer,
46
+ :description => 'IMAP port'
53
47
 
54
- # IMAP auth
55
- parameter :imap_auth, :type => String,
56
- :description => 'IMAP authentication method'
48
+ # IMAP auth
49
+ parameter :imap_auth, :type => String,
50
+ :description => 'IMAP authentication method'
57
51
 
58
- # IMAP user to login as
59
- parameter :imap_user, :type => String,
60
- :description => 'IMAP user to login as'
52
+ # IMAP user to login as
53
+ parameter :imap_user, :type => String,
54
+ :description => 'IMAP user to login as'
61
55
 
62
- # IMAP password to login with
63
- parameter :imap_password, :type => String,
64
- :description => 'IMAP password to login with'
65
- end
56
+ # IMAP password to login with
57
+ parameter :imap_password, :type => String,
58
+ :description => 'IMAP password to login with'
66
59
 
67
60
  protected
68
61
 
@@ -98,18 +91,9 @@ module Ronin
98
91
  # @api public
99
92
  #
100
93
  def imap_connect(options={},&block)
101
- options[:port] ||= self.port
102
- options[:auth] ||= self.imap_auth
103
- options[:user] ||= self.imap_user
104
- options[:password] ||= self.imap_password
94
+ print_info "Connecting to #{host_port} ..."
105
95
 
106
- if self.port
107
- print_info "Connecting to #{self.host}:#{self.port} ..."
108
- else
109
- print_info "Connecting to #{self.host} ..."
110
- end
111
-
112
- return ::Net.imap_connect(self.host,options,&block)
96
+ return super(self.host,imap_merge_options(options),&block)
113
97
  end
114
98
 
115
99
  #
@@ -130,20 +114,39 @@ module Ronin
130
114
  # @api public
131
115
  #
132
116
  def imap_session(options={})
133
- imap_connect(options) do |sess|
117
+ super(imap_merge_options(options)) do |sess|
134
118
  yield sess if block_given?
135
119
 
136
120
  print_info "Logging out ..."
121
+ end
137
122
 
138
- sess.close
139
- sess.logout
123
+ print_info "Disconnected from #{host_port}"
124
+ return il
125
+ end
140
126
 
141
- if self.port
142
- print_info "Disconnecting from #{self.host}:#{self.port}"
143
- else
144
- print_info "Disconnecting from #{self.host}"
145
- end
146
- end
127
+ private
128
+
129
+ #
130
+ # Merges the IMAP parameters into the options for {Network::IMAP}
131
+ # methods.
132
+ #
133
+ # @param [Hash] options
134
+ # The original options.
135
+ #
136
+ # @return [Hash]
137
+ # The merged options.
138
+ #
139
+ # @since 0.4.0
140
+ #
141
+ # @api private
142
+ #
143
+ def imap_merge_options(options={})
144
+ options[:port] ||= self.port
145
+ options[:auth] ||= self.imap_auth
146
+ options[:user] ||= self.imap_user
147
+ options[:password] ||= self.imap_password
148
+
149
+ return options
147
150
  end
148
151
  end
149
152
  end
@@ -0,0 +1,58 @@
1
+ #
2
+ # Copyright (c) 2006-2011 Hal Brodigan (postmodern.mod3 at gmail.com)
3
+ #
4
+ # This file is part of Ronin Support.
5
+ #
6
+ # Ronin Support is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Lesser General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # Ronin Support is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License
17
+ # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
+ #
19
+
20
+ require 'ronin/ui/output/helpers'
21
+
22
+ require 'parameters'
23
+
24
+ module Ronin
25
+ module Network
26
+ module Mixins
27
+ #
28
+ # @since 0.4.0
29
+ #
30
+ module Mixin
31
+ include Parameters,
32
+ UI::Output::Helpers
33
+
34
+ parameter :host, :type => String
35
+
36
+ parameter :port, :type => Integer
37
+
38
+ protected
39
+
40
+ #
41
+ # The host/port parameters.
42
+ #
43
+ # @return [String]
44
+ # The host/port parameters in String form.
45
+ #
46
+ # @api semipublic
47
+ #
48
+ def host_port
49
+ if self.port
50
+ "#{self.host}:#{self.port}"
51
+ else
52
+ "#{self.host}"
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -17,11 +17,8 @@
17
17
  # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
+ require 'ronin/network/mixins/mixin'
20
21
  require 'ronin/network/pop3'
21
- require 'ronin/ui/output/helpers'
22
- require 'ronin/mixin'
23
-
24
- require 'parameters'
25
22
 
26
23
  module Ronin
27
24
  module Network
@@ -37,27 +34,23 @@ module Ronin
37
34
  # * `pop3_password` (`String`) - POP3 password to login with.
38
35
  #
39
36
  module POP3
40
- include Mixin
41
-
42
- mixin UI::Output::Helpers, Parameters
37
+ include Mixin, Network::POP3
43
38
 
44
- mixin do
45
- # POP3 host
46
- parameter :host, :type => String,
47
- :description => 'POP3 host'
39
+ # POP3 host
40
+ parameter :host, :type => String,
41
+ :description => 'POP3 host'
48
42
 
49
- # POP3 port
50
- parameter :port, :type => Integer,
51
- :description => 'POP3 port'
43
+ # POP3 port
44
+ parameter :port, :type => Integer,
45
+ :description => 'POP3 port'
52
46
 
53
- # POP3 user
54
- parameter :pop3_user, :type => String,
55
- :description => 'POP3 user to login as'
47
+ # POP3 user
48
+ parameter :pop3_user, :type => String,
49
+ :description => 'POP3 user to login as'
56
50
 
57
- # POP3 password
58
- parameter :pop3_password, :type => String,
59
- :description => 'POP3 password to login with'
60
- end
51
+ # POP3 password
52
+ parameter :pop3_password, :type => String,
53
+ :description => 'POP3 password to login with'
61
54
 
62
55
  protected
63
56
 
@@ -93,17 +86,9 @@ module Ronin
93
86
  # @api public
94
87
  #
95
88
  def pop3_connect(options={},&block)
96
- options[:port] ||= self.port
97
- options[:user] ||= self.pop3_user
98
- options[:password] ||= self.pop3_password
89
+ print_info "Connecting to #{host_port} ..."
99
90
 
100
- if self.port
101
- print_info "Connecting to #{self.host}:#{self.port} ..."
102
- else
103
- print_info "Connecting to #{self.host} ..."
104
- end
105
-
106
- return ::Net.pop3_connect(self.host,options,&block)
91
+ return super(self.host,pop3_merge_options(options),&block)
107
92
  end
108
93
 
109
94
  #
@@ -124,16 +109,37 @@ module Ronin
124
109
  # @api public
125
110
  #
126
111
  def pop3_session(options={})
127
- pop3_connect(options) do |sess|
112
+ super(options) do |sess|
128
113
  yield sess if block_given?
129
- sess.finish
130
114
 
131
- if @port
132
- print_info "Disconnecting to #{self.host}:#{self.port}"
133
- else
134
- print_info "Disconnecting to #{self.host}"
135
- end
115
+ print_info "Logging out ..."
136
116
  end
117
+
118
+ print_info "Disconnected to #{host_port}"
119
+ end
120
+
121
+ private
122
+
123
+ #
124
+ # Merges the POP3 parameters into the options for {Network::POP3}
125
+ # methods.
126
+ #
127
+ # @param [Hash] options
128
+ # The original options.
129
+ #
130
+ # @return [Hash]
131
+ # The merged options.
132
+ #
133
+ # @since 0.4.0
134
+ #
135
+ # @api private
136
+ #
137
+ def pop3_merge_options(options={})
138
+ options[:port] ||= self.port
139
+ options[:user] ||= self.pop3_user
140
+ options[:password] ||= self.pop3_password
141
+
142
+ return options
137
143
  end
138
144
  end
139
145
  end
@@ -17,11 +17,8 @@
17
17
  # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
+ require 'ronin/network/mixins/mixin'
20
21
  require 'ronin/network/smtp'
21
- require 'ronin/ui/output/helpers'
22
- require 'ronin/mixin'
23
-
24
- require 'parameters'
25
22
 
26
23
  module Ronin
27
24
  module Network
@@ -38,43 +35,30 @@ module Ronin
38
35
  # * `smtp_password` (`String`) - SMTP password to login with.
39
36
  #
40
37
  module SMTP
41
- include Mixin
42
-
43
- mixin UI::Output::Helpers, Parameters
38
+ include Mixin, Network::SMTP
44
39
 
45
- mixin do
46
- # SMTP host
47
- parameter :host, :type => String,
48
- :description => 'SMTP host'
40
+ # SMTP host
41
+ parameter :host, :type => String,
42
+ :description => 'SMTP host'
49
43
 
50
- # SMTP port
51
- parameter :port, :type => Integer,
52
- :description => 'SMTP port'
44
+ # SMTP port
45
+ parameter :port, :type => Integer,
46
+ :description => 'SMTP port'
53
47
 
54
- # SMTP authentication method
55
- parameter :smtp_login, :type => String,
56
- :description => 'SMTP authentication method'
48
+ # SMTP authentication method
49
+ parameter :smtp_login, :type => String,
50
+ :description => 'SMTP authentication method'
57
51
 
58
- # SMTP user to login as
59
- parameter :smtp_user, :type => String,
60
- :description => 'SMTP user to login as'
52
+ # SMTP user to login as
53
+ parameter :smtp_user, :type => String,
54
+ :description => 'SMTP user to login as'
61
55
 
62
- # SMTP user to login with
63
- parameter :smtp_password, :type => String,
64
- :description => 'SMTP password to login with'
65
- end
56
+ # SMTP user to login with
57
+ parameter :smtp_password, :type => String,
58
+ :description => 'SMTP password to login with'
66
59
 
67
60
  protected
68
61
 
69
- #
70
- # @see Ronin::Network::SMTP.message
71
- #
72
- # @api public
73
- #
74
- def smtp_message(options={},&block)
75
- Network::SMTP.message(options,&block)
76
- end
77
-
78
62
  #
79
63
  # Creates a connection to the SMTP server. The `host`, `port`,
80
64
  # `smtp_login`, `smtp_user` and `smtp_password` parameters
@@ -111,18 +95,9 @@ module Ronin
111
95
  # @api public
112
96
  #
113
97
  def smtp_connect(options={},&block)
114
- options[:port] ||= self.port
115
- options[:login] ||= self.smtp_login
116
- options[:user] ||= self.smtp_user
117
- options[:password] ||= self.smtp_password
118
-
119
- if self.port
120
- print_info "Connecting to #{self.host}:#{self.port} ..."
121
- else
122
- print_info "Connecting to #{self.host} ..."
123
- end
98
+ print_info "Connecting to #{host_port} ..."
124
99
 
125
- return ::Net.smtp_connect(self.host,options,&block)
100
+ return super(self.host,smtp_merge_options(options),&block)
126
101
  end
127
102
 
128
103
  #
@@ -142,16 +117,39 @@ module Ronin
142
117
  # @api public
143
118
  #
144
119
  def smtp_session(options={},&block)
145
- smtp_connect(options) do |sess|
120
+ super(smtp_merge_options(options)) do |sess|
146
121
  yield sess if block_given?
147
- sess.close
148
122
 
149
- if self.port
150
- print_info "Disconnecting to #{self.host}:#{self.port}"
151
- else
152
- print_info "Disconnecting to #{self.host}"
153
- end
123
+ print_info "Logging out ..."
154
124
  end
125
+
126
+ print_info "Disconnected to #{host_port}"
127
+ return nil
128
+ end
129
+
130
+ private
131
+
132
+ #
133
+ # Merges the SMTP parameters into the options for {Network::SMTP}
134
+ # methods.
135
+ #
136
+ # @param [Hash] options
137
+ # The original options.
138
+ #
139
+ # @return [Hash]
140
+ # The merged options.
141
+ #
142
+ # @since 0.4.0
143
+ #
144
+ # @api private
145
+ #
146
+ def smtp_merge_options(options={})
147
+ options[:port] ||= self.port
148
+ options[:login] ||= self.smtp_login
149
+ options[:user] ||= self.smtp_user
150
+ options[:password] ||= self.smtp_password
151
+
152
+ return options
155
153
  end
156
154
  end
157
155
  end
@@ -17,11 +17,8 @@
17
17
  # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
+ require 'ronin/network/mixins/mixin'
20
21
  require 'ronin/network/tcp'
21
- require 'ronin/ui/output/helpers'
22
- require 'ronin/mixin'
23
-
24
- require 'parameters'
25
22
 
26
23
  module Ronin
27
24
  module Network
@@ -39,35 +36,31 @@ module Ronin
39
36
  # * `server_port` (`Integer`) - TCP server port.
40
37
  #
41
38
  module TCP
42
- include Mixin
43
-
44
- mixin UI::Output::Helpers, Parameters
39
+ include Mixin, Network::TCP
45
40
 
46
- mixin do
47
- # TCP host
48
- parameter :host, :type => String,
49
- :description => 'TCP host'
41
+ # TCP host
42
+ parameter :host, :type => String,
43
+ :description => 'TCP host'
50
44
 
51
- # TCP port
52
- parameter :port, :type => Integer,
53
- :description => 'TCP port'
45
+ # TCP port
46
+ parameter :port, :type => Integer,
47
+ :description => 'TCP port'
54
48
 
55
- # TCP local host
56
- parameter :local_host, :type => String,
57
- :description => 'TCP local host'
49
+ # TCP local host
50
+ parameter :local_host, :type => String,
51
+ :description => 'TCP local host'
58
52
 
59
- # TCP local port
60
- parameter :local_port, :type => Integer,
61
- :description => 'TCP local port'
53
+ # TCP local port
54
+ parameter :local_port, :type => Integer,
55
+ :description => 'TCP local port'
62
56
 
63
- # TCP server host
64
- parameter :server_host, :type => String,
65
- :description => 'TCP server host'
57
+ # TCP server host
58
+ parameter :server_host, :type => String,
59
+ :description => 'TCP server host'
66
60
 
67
- # TCP server port
68
- parameter :server_port, :type => Integer,
69
- :description => 'TCP server port'
70
- end
61
+ # TCP server port
62
+ parameter :server_port, :type => Integer,
63
+ :description => 'TCP server port'
71
64
 
72
65
  protected
73
66
 
@@ -99,9 +92,9 @@ module Ronin
99
92
  # @api public
100
93
  #
101
94
  def tcp_connect(&block)
102
- print_info "Connecting to #{self.host}:#{self.port} ..."
95
+ print_info "Connecting to #{host_port} ..."
103
96
 
104
- return ::Net.tcp_connect(self.host,self.port,self.local_host,self.local_port,&block)
97
+ return super(self.host,self.port,self.local_host,self.local_port,&block)
105
98
  end
106
99
 
107
100
  #
@@ -123,10 +116,10 @@ module Ronin
123
116
  # @api public
124
117
  #
125
118
  def tcp_connect_and_send(data,&block)
126
- print_info "Connecting to #{self.host}:#{self.port} ..."
119
+ print_info "Connecting to #{host_port} ..."
127
120
  print_debug "Sending data: #{data.inspect}"
128
121
 
129
- return ::Net.tcp_connect_and_send(data,self.host,self.port,self.local_host,self.local_port,&block)
122
+ return super(data,self.host,self.port,self.local_host,self.local_port,&block)
130
123
  end
131
124
 
132
125
  #
@@ -145,11 +138,11 @@ module Ronin
145
138
  # @api public
146
139
  #
147
140
  def tcp_session(&block)
148
- print_info "Connecting to #{self.host}:#{self.port} ..."
141
+ print_info "Connecting to #{host_port} ..."
149
142
 
150
143
  Net.tcp_session(self.host,self.port,self.local_host,self.local_port,&block)
151
144
 
152
- print_info "Disconnected from #{self.host}:#{self.port}"
145
+ print_info "Disconnected from #{host_port}"
153
146
  return nil
154
147
  end
155
148
 
@@ -173,9 +166,9 @@ module Ronin
173
166
  # @api public
174
167
  #
175
168
  def tcp_banner(&block)
176
- print_debug "Grabbing banner from #{self.host}:#{self.port}"
169
+ print_debug "Grabbing banner from #{host_port}"
177
170
 
178
- return ::Net.tcp_banner(self.host,self.port,self.local_host,self.local_port,&block)
171
+ return super(self.host,self.port,self.local_host,self.local_port,&block)
179
172
  end
180
173
 
181
174
  #
@@ -193,12 +186,12 @@ module Ronin
193
186
  # @api public
194
187
  #
195
188
  def tcp_send(data)
196
- print_info "Connecting to #{self.host}:#{self.port} ..."
189
+ print_info "Connecting to #{host_port} ..."
197
190
  print_debug "Sending data: #{data.inspect}"
198
191
 
199
- ::Net.tcp_send(data,self.host,self.port,self.local_host,self.local_port)
192
+ super(data,self.host,self.port,self.local_host,self.local_port)
200
193
 
201
- print_info "Disconnected from #{self.host}:#{self.port}"
194
+ print_info "Disconnected from #{host_port}"
202
195
  return true
203
196
  end
204
197
 
@@ -221,13 +214,9 @@ module Ronin
221
214
  # @api public
222
215
  #
223
216
  def tcp_server(&block)
224
- if self.server_host
225
- print_info "Listening on #{self.server_host}:#{self.server_port} ..."
226
- else
227
- print_info "Listening on #{self.server_port} ..."
228
- end
217
+ print_info "Listening on #{self.server_host_port} ..."
229
218
 
230
- return ::Net.tcp_server(self.server_port,self.server_host,&block)
219
+ return super(self.server_port,self.server_host,&block)
231
220
  end
232
221
 
233
222
  #
@@ -257,20 +246,11 @@ module Ronin
257
246
  # @api public
258
247
  #
259
248
  def tcp_server_session(&block)
260
- if self.server_host
261
- print_info "Listening on #{self.server_host}:#{self.server_port} ..."
262
- else
263
- print_info "Listening on #{self.server_port} ..."
264
- end
249
+ print_info "Listening on #{server_host_port} ..."
265
250
 
266
- ::Net.tcp_server_session(&block)
267
-
268
- if self.server_host
269
- print_info "Closed #{self.server_host}:#{self.server_port}"
270
- else
271
- print_info "Closed #{self.server_port}"
272
- end
251
+ super(self.server_port,self.server_host,&block)
273
252
 
253
+ print_info "Closed #{server_host_port}"
274
254
  return nil
275
255
  end
276
256
 
@@ -299,13 +279,9 @@ module Ronin
299
279
  # @api public
300
280
  #
301
281
  def tcp_single_server(&block)
302
- if self.server_host
303
- print_info "Listening on #{self.server_host}:#{self.server_port} ..."
304
- else
305
- print_info "Listening on #{self.server_port} ..."
306
- end
282
+ print_info "Listening on #{server_host_port} ..."
307
283
 
308
- ::Net.tcp_single_server do |client|
284
+ super(self.server_port,self.server_host) do |client|
309
285
  client_addr = client.peeraddr
310
286
  client_host = (client_addr[2] || client_addr[3])
311
287
  client_port = client_addr[1]
@@ -314,17 +290,28 @@ module Ronin
314
290
 
315
291
  yield client if block_given?
316
292
 
317
- print_info "Disconnecting client #{client_host}:#{client_port}"
318
- end
319
-
320
- if self.server_host
321
- print_info "Closed #{self.server_host}:#{self.server_port}"
322
- else
323
- print_info "Closed #{self.server_port}"
293
+ print_info "Disconnected client #{client_host}:#{client_port}"
324
294
  end
325
295
 
296
+ print_info "Closed #{server_host_port}"
326
297
  return nil
327
298
  end
299
+
300
+ private
301
+
302
+ #
303
+ # The server host/port parameters.
304
+ #
305
+ # @return [String]
306
+ # The server host/port parameters in String form.
307
+ #
308
+ # @since 0.4.0
309
+ #
310
+ # @api private
311
+ #
312
+ def server_host_port
313
+ "#{self.server_host}:#{self.server_port}"
314
+ end
328
315
  end
329
316
  end
330
317
  end