ronin-support 1.0.4 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6f75dd96200bd01190ad5ae040cc28dfc658c3f6bcf6c7f299bcdb01d1ee974
4
- data.tar.gz: 2a9b6e98f9959efacbbc81fccecbaa68b1620a8f52e38efdc941dcdba74ba38d
3
+ metadata.gz: 04b9f7e7aa3d25c5742621faaeba6ce51150d3959d82867d41901c7cd1a2af06
4
+ data.tar.gz: 4e081a47953f762edca8e267c6a31fc168cf8a91f93ce464f7586a1d3e81b2dc
5
5
  SHA512:
6
- metadata.gz: 604e499c76bfd98e82dd2711a203edb85263742df23f128179d52b283c1f6e468334a34b456119b76c1a0d84b2d06969100d4b75e880a5b4ab963e6ccf244742
7
- data.tar.gz: 843289f09e088afc611ee793f645cdb978bb51613d69176591599c26fdc4e8bfcc8b255e76fc01a7b8c40b1024aa94b69976754de3d9ef84b9ae5eecc62d4223
6
+ metadata.gz: 5611fdbe096f30f8ad9a4d828b722c221e90b93a9e217e6fb9c3ca3eb54dc7103cb0d39e7b5b98f5a74192c6339adedad97c5c11f69bb5019b2ebc7ca0ef3b03
7
+ data.tar.gz: 107956428d0b34d47378c338143e70820cee6a62fedf24927157d5f06f16b4b978957fb02f945f7eabb75e897dc81a2ab58665fbcf56b072a7f7ad4493bb116a
@@ -12,6 +12,7 @@ jobs:
12
12
  - '3.0'
13
13
  - '3.1'
14
14
  - '3.2'
15
+ - '3.3'
15
16
  # - jruby
16
17
  # - truffleruby
17
18
  name: Ruby ${{ matrix.ruby }}
data/.rubocop.yml CHANGED
@@ -107,3 +107,11 @@ Naming/BinaryOperatorParameterName:
107
107
  Lint/RescueException:
108
108
  Exclude:
109
109
  - 'lib/ronin/support/core_ext/kernel.rb'
110
+
111
+ # make an exception when we need to test the #each method directly
112
+ Style/MapIntoArray:
113
+ Exclude:
114
+ - 'spec/archive/zip/reader_spec.rb'
115
+ - 'spec/network/ip_range/cidr_spec.rb'
116
+ - 'spec/network/ip_range/glob_spec.rb'
117
+ - 'spec/network/ip_range_spec.rb'
data/ChangeLog.md CHANGED
@@ -1,3 +1,22 @@
1
+ ### 1.0.6 / 2024-06-19
2
+
3
+ * Fixed error messages in {Ronin::Support::Encoding::Base64.encode} and
4
+ {Ronin::Support::Encoding::Base64.decode}.
5
+ * Fixed {Ronin::Support::Network::IPRange::Glob#each} to support `*` in IPv6
6
+ glob ranges.
7
+ * {Ronin::Support::Network::TCP.connect},
8
+ {Ronin::Support::Network::UDP.connect}, and
9
+ {Ronin::Support::Network::HTTP.connect}, when given a block, now returns the
10
+ block's return value.
11
+ * {Ronin::Support::Network::TCP.connect} and
12
+ {Ronin::Support::Network::UDP.connect} properly closes the socket when passed
13
+ a block that raises an exception.
14
+
15
+ ### 1.0.5 / 2023-12-27
16
+
17
+ * Fixed a bug in {Ronin::Support::Binary::Stream::Methods#read_string} on Ruby
18
+ 3.3.0.
19
+
1
20
  ### 1.0.4 / 2023-12-15
2
21
 
3
22
  * Fixed a bug in {Array#pack} where complex types (ex: `[[:uint32, 4], 10]`)
@@ -699,4 +718,3 @@
699
718
  * Require combinatorics ~> 0.3.
700
719
  * Require uri-query_params ~> 0.5, >= 0.5.2.
701
720
  * Require data_paths ~> 0.2, >= 0.2.1.
702
-
@@ -111,7 +111,11 @@ module Ronin
111
111
  # @api public
112
112
  #
113
113
  def read_string(length=nil)
114
- new_string = String.new('', encoding: external_encoding)
114
+ new_string = if (encoding = external_encoding)
115
+ String.new('', encoding: encoding)
116
+ else
117
+ String.new('')
118
+ end
115
119
 
116
120
  if length
117
121
  length.times do
@@ -52,7 +52,7 @@ module Ronin
52
52
  when :url_safe then ::Base64.urlsafe_encode64(data)
53
53
  when nil then ::Base64.encode64(data)
54
54
  else
55
- raise(ArgumentError,"Base64 mode must be either :string, :url, or nil: #{mode.inspect}")
55
+ raise(ArgumentError,"Base64 mode must be either :string, :url_safe, or nil: #{mode.inspect}")
56
56
  end
57
57
  end
58
58
 
@@ -74,7 +74,7 @@ module Ronin
74
74
  when :url_safe then ::Base64.urlsafe_decode64(data)
75
75
  when nil then ::Base64.decode64(data)
76
76
  else
77
- raise(ArgumentError,"Base64 mode must be either :string, :url, or nil: #{mode.inspect}")
77
+ raise(ArgumentError,"Base64 mode must be either :string, :url_safe, or nil: #{mode.inspect}")
78
78
  end
79
79
  end
80
80
  end
@@ -473,8 +473,11 @@ module Ronin
473
473
  http = new(host,port, ssl: ssl, **kwargs)
474
474
 
475
475
  if block_given?
476
- yield http
477
- http.close
476
+ begin
477
+ yield http
478
+ ensure
479
+ http.close
480
+ end
478
481
  else
479
482
  return http
480
483
  end
@@ -31,7 +31,6 @@ module Ronin
31
31
  # cidr.each { |ip puts }
32
32
  # # 10.0.0.0
33
33
  # # 10.0.0.1
34
- # # 10.0.0.2
35
34
  # # ...
36
35
  # # 10.0.0.254
37
36
  # # 10.0.0.255
@@ -151,8 +150,8 @@ module Ronin
151
150
  #
152
151
  # @example
153
152
  # IPRange::CIDR.each('10.0.0.1/24') { |ip| puts ip }
153
+ # # 10.0.0.0
154
154
  # # 10.0.0.1
155
- # # 10.0.0.2
156
155
  # # ...
157
156
  # # 10.0.0.254
158
157
  # # 10.0.0.255
@@ -174,17 +173,14 @@ module Ronin
174
173
  #
175
174
  # @return [self]
176
175
  #
177
- # @note
178
- # This method will skip IPv4 addresses ending in `.0` or `.255`.
179
- #
180
176
  # @example
181
177
  # cidr = IPAddr.new('10.1.1.1/24')
182
178
  # cidr.each { |ip| puts ip }
179
+ # # 10.0.0.0
183
180
  # # 10.0.0.1
184
- # # 10.0.0.2
185
181
  # # ...
186
- # # 10.0.0.253
187
182
  # # 10.0.0.254
183
+ # # 10.0.0.255
188
184
  #
189
185
  def each
190
186
  return enum_for(__method__) unless block_given?
@@ -192,14 +188,7 @@ module Ronin
192
188
  family_mask = MASKS[@family]
193
189
 
194
190
  (0..((~@mask_addr) & family_mask)).each do |i|
195
- ip_uint = (@addr | i)
196
-
197
- # skip IPv4 addresses ending in .0 or .255
198
- if (ipv4? && ((ip_uint & 0xff) == 0 || (ip_uint & 0xff) == 0xff))
199
- next
200
- end
201
-
202
- yield _to_string(ip_uint)
191
+ yield _to_string(@addr | i)
203
192
  end
204
193
 
205
194
  return self
@@ -29,23 +29,23 @@ module Ronin
29
29
  #
30
30
  # ip_range = IPRange::Glob.new('10.0.1-3.*/24')
31
31
  # ip_range.each { |ip| puts ip }
32
+ # # 10.0.1.0
32
33
  # # 10.0.1.1
33
- # # 10.0.1.2
34
34
  # # ...
35
- # # 10.0.1.253
36
35
  # # 10.0.1.254
36
+ # # 10.0.1.255
37
37
  # # ...
38
+ # # 10.0.2.0
38
39
  # # 10.0.2.1
39
- # # 10.0.2.2
40
40
  # # ...
41
- # # 10.0.2.253
42
41
  # # 10.0.2.254
42
+ # # 10.0.2.255
43
43
  # # ...
44
+ # # 10.0.3.0
44
45
  # # 10.0.3.1
45
- # # 10.0.3.2
46
46
  # # ...
47
- # # 10.0.3.253
48
47
  # # 10.0.3.254
48
+ # # 10.0.3.255
49
49
  #
50
50
  # @api public
51
51
  #
@@ -71,22 +71,25 @@ module Ronin
71
71
 
72
72
  if @string.include?(':') # IPv6
73
73
  @version = 6
74
- @separator = ':'
75
74
  @base = 16
76
75
  @formatter = method(:format_ipv6_address)
76
+
77
+ separator = ':'
78
+ octet_range = (0..0xffff)
77
79
  else # IPv4
78
80
  @version = 4
79
- @separator = '.'
80
81
  @base = 10
81
82
  @formatter = method(:format_ipv4_address)
83
+
84
+ separator = '.'
85
+ octet_range = (0..255)
82
86
  end
83
87
 
84
- @ranges = @string.split(@separator).map do |segment|
85
- case segment
86
- when '*' then (1..254)
87
- when /,/ then parse_list(segment)
88
- when /-/ then parse_range(segment)
89
- else [segment]
88
+ @ranges = @string.split(separator).map do |segment|
89
+ if segment == '*' then octet_range
90
+ elsif segment.include?(',') then parse_list(segment)
91
+ elsif segment.include?('-') then parse_range(segment)
92
+ else [segment]
90
93
  end
91
94
  end
92
95
  end
@@ -123,23 +126,23 @@ module Ronin
123
126
  #
124
127
  # @example Enumerate through a IPv4 glob range:
125
128
  # IPRange::Glob.each('10.0.1-3.*') { |ip| puts ip }
129
+ # # 10.0.1.0
126
130
  # # 10.0.1.1
127
- # # 10.0.1.2
128
131
  # # ...
129
- # # 10.0.1.253
130
132
  # # 10.0.1.254
133
+ # # 10.0.1.255
131
134
  # # ...
135
+ # # 10.0.2.0
132
136
  # # 10.0.2.1
133
- # # 10.0.2.2
134
137
  # # ...
135
- # # 10.0.2.253
136
138
  # # 10.0.2.254
139
+ # # 10.0.2.255
137
140
  # # ...
141
+ # # 10.0.3.0
138
142
  # # 10.0.3.1
139
- # # 10.0.3.2
140
143
  # # ...
141
- # # 10.0.3.253
142
144
  # # 10.0.3.254
145
+ # # 10.0.3.255
143
146
  #
144
147
  # @example Enumerate through a globbed IPv6 range:
145
148
  # IPRange::Glob.each('::ff::02-0a::c3') { |ip| puts ip }
@@ -181,23 +184,23 @@ module Ronin
181
184
  # @example Enumerate through a IPv4 glob range:
182
185
  # ip_range = IPRange::Glob.new('10.0.1-3.*')
183
186
  # ip_range.each { |ip| puts ip }
187
+ # # 10.0.1.0
184
188
  # # 10.0.1.1
185
- # # 10.0.1.2
186
189
  # # ...
187
- # # 10.0.1.253
188
190
  # # 10.0.1.254
191
+ # # 10.0.1.255
189
192
  # # ...
193
+ # # 10.0.2.0
190
194
  # # 10.0.2.1
191
- # # 10.0.2.2
192
195
  # # ...
193
- # # 10.0.2.253
194
196
  # # 10.0.2.254
197
+ # # 10.0.2.255
195
198
  # # ...
199
+ # # 10.0.3.0
196
200
  # # 10.0.3.1
197
- # # 10.0.3.2
198
201
  # # ...
199
- # # 10.0.3.253
200
202
  # # 10.0.3.254
203
+ # # 10.0.3.255
201
204
  #
202
205
  # @example Enumerate through a globbed IPv6 range:
203
206
  # ip_range = IPRange::Glob.new('::ff::02-0a::c3')
@@ -171,26 +171,14 @@ module Ronin
171
171
  # @return [Enumerator]
172
172
  # If no block is given, an Enumerator will be returned.
173
173
  #
174
- # @note
175
- # This method will skip IPv4 addresses ending in `.0` or `.255`.
176
- #
177
174
  # @example
178
- # range = IPRange::Range.new('1.1.1.0','1.1.1.255')
175
+ # range = IPRange::Range.new('1.1.1.1','1.1.3.42')
179
176
  # range.each { |ip| puts ip }
180
177
  # # 1.1.1.1
181
178
  # # 1.1.1.2
182
179
  # # ...
183
- # # 1.1.1.253
184
- # # 1.1.1.254
185
- #
186
- # @example
187
- # range IPRange::Range.new('1.1.1.100','1.1.3.200')
188
- # range.each { |ip| puts ip }
189
- # # 1.1.1.100
190
- # # 1.1.1.101
191
- # # ...
192
- # # 1.1.3.199
193
- # # 1.1.3.200
180
+ # # 1.1.3.41
181
+ # # 1.1.3.42
194
182
  #
195
183
  def each
196
184
  return enum_for(__method__) unless block_given?
@@ -198,11 +186,6 @@ module Ronin
198
186
  ipaddr = @begin.clone
199
187
 
200
188
  (@begin_uint..@end_uint).each do |ip_uint|
201
- # skip IPv4 addresses ending in .0 or .255
202
- if (ipv4? && ((ip_uint & 0xff) == 0 || (ip_uint & 0xff) == 0xff))
203
- next
204
- end
205
-
206
189
  ipaddr.send(:set,ip_uint)
207
190
  yield ipaddr.to_s
208
191
  end
@@ -41,23 +41,23 @@ module Ronin
41
41
  # Enumerating over a IP-glob range:
42
42
  #
43
43
  # IPRange.each('10.0.1-3.*') { |ip| puts ip }
44
+ # # 10.0.1.0
44
45
  # # 10.0.1.1
45
- # # 10.0.1.2
46
46
  # # ...
47
- # # 10.0.1.253
48
47
  # # 10.0.1.254
48
+ # # 10.0.1.255
49
49
  # # ...
50
+ # # 10.0.2.0
50
51
  # # 10.0.2.1
51
- # # 10.0.2.2
52
52
  # # ...
53
- # # 10.0.2.253
54
53
  # # 10.0.2.254
54
+ # # 10.0.2.255
55
55
  # # ...
56
+ # # 10.0.3.0
56
57
  # # 10.0.3.1
57
- # # 10.0.3.2
58
58
  # # ...
59
- # # 10.0.3.253
60
59
  # # 10.0.3.254
60
+ # # 10.0.3.255
61
61
  #
62
62
  # @api public
63
63
  #
@@ -126,23 +126,23 @@ module Ronin
126
126
  #
127
127
  # @example Enumerating over a IP-glob range:
128
128
  # IPRange.each('10.0.1-3.*') { |ip| puts ip }
129
+ # # 10.0.1.0
129
130
  # # 10.0.1.1
130
- # # 10.0.1.2
131
131
  # # ...
132
- # # 10.0.1.253
133
132
  # # 10.0.1.254
133
+ # # 10.0.1.255
134
134
  # # ...
135
+ # # 10.0.2.0
135
136
  # # 10.0.2.1
136
- # # 10.0.2.2
137
137
  # # ...
138
- # # 10.0.2.253
139
138
  # # 10.0.2.254
139
+ # # 10.0.2.255
140
140
  # # ...
141
+ # # 10.0.3.0
141
142
  # # 10.0.3.1
142
- # # 10.0.3.2
143
143
  # # ...
144
- # # 10.0.3.253
145
144
  # # 10.0.3.254
145
+ # # 10.0.3.255
146
146
  #
147
147
  # @see #each
148
148
  #
@@ -181,6 +181,9 @@ module Ronin
181
181
  #
182
182
  # @return [String]
183
183
  #
184
+ # @see CIDR#string
185
+ # @see Glob#string
186
+ #
184
187
  def string
185
188
  @range.string
186
189
  end
@@ -190,6 +193,9 @@ module Ronin
190
193
  #
191
194
  # @return [Boolean]
192
195
  #
196
+ # @see CIDR#ipv4?
197
+ # @see Glob#ipv4?
198
+ #
193
199
  def ipv4?
194
200
  @range.ipv4?
195
201
  end
@@ -199,6 +205,9 @@ module Ronin
199
205
  #
200
206
  # @return [Boolean]
201
207
  #
208
+ # @see CIDR#ipv6?
209
+ # @see Glob#ipv6?
210
+ #
202
211
  def ipv6?
203
212
  @range.ipv6?
204
213
  end
@@ -230,23 +239,23 @@ module Ronin
230
239
  # @example Enumerating over a IP-glob range:
231
240
  # ip_range = IPRange.new('10.0.1-3.*')
232
241
  # ip_range.each { |ip| puts ip }
242
+ # # 10.0.1.0
233
243
  # # 10.0.1.1
234
- # # 10.0.1.2
235
244
  # # ...
236
- # # 10.0.1.253
237
245
  # # 10.0.1.254
246
+ # # 10.0.1.255
238
247
  # # ...
248
+ # # 10.0.2.0
239
249
  # # 10.0.2.1
240
- # # 10.0.2.2
241
250
  # # ...
242
- # # 10.0.2.253
243
251
  # # 10.0.2.254
252
+ # # 10.0.2.255
244
253
  # # ...
254
+ # # 10.0.3.0
245
255
  # # 10.0.3.1
246
- # # 10.0.3.2
247
256
  # # ...
248
- # # 10.0.3.253
249
257
  # # 10.0.3.254
258
+ # # 10.0.3.255
250
259
  #
251
260
  # @see CIDR#each
252
261
  # @see Glob#each
@@ -100,8 +100,11 @@ module Ronin
100
100
  pop3.start(user,password)
101
101
 
102
102
  if block_given?
103
- yield pop3
104
- pop3.finish
103
+ begin
104
+ yield pop3
105
+ ensure
106
+ pop3.finish
107
+ end
105
108
  else
106
109
  return pop3
107
110
  end
@@ -164,8 +164,11 @@ module Ronin
164
164
  smtp.start(helo,user,password,auth)
165
165
 
166
166
  if block_given?
167
- yield smtp
168
- smtp.finish
167
+ begin
168
+ yield smtp
169
+ ensure
170
+ smtp.finish
171
+ end
169
172
  else
170
173
  return smtp
171
174
  end
@@ -108,7 +108,7 @@ module Ronin
108
108
  # Path to the CA certificate file or directory.
109
109
  #
110
110
  # @return [OpenSSL::SSL::SSLSocket]
111
- # the new SSL Socket.
111
+ # The new SSL Socket.
112
112
  #
113
113
  # @api public
114
114
  #
@@ -246,7 +246,7 @@ module Ronin
246
246
  # The new SSL Socket.
247
247
  #
248
248
  # @return [OpenSSL::SSL::SSLSocket, nil]
249
- # the new SSL Socket. If a block is given, then `nil` will be
249
+ # The new SSL Socket. If a block is given, then `nil` will be
250
250
  # returned.
251
251
  #
252
252
  # @example
@@ -573,7 +573,7 @@ module Ronin
573
573
  # Path to the CA certificate file or directory.
574
574
  #
575
575
  # @return [OpenSSL::SSL::SSLSocket]
576
- # the new SSL Socket.
576
+ # The new SSL Socket.
577
577
  #
578
578
  # @api public
579
579
  #
@@ -131,8 +131,11 @@ module Ronin
131
131
  end
132
132
 
133
133
  if block_given?
134
- yield socket
135
- socket.close
134
+ begin
135
+ yield socket
136
+ ensure
137
+ socket.close
138
+ end
136
139
  else
137
140
  return socket
138
141
  end
@@ -107,7 +107,7 @@ module Ronin
107
107
  # Path to the CA certificate file or directory.
108
108
  #
109
109
  # @return [OpenSSL::SSL::SSLSocket]
110
- # the new SSL Socket.
110
+ # The new SSL Socket.
111
111
  #
112
112
  # @api public
113
113
  #
@@ -233,7 +233,7 @@ module Ronin
233
233
  # The new SSL Socket.
234
234
  #
235
235
  # @return [OpenSSL::SSL::SSLSocket, nil]
236
- # the new SSL Socket. If a block is given, then `nil` will be
236
+ # The new SSL Socket. If a block is given, then `nil` will be
237
237
  # returned.
238
238
  #
239
239
  # @example
@@ -519,7 +519,7 @@ module Ronin
519
519
  # * `:client_once`
520
520
  #
521
521
  # @return [OpenSSL::SSL::SSLSocket]
522
- # the new SSL Socket.
522
+ # The new SSL Socket.
523
523
  #
524
524
  # @api public
525
525
  #
@@ -137,8 +137,11 @@ module Ronin
137
137
  socket.connect(host,port)
138
138
 
139
139
  if block_given?
140
- yield socket
141
- socket.close
140
+ begin
141
+ yield socket
142
+ ensure
143
+ socket.close
144
+ end
142
145
  else
143
146
  return socket
144
147
  end
@@ -19,6 +19,6 @@
19
19
  module Ronin
20
20
  module Support
21
21
  # ronin-support version
22
- VERSION = '1.0.4'
22
+ VERSION = '1.0.6'
23
23
  end
24
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ronin-support
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-16 00:00:00.000000000 Z
11
+ date: 2024-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chars
@@ -470,7 +470,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
470
470
  - !ruby/object:Gem::Version
471
471
  version: '0'
472
472
  requirements: []
473
- rubygems_version: 3.3.26
473
+ rubygems_version: 3.3.27
474
474
  signing_key:
475
475
  specification_version: 4
476
476
  summary: A support library for ronin-rb.