rex-socket 0.1.21 → 0.1.26
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.github/workflows/verify.yml +57 -0
- data/Gemfile +4 -0
- data/lib/rex/socket.rb +23 -25
- data/lib/rex/socket/parameters.rb +81 -52
- data/lib/rex/socket/tcp_server.rb +5 -0
- data/lib/rex/socket/version.rb +1 -1
- data/lib/rex/socket/x509_certificate.rb +3 -1
- data/rex-socket.gemspec +4 -5
- metadata +29 -43
- metadata.gz.sig +0 -0
- data/.travis.yml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0bf99960d66db7491db5490f75d4c87a8bfde429dcc76a4e4e1d07306cf61b8
|
4
|
+
data.tar.gz: 7e665ba1dba7574c1fa7adb9523b9e8781daff17185daef8300cc0d1f5cd8d0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a15da2ba7b185bf822db6f467fde6ae641008861f2758c865b9c66b524904dffd02add948e18cb544105747aaf8ce5f90f3083c8eaa18ac84284917ff29fe9cf
|
7
|
+
data.tar.gz: c6585bddb9cc7b52f29f3d9f193200132801fbb141162550f9d6a9553af51a853a3946c3c42fca55dbaed217a88cd68372066db5d76a8bcbc356a780c6bde61a
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
@@ -0,0 +1,57 @@
|
|
1
|
+
name: Verify
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- '*'
|
7
|
+
pull_request:
|
8
|
+
branches:
|
9
|
+
- '*'
|
10
|
+
|
11
|
+
jobs:
|
12
|
+
test:
|
13
|
+
runs-on: ubuntu-16.04
|
14
|
+
timeout-minutes: 40
|
15
|
+
|
16
|
+
strategy:
|
17
|
+
fail-fast: true
|
18
|
+
matrix:
|
19
|
+
ruby:
|
20
|
+
- 2.5
|
21
|
+
- 2.6
|
22
|
+
- 2.7
|
23
|
+
- 3.0
|
24
|
+
test_cmd:
|
25
|
+
- bundle exec rspec
|
26
|
+
|
27
|
+
env:
|
28
|
+
RAILS_ENV: test
|
29
|
+
|
30
|
+
name: Ruby ${{ matrix.ruby }} - ${{ matrix.test_cmd }}
|
31
|
+
steps:
|
32
|
+
- name: Checkout code
|
33
|
+
uses: actions/checkout@v2
|
34
|
+
|
35
|
+
- uses: actions/setup-ruby@v1
|
36
|
+
with:
|
37
|
+
ruby-version: ${{ matrix.ruby }}
|
38
|
+
|
39
|
+
- name: Setup bundler
|
40
|
+
run: |
|
41
|
+
gem install bundler
|
42
|
+
- uses: actions/cache@v2
|
43
|
+
with:
|
44
|
+
path: vendor/bundle
|
45
|
+
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
46
|
+
restore-keys: |
|
47
|
+
${{ runner.os }}-gems-
|
48
|
+
- name: Bundle install
|
49
|
+
run: |
|
50
|
+
bundle config path vendor/bundle
|
51
|
+
bundle install --jobs 4 --retry 3
|
52
|
+
- name: ${{ matrix.test_cmd }}
|
53
|
+
run: |
|
54
|
+
echo "${CMD}"
|
55
|
+
bash -c "${CMD}"
|
56
|
+
env:
|
57
|
+
CMD: ${{ matrix.test_cmd }}
|
data/Gemfile
CHANGED
data/lib/rex/socket.rb
CHANGED
@@ -174,7 +174,7 @@ module Socket
|
|
174
174
|
end
|
175
175
|
|
176
176
|
#
|
177
|
-
# Wrapper for +::
|
177
|
+
# Wrapper for +::Addrinfo.getaddrinfo+ that takes special care to see if the
|
178
178
|
# supplied address is already an ASCII IP address. This is necessary to
|
179
179
|
# prevent blocking while waiting on a DNS reverse lookup when we already
|
180
180
|
# have what we need.
|
@@ -186,26 +186,14 @@ module Socket
|
|
186
186
|
return [hostname]
|
187
187
|
end
|
188
188
|
|
189
|
-
res = ::
|
190
|
-
return [] if not res
|
189
|
+
res = ::Addrinfo.getaddrinfo(hostname, 0, ::Socket::AF_UNSPEC, ::Socket::SOCK_STREAM)
|
191
190
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
res.shift # alias hostnames
|
196
|
-
res.shift # address_family
|
191
|
+
res.map! do |address_info|
|
192
|
+
address_info.ip_address
|
193
|
+
end
|
197
194
|
|
198
|
-
|
199
|
-
|
200
|
-
if res[0] =~ MATCH_IPV4 || res[0] =~ MATCH_IPV6
|
201
|
-
unless accept_ipv6
|
202
|
-
res.reject!{ |ascii| ascii =~ MATCH_IPV6 }
|
203
|
-
end
|
204
|
-
else
|
205
|
-
unless accept_ipv6
|
206
|
-
res.reject!{ |nbo| nbo.length != 4 }
|
207
|
-
end
|
208
|
-
res.map!{ |nbo| self.addr_ntoa(nbo) }
|
195
|
+
unless accept_ipv6
|
196
|
+
res.reject! { |ascii| ascii =~ MATCH_IPV6 }
|
209
197
|
end
|
210
198
|
|
211
199
|
res
|
@@ -217,7 +205,9 @@ module Socket
|
|
217
205
|
# not occur. This is done in order to prevent delays, such as would occur
|
218
206
|
# on Windows.
|
219
207
|
#
|
208
|
+
# @deprecated Please use {#getaddress}, {#resolv_nbo}, or similar instead.
|
220
209
|
def self.gethostbyname(host)
|
210
|
+
warn "NOTE: #{self}.#{__method__} is deprecated, use getaddress, resolve_nbo, or similar instead. It will be removed in the next Major version"
|
221
211
|
if is_ipv4?(host)
|
222
212
|
return [ host, [], 2, host.split('.').map{ |c| c.to_i }.pack("C4") ]
|
223
213
|
end
|
@@ -259,15 +249,18 @@ module Socket
|
|
259
249
|
#
|
260
250
|
# Resolves a host to raw network-byte order.
|
261
251
|
#
|
262
|
-
def self.resolv_nbo(host)
|
263
|
-
|
252
|
+
def self.resolv_nbo(host, accepts_ipv6 = true)
|
253
|
+
ip_address = Rex::Socket.getaddress(host, accepts_ipv6)
|
254
|
+
IPAddr.new(ip_address).hton
|
264
255
|
end
|
265
256
|
|
266
257
|
#
|
267
258
|
# Resolves a host to raw network-byte order.
|
268
259
|
#
|
269
260
|
def self.resolv_nbo_list(host)
|
270
|
-
Rex::Socket.getaddresses(host).map
|
261
|
+
Rex::Socket.getaddresses(host).map do |addresses|
|
262
|
+
IPAddr.new(addresses).hton
|
263
|
+
end
|
271
264
|
end
|
272
265
|
|
273
266
|
#
|
@@ -732,14 +725,19 @@ module Socket
|
|
732
725
|
end
|
733
726
|
|
734
727
|
#
|
735
|
-
# Wrapper around getsockname
|
728
|
+
# Wrapper around getsockname that stores the local address and local port values.
|
736
729
|
#
|
737
730
|
def getlocalname
|
738
|
-
|
731
|
+
if self.localhost.nil? && self.localport.nil?
|
732
|
+
_, self.localhost, self.localport = getsockname
|
733
|
+
end
|
734
|
+
|
735
|
+
family = Socket.is_ipv4?(self.localhost) ? ::Socket::AF_INET : ::Socket::AF_INET6
|
736
|
+
[family, self.localhost, self.localport]
|
739
737
|
end
|
740
738
|
|
741
739
|
#
|
742
|
-
#
|
740
|
+
# Returns peer connection information as an array.
|
743
741
|
#
|
744
742
|
def getpeername_as_array
|
745
743
|
peer_name = nil
|
@@ -77,45 +77,33 @@ class Rex::Socket::Parameters
|
|
77
77
|
# retried.
|
78
78
|
# @option hash [Fixnum] 'Timeout' The number of seconds before a connection
|
79
79
|
# should time out
|
80
|
-
def initialize(hash)
|
80
|
+
def initialize(hash = {})
|
81
81
|
if (hash['PeerHost'])
|
82
82
|
self.peerhost = hash['PeerHost']
|
83
83
|
elsif (hash['PeerAddr'])
|
84
84
|
self.peerhost = hash['PeerAddr']
|
85
|
-
else
|
86
|
-
self.peerhost = nil
|
87
85
|
end
|
88
86
|
|
89
87
|
if (hash['LocalHost'])
|
90
88
|
self.localhost = hash['LocalHost']
|
91
89
|
elsif (hash['LocalAddr'])
|
92
90
|
self.localhost = hash['LocalAddr']
|
93
|
-
else
|
94
|
-
self.localhost = '0.0.0.0'
|
95
91
|
end
|
96
92
|
|
97
93
|
if (hash['PeerPort'])
|
98
94
|
self.peerport = hash['PeerPort'].to_i
|
99
|
-
else
|
100
|
-
self.peerport = 0
|
101
95
|
end
|
102
96
|
|
103
97
|
if (hash['LocalPort'])
|
104
98
|
self.localport = hash['LocalPort'].to_i
|
105
|
-
else
|
106
|
-
self.localport = 0
|
107
99
|
end
|
108
100
|
|
109
101
|
if (hash['Bare'])
|
110
102
|
self.bare = hash['Bare']
|
111
|
-
else
|
112
|
-
self.bare = false
|
113
103
|
end
|
114
104
|
|
115
105
|
if (hash['SSL'] and hash['SSL'].to_s =~ /^(t|y|1)/i)
|
116
106
|
self.ssl = true
|
117
|
-
else
|
118
|
-
self.ssl = false
|
119
107
|
end
|
120
108
|
|
121
109
|
if hash['SSLContext']
|
@@ -179,33 +167,16 @@ class Rex::Socket::Parameters
|
|
179
167
|
# The protocol this socket will be using
|
180
168
|
if (hash['Proto'])
|
181
169
|
self.proto = hash['Proto'].downcase
|
182
|
-
else
|
183
|
-
self.proto = 'tcp'
|
184
170
|
end
|
185
171
|
|
186
172
|
# Whether or not the socket should be a server
|
187
|
-
self.server = hash['Server']
|
173
|
+
self.server = hash['Server']
|
188
174
|
|
189
175
|
# The communication subsystem to use to create the socket
|
190
176
|
self.comm = hash['Comm']
|
191
177
|
|
192
178
|
# The context that was passed in, if any.
|
193
|
-
self.context = hash['Context']
|
194
|
-
|
195
|
-
# If no comm was supplied, try to use the comm that is best fit to
|
196
|
-
# handle the provided host based on the current routing table.
|
197
|
-
if( self.server )
|
198
|
-
if (self.comm == nil and self.localhost)
|
199
|
-
self.comm = Rex::Socket::SwitchBoard.best_comm(self.localhost)
|
200
|
-
end
|
201
|
-
else
|
202
|
-
if (self.comm == nil and self.peerhost)
|
203
|
-
self.comm = Rex::Socket::SwitchBoard.best_comm(self.peerhost)
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
# If we still haven't found a comm, we default to the local comm.
|
208
|
-
self.comm = Rex::Socket::Comm::Local if (self.comm == nil)
|
179
|
+
self.context = hash['Context']
|
209
180
|
|
210
181
|
# If we are a UDP server, turn off the server flag as it was only set when
|
211
182
|
# creating the UDP socket in order to avail of the switch board above.
|
@@ -216,19 +187,29 @@ class Rex::Socket::Parameters
|
|
216
187
|
# The number of connection retries to make (client only)
|
217
188
|
if hash['Retries']
|
218
189
|
self.retries = hash['Retries'].to_i
|
219
|
-
else
|
220
|
-
self.retries = 0
|
221
190
|
end
|
222
191
|
|
223
192
|
# The number of seconds before a connect attempt times out (client only)
|
224
193
|
if hash['Timeout']
|
225
194
|
self.timeout = hash['Timeout'].to_i
|
226
|
-
else
|
227
|
-
self.timeout = 5
|
228
195
|
end
|
229
196
|
|
230
197
|
# Whether to force IPv6 addressing
|
231
|
-
self.v6 = hash['IPv6']
|
198
|
+
self.v6 = hash['IPv6']
|
199
|
+
end
|
200
|
+
|
201
|
+
def merge(other)
|
202
|
+
self.dup.merge!(other)
|
203
|
+
end
|
204
|
+
|
205
|
+
def merge!(other)
|
206
|
+
other = self.class.new(other) if other.is_a? Hash
|
207
|
+
|
208
|
+
other.instance_variables.each do |name|
|
209
|
+
value = other.instance_variable_get(name)
|
210
|
+
instance_variable_set(name, value) unless value.nil?
|
211
|
+
end
|
212
|
+
self
|
232
213
|
end
|
233
214
|
|
234
215
|
##
|
@@ -294,7 +275,6 @@ class Rex::Socket::Parameters
|
|
294
275
|
return v6
|
295
276
|
end
|
296
277
|
|
297
|
-
|
298
278
|
##
|
299
279
|
#
|
300
280
|
# Attributes
|
@@ -308,50 +288,94 @@ class Rex::Socket::Parameters
|
|
308
288
|
|
309
289
|
# The remote port. Equivalent to the PeerPort parameter hash key.
|
310
290
|
# @return [Fixnum]
|
311
|
-
|
291
|
+
attr_writer :peerport
|
292
|
+
def peerport
|
293
|
+
@peerport || 0
|
294
|
+
end
|
312
295
|
|
313
296
|
# The local host. Equivalent to the LocalHost parameter hash key.
|
314
297
|
# @return [String]
|
315
|
-
|
298
|
+
attr_writer :localhost
|
299
|
+
def localhost
|
300
|
+
@localhost || '0.0.0.0'
|
301
|
+
end
|
316
302
|
|
317
303
|
# The local port. Equivalent to the LocalPort parameter hash key.
|
318
304
|
# @return [Fixnum]
|
319
|
-
|
305
|
+
attr_writer :localport
|
306
|
+
def localport
|
307
|
+
@localport || 0
|
308
|
+
end
|
320
309
|
|
321
310
|
# The protocol to to use, such as TCP. Equivalent to the Proto parameter
|
322
311
|
# hash key.
|
323
312
|
# @return [String]
|
324
|
-
|
313
|
+
attr_writer :proto
|
314
|
+
def proto
|
315
|
+
@proto || 'tcp'
|
316
|
+
end
|
325
317
|
|
326
318
|
# Whether or not this is a server. Equivalent to the Server parameter
|
327
319
|
# hash key.
|
328
320
|
# @return [Bool]
|
329
|
-
|
321
|
+
attr_writer :server
|
322
|
+
def server
|
323
|
+
@server || false
|
324
|
+
end
|
330
325
|
|
331
326
|
# The {Comm} instance that should be used to create the underlying socket.
|
332
327
|
# @return [Comm]
|
333
|
-
|
328
|
+
attr_writer :comm
|
329
|
+
def comm
|
330
|
+
return @comm unless @comm.nil?
|
331
|
+
|
332
|
+
best_comm = nil
|
333
|
+
# If no comm was explicitly specified, try to use the comm that is best fit
|
334
|
+
# to handle the provided host based on the current routing table.
|
335
|
+
if server and localhost
|
336
|
+
best_comm = Rex::Socket::SwitchBoard.best_comm(localhost)
|
337
|
+
elsif peerhost
|
338
|
+
best_comm = Rex::Socket::SwitchBoard.best_comm(peerhost)
|
339
|
+
end
|
340
|
+
|
341
|
+
best_comm || Rex::Socket::Comm::Local
|
342
|
+
end
|
334
343
|
|
335
344
|
# The context hash that was passed in to the structure. (default: {})
|
336
345
|
# @return [Hash]
|
337
|
-
|
346
|
+
attr_writer :context
|
347
|
+
def context
|
348
|
+
@context || {}
|
349
|
+
end
|
338
350
|
|
339
351
|
# The number of attempts that should be made.
|
340
352
|
# @return [Fixnum]
|
341
|
-
|
353
|
+
attr_writer :retries
|
354
|
+
def retries
|
355
|
+
@retries || 0
|
356
|
+
end
|
342
357
|
|
343
358
|
# The number of seconds before a connection attempt should time out.
|
344
359
|
# @return [Fixnum]
|
345
|
-
|
360
|
+
attr_writer :timeout
|
361
|
+
def timeout
|
362
|
+
@timeout || 5
|
363
|
+
end
|
346
364
|
|
347
365
|
# Whether or not this is a bare (non-extended) socket instance that should
|
348
366
|
# be created.
|
349
367
|
# @return [Bool]
|
350
|
-
|
368
|
+
attr_writer :bare
|
369
|
+
def bare
|
370
|
+
@comm || false
|
371
|
+
end
|
351
372
|
|
352
373
|
# Whether or not SSL should be used to wrap the connection.
|
353
374
|
# @return [Bool]
|
354
|
-
|
375
|
+
attr_writer :ssl
|
376
|
+
def ssl
|
377
|
+
@ssl || false
|
378
|
+
end
|
355
379
|
|
356
380
|
# Pre configured SSL Context to use
|
357
381
|
# @return [OpenSSL::SSL::SSLContext]
|
@@ -384,21 +408,26 @@ class Rex::Socket::Parameters
|
|
384
408
|
# The client SSL certificate
|
385
409
|
#
|
386
410
|
attr_accessor :ssl_client_cert
|
411
|
+
|
387
412
|
#
|
388
413
|
# The client SSL key
|
389
414
|
#
|
390
415
|
attr_accessor :ssl_client_key
|
416
|
+
|
391
417
|
#
|
392
418
|
# SSL certificate verification mode for SSL context
|
393
419
|
attr_accessor :ssl_verify_mode
|
420
|
+
|
394
421
|
#
|
395
422
|
# Whether we should use IPv6
|
396
423
|
# @return [Bool]
|
397
|
-
|
398
|
-
|
424
|
+
attr_writer :v6
|
425
|
+
def v6
|
426
|
+
@v6 || false
|
427
|
+
end
|
399
428
|
|
400
429
|
# List of proxies to use
|
401
|
-
# @return [
|
430
|
+
# @return [Array]
|
402
431
|
attr_accessor :proxies
|
403
432
|
|
404
433
|
alias peeraddr peerhost
|
data/lib/rex/socket/version.rb
CHANGED
@@ -28,7 +28,9 @@ class X509Certificate
|
|
28
28
|
|
29
29
|
certs = []
|
30
30
|
ssl_cert.scan(/-----BEGIN\s*[^\-]+-----+\r?\n[^\-]*-----END\s*[^\-]+-----\r?\n?/nm).each do |pem|
|
31
|
-
if pem =~ /PRIVATE KEY/
|
31
|
+
if pem =~ /EC PRIVATE KEY/
|
32
|
+
key = OpenSSL::PKey::EC.new(pem)
|
33
|
+
elsif pem =~ /PRIVATE KEY/
|
32
34
|
key = OpenSSL::PKey::RSA.new(pem)
|
33
35
|
elsif pem =~ /CERTIFICATE/
|
34
36
|
certs << OpenSSL::X509::Certificate.new(pem)
|
data/rex-socket.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'rex/socket/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "rex-socket"
|
8
8
|
spec.version = Rex::Socket::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Metasploit Hackers']
|
10
|
+
spec.email = ['msfdev@metasploit.com']
|
11
11
|
|
12
12
|
spec.summary = %q{The Ruby Exploitation (Rex) Socket Abstraction Library.}
|
13
13
|
spec.description = %q{The Ruby Exploitation (Rex) Socket Abstraction Library. This library
|
@@ -24,9 +24,8 @@ Gem::Specification.new do |spec|
|
|
24
24
|
|
25
25
|
spec.required_ruby_version = '>= 2.2.0'
|
26
26
|
|
27
|
-
spec.add_development_dependency "
|
28
|
-
spec.add_development_dependency "
|
29
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
27
|
+
spec.add_development_dependency "rake"
|
28
|
+
spec.add_development_dependency "rspec"
|
30
29
|
|
31
30
|
spec.add_runtime_dependency "rex-core"
|
32
31
|
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rex-socket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.26
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Metasploit Hackers
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain:
|
@@ -64,20 +64,20 @@ cert_chain:
|
|
64
64
|
-----END CERTIFICATE-----
|
65
65
|
- |
|
66
66
|
-----BEGIN CERTIFICATE-----
|
67
|
-
|
67
|
+
MIIFIzCCBAugAwIBAgIQCMePMbkSxvnPeJhYXIfaxzANBgkqhkiG9w0BAQsFADBy
|
68
68
|
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
69
69
|
d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg
|
70
|
-
|
70
|
+
SUQgQ29kZSBTaWduaW5nIENBMB4XDTIwMTAwNzAwMDAwMFoXDTIzMTEwNjEyMDAw
|
71
71
|
MFowYDELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNV
|
72
72
|
BAcTBkJvc3RvbjETMBEGA1UEChMKUmFwaWQ3IExMQzETMBEGA1UEAxMKUmFwaWQ3
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
73
|
+
IExMQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNTz4zvAy7h/vQp
|
74
|
+
4dr1txXHlABAagkwYYwTMCtHs5PXsJITx/5SAjx5swuaLfze5kPBNF2YImvFlOXY
|
75
|
+
WaB+0PsOnXnaARsDZU683xFlj8izU6IN6VrAHzDLKFBzruJENrOJD/ikbEtbjO/q
|
76
|
+
gFbmS9J9v5ohG/pcRSS0t4ZPAwymf8eCp6QsvOKK/Aymp1RhlRaP8N6N5CIpkhz1
|
77
|
+
9p968iCE+DjOXVYxcWE+jE/7uB1dbgrXykNBujMSS3GULOvVEY28n6NCmrPlo23g
|
78
|
+
yRjYVJ2Vy14nBqnxDZ/yRIfWRVjWoT9TsAEbe9gY29oDpSCSs4wSmLQd5zGCpZ9h
|
79
|
+
r0HDFB8CAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsqCqOl6nEDwGD5LfZl
|
80
|
+
dQ5YMB0GA1UdDgQWBBTLBL7DTwumVEKtdCdpHVYMXOFeDzAOBgNVHQ8BAf8EBAMC
|
81
81
|
B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1oDOgMYYvaHR0cDov
|
82
82
|
L2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1nMS5jcmwwNaAzoDGG
|
83
83
|
L2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3Js
|
@@ -86,57 +86,43 @@ cert_chain:
|
|
86
86
|
JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBOBggrBgEFBQcw
|
87
87
|
AoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkFzc3Vy
|
88
88
|
ZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEL
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
89
|
+
BQADggEBAN+GL5/myPWg7oH4mVrG7/OhXF1MoYQF0ddaNiqaweEHMuKJBQCVZRbL
|
90
|
+
37HojoKXXv2yyRJBCeTB+ojrxX+5PdLVZa0ss7toWzJ2A1poPXZ1eZvm5xeFD32z
|
91
|
+
YQaTmmNWNI3PCDTyJ2PXUc+bDiNNwcZ7yc5o78UNRvp9Jxghya17Q76c9Ov9wvnv
|
92
|
+
dxxQKWGOQy0m4fBrkyjAyH9Djjn81RbQrqYgPuhd5nD0HjN3VUQLhQbIJrk9TVs0
|
93
|
+
EknWpNgVhohbot1lfVAMmIhdtOVaRVcQQixWPwprDj/ydB8ryDMDosIMcw+fkoXU
|
94
|
+
9GJsSaSRRYQ9UUkVL27b64okU8D48m8=
|
95
95
|
-----END CERTIFICATE-----
|
96
|
-
date:
|
96
|
+
date: 2021-03-10 00:00:00.000000000 Z
|
97
97
|
dependencies:
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: bundler
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - "~>"
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: '1.12'
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - "~>"
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '1.12'
|
112
98
|
- !ruby/object:Gem::Dependency
|
113
99
|
name: rake
|
114
100
|
requirement: !ruby/object:Gem::Requirement
|
115
101
|
requirements:
|
116
|
-
- - "
|
102
|
+
- - ">="
|
117
103
|
- !ruby/object:Gem::Version
|
118
|
-
version: '
|
104
|
+
version: '0'
|
119
105
|
type: :development
|
120
106
|
prerelease: false
|
121
107
|
version_requirements: !ruby/object:Gem::Requirement
|
122
108
|
requirements:
|
123
|
-
- - "
|
109
|
+
- - ">="
|
124
110
|
- !ruby/object:Gem::Version
|
125
|
-
version: '
|
111
|
+
version: '0'
|
126
112
|
- !ruby/object:Gem::Dependency
|
127
113
|
name: rspec
|
128
114
|
requirement: !ruby/object:Gem::Requirement
|
129
115
|
requirements:
|
130
|
-
- - "
|
116
|
+
- - ">="
|
131
117
|
- !ruby/object:Gem::Version
|
132
|
-
version: '
|
118
|
+
version: '0'
|
133
119
|
type: :development
|
134
120
|
prerelease: false
|
135
121
|
version_requirements: !ruby/object:Gem::Requirement
|
136
122
|
requirements:
|
137
|
-
- - "
|
123
|
+
- - ">="
|
138
124
|
- !ruby/object:Gem::Version
|
139
|
-
version: '
|
125
|
+
version: '0'
|
140
126
|
- !ruby/object:Gem::Dependency
|
141
127
|
name: rex-core
|
142
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -156,14 +142,14 @@ description: "The Ruby Exploitation (Rex) Socket Abstraction Library. This libra
|
|
156
142
|
with the functionality\n for things like L3 pivoting used
|
157
143
|
by Metasploit. "
|
158
144
|
email:
|
159
|
-
-
|
145
|
+
- msfdev@metasploit.com
|
160
146
|
executables: []
|
161
147
|
extensions: []
|
162
148
|
extra_rdoc_files: []
|
163
149
|
files:
|
150
|
+
- ".github/workflows/verify.yml"
|
164
151
|
- ".gitignore"
|
165
152
|
- ".rspec"
|
166
|
-
- ".travis.yml"
|
167
153
|
- CODE_OF_CONDUCT.md
|
168
154
|
- Gemfile
|
169
155
|
- LICENSE
|
metadata.gz.sig
CHANGED
Binary file
|