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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 187de6ed3fb5855168dba5307c2b0ec754b2d8327878f442b86a66f209d73c49
4
- data.tar.gz: 956f99effb19dfc3acba6f60331669d564cbc40058dff5f5ef57a98c223e8eb0
3
+ metadata.gz: b0bf99960d66db7491db5490f75d4c87a8bfde429dcc76a4e4e1d07306cf61b8
4
+ data.tar.gz: 7e665ba1dba7574c1fa7adb9523b9e8781daff17185daef8300cc0d1f5cd8d0b
5
5
  SHA512:
6
- metadata.gz: e78e14e222bb5e5823befaa21e343c22bc4e463978c7b0bc70f837d4a9de9dcce2be616d369734069b7facbd396478f2a4c48f549e03358eea755cfa7bf63804
7
- data.tar.gz: b6add9eb1151d74870e64af0773042a669e8538bd819ff1a6ad1d08e7887d8b56947a0a2be650787fe2eb8f7ad194a545029dfb5ca17f7d7f00cbaf898191e5a
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
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in rex-socket.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'pry-byebug'
8
+ end
data/lib/rex/socket.rb CHANGED
@@ -174,7 +174,7 @@ module Socket
174
174
  end
175
175
 
176
176
  #
177
- # Wrapper for +::Socket.gethostbyname+ that takes special care to see if the
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 = ::Socket.gethostbyname(hostname)
190
- return [] if not res
189
+ res = ::Addrinfo.getaddrinfo(hostname, 0, ::Socket::AF_UNSPEC, ::Socket::SOCK_STREAM)
191
190
 
192
- # Shift the first three elements out, leaving just the list of
193
- # addresses
194
- res.shift # name
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
- # Rubinius has a bug where gethostbyname returns dotted quads instead of
199
- # NBO, but that's what we want anyway, so just short-circuit here.
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
- self.gethostbyname( Rex::Socket.getaddress(host, true) )[3]
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{|addr| self.gethostbyname(addr)[3] }
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
- getsockname
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
- # Return peer connection information.
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'] || false
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'] || false
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
- attr_accessor :peerport
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
- attr_accessor :localhost
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
- attr_accessor :localport
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
- attr_accessor :proto
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
- attr_accessor :server
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
- attr_accessor :comm
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
- attr_accessor :context
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
- attr_accessor :retries
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
- attr_accessor :timeout
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
- attr_accessor :bare
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
- attr_accessor :ssl
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
- attr_accessor :v6
398
-
424
+ attr_writer :v6
425
+ def v6
426
+ @v6 || false
427
+ end
399
428
 
400
429
  # List of proxies to use
401
- # @return [String]
430
+ # @return [Array]
402
431
  attr_accessor :proxies
403
432
 
404
433
  alias peeraddr peerhost
@@ -61,6 +61,11 @@ module Rex::Socket::TcpServer
61
61
 
62
62
  t.peerhost = pn[1]
63
63
  t.peerport = pn[2]
64
+
65
+ ln = t.getlocalname
66
+
67
+ t.localhost = ln[1]
68
+ t.localport = ln[2]
64
69
  end
65
70
 
66
71
  t
@@ -1,5 +1,5 @@
1
1
  module Rex
2
2
  module Socket
3
- VERSION = "0.1.21"
3
+ VERSION = "0.1.26"
4
4
  end
5
5
  end
@@ -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 = ["David Maloney"]
10
- spec.email = ["DMaloney@rapid7.com"]
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 "bundler", "~> 1.12"
28
- spec.add_development_dependency "rake", "~> 10.0"
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.21
4
+ version: 0.1.26
5
5
  platform: ruby
6
6
  authors:
7
- - David Maloney
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
- MIIFIzCCBAugAwIBAgIQDX9ZkVJ2eNVTlibR5ALyJTANBgkqhkiG9w0BAQsFADBy
67
+ MIIFIzCCBAugAwIBAgIQCMePMbkSxvnPeJhYXIfaxzANBgkqhkiG9w0BAQsFADBy
68
68
  MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
69
69
  d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg
70
- SUQgQ29kZSBTaWduaW5nIENBMB4XDTE5MTAxNjAwMDAwMFoXDTIwMTAxOTEyMDAw
70
+ SUQgQ29kZSBTaWduaW5nIENBMB4XDTIwMTAwNzAwMDAwMFoXDTIzMTEwNjEyMDAw
71
71
  MFowYDELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNV
72
72
  BAcTBkJvc3RvbjETMBEGA1UEChMKUmFwaWQ3IExMQzETMBEGA1UEAxMKUmFwaWQ3
73
- IExMQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANHnKegPAghKuZk4
74
- Gy1jKaZEXbWc4fxioTemv/F1yIYzAjCWP65qjKtyeeFDe4/kJzG9nseF9oa93YBf
75
- 1nyEqxNSZMw/sCAZ87lOl713dRi73uxOoszy2PT5xEB+Q5R6cbzExkWG2zrLdXDr
76
- so0Bd6VHw+IsAoBBkAq5FrZOJQYGn5VY20xw/2DqtCeoW4QDWyqTnbJmwO9tZrfr
77
- 3Le2crfk2eOgafaPNhLon5uuIKCZsk2YkUSNURSS3M7gosMwU9Gg4JTBi7X5+oww
78
- rY43dJT28YklxmNVu8o5kJxW4dqLKJLOIgSXZ63nceT/EaCSg7DcofHNcUzejFwb
79
- M7Zbb2kCAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsqCqOl6nEDwGD5LfZl
80
- dQ5YMB0GA1UdDgQWBBR18CAeMsIEU+0pXal/XXw9LCtMADAOBgNVHQ8BAf8EBAMC
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
- BQADggEBAFpzR9s7lcYKDzSJucOHztEPj+iSIeCzxEw34NTE9M2AfkYIu82c4r2a
90
- bzIGmzZWiCGufjOp0gF5xW6sSSJ9n0TqH0nhHhvjtZQkmkGtOBbN1zeYDFS2ozAp
91
- sljF/g68Y1eYs3NaFf7kQUa6vb6RdjW3J8M9AQ8gthBt7gr/guVxd/gJUYbdDdBX
92
- cWfJJi/X7GVBOBmmvA43qoKideuhOBrVGBHvIF/yO9p23dIiUrGmW9kxXCSxgute
93
- JI/W23RbIRksG2pioMhd4dCXq3FLLlkOV1YfCwWixNB+iIhQPPZVaPNfgPhCn4Dt
94
- DeGjje/qA4fkLtRmOtb9PUBq3ToRDE4=
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: 2019-12-03 00:00:00.000000000 Z
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: '10.0'
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: '10.0'
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: '3.0'
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: '3.0'
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
- - DMaloney@rapid7.com
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
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- sudo: false
2
- group: stable
3
- cache: bundler
4
- language: ruby
5
- rvm:
6
- - 2.3.2