rex-socket 0.1.21 → 0.1.26
Sign up to get free protection for your applications and to get access to all the features.
- 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
|