rex-socket 0.1.53 → 0.1.55

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: f4e2765900a58243437c2588d16bc2c3fcd65b58f042707a1ebca28d2240786d
4
- data.tar.gz: b7e46d8ab59b275872e48c418de39f07c615a2fdc480ad7ce0a8cf033eb5297f
3
+ metadata.gz: f205a57e2e9e372f999bd08d4e39d6be05bb5fc4a3bcc83e3b27b0de29dd90ad
4
+ data.tar.gz: '028fca6197d04804b78b7f6ee8d9ca849196c84714a1eabf640b25fe723b8226'
5
5
  SHA512:
6
- metadata.gz: 87cdca34534ff3ba9c085659200b40f71802ea51bc023e82bd918df19c3e5b70b2f9132dd954d121655d21a90e2a32bbea0fbed48543877f22ca404cac4d3ee9
7
- data.tar.gz: 3bb326d55b4b6c3f6741df0bcf6073b329bba6934e5a5ac45cae1a6716b53301f1d8b3bebc80d40de0ed1c55a67e5c6fc37846fe5eb9524f294d373b6fc984c8
6
+ metadata.gz: 393eb18d30bf96737c546a91cc646991cb1b17641cce3266911378a6a423c1d7a3f0e921ca455816bf7563fae6fa6933a38a39263c5b7a823be1c319ff0d8960
7
+ data.tar.gz: c5f866f117febd1717a60404a2b07e5cf945f48c37c479e490d26992b5438abfb78f1b7e84940399e0e741ef155830ec07cb7fa5ef211fb88d70e7b33341e9de
checksums.yaml.gz.sig CHANGED
Binary file
@@ -30,7 +30,7 @@ jobs:
30
30
  timeout-minutes: 40
31
31
 
32
32
  strategy:
33
- fail-fast: true
33
+ fail-fast: false
34
34
  matrix:
35
35
  ruby:
36
36
  - '2.7'
@@ -39,20 +39,20 @@ jobs:
39
39
  - '3.2'
40
40
  os:
41
41
  - ubuntu-20.04
42
+ - windows-2019
43
+ - macos-11
42
44
  - ubuntu-latest
43
45
  exclude:
44
46
  - { os: ubuntu-latest, ruby: '2.7' }
45
47
  - { os: ubuntu-latest, ruby: '3.0' }
46
- test_cmd:
47
- - bundle exec rspec
48
48
 
49
49
  env:
50
50
  RAILS_ENV: test
51
51
 
52
- name: ${{ matrix.os }} - Ruby ${{ matrix.ruby }} - ${{ matrix.test_cmd }}
52
+ name: ${{ matrix.os }} - Ruby ${{ matrix.ruby }}
53
53
  steps:
54
54
  - name: Checkout code
55
- uses: actions/checkout@v2
55
+ uses: actions/checkout@v4
56
56
 
57
57
  - name: Setup Ruby
58
58
  uses: ruby/setup-ruby@v1
@@ -60,9 +60,6 @@ jobs:
60
60
  ruby-version: ${{ matrix.ruby }}
61
61
  bundler-cache: true
62
62
 
63
- - name: ${{ matrix.test_cmd }}
63
+ - name: rspec
64
64
  run: |
65
- echo "${CMD}"
66
- bash -c "${CMD}"
67
- env:
68
- CMD: ${{ matrix.test_cmd }}
65
+ bundle exec rspec
data/cortex.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ info:
3
+ title: Rex Socket
4
+ description: The Rex Socket Abstraction Library
5
+ x-cortex-git:
6
+ github:
7
+ alias: r7org
8
+ repository: rapid7/rex-socket
9
+ x-cortex-tag: rex-socket
10
+ x-cortex-type: service
11
+ x-cortex-domain-parents:
12
+ - tag: metasploit
13
+ openapi: 3.0.1
14
+ servers:
15
+ - url: "/"
@@ -1,5 +1,5 @@
1
1
  module Rex
2
2
  module Socket
3
- VERSION = "0.1.53"
3
+ VERSION = "0.1.55"
4
4
  end
5
5
  end
data/lib/rex/socket.rb CHANGED
@@ -258,6 +258,29 @@ module Socket
258
258
  @@resolver ? self.rex_gethostbyname(host) : ::Socket.gethostbyname(host)
259
259
  end
260
260
 
261
+ #
262
+ # Wrapper for Resolv::DNS.getresources which normalizes the return value to a
263
+ # list of hostnames regardless of the resource class.
264
+ #
265
+ # @param name [String] The name to lookup.
266
+ # @param typeclass [Symbol] The resource class to lookup, e.g. CNAME, MX, etc.
267
+ # @raises ArgumentError An argument error is raised when the typeclass is invalid.
268
+ # @return [Array<String>] The hostnames that were returned by the query.
269
+ def self.getresources(name, typeclass)
270
+ return self.rex_getresources(name, typeclass) if @@resolver
271
+
272
+ typeclass = typeclass.upcase
273
+ attribute = DNS_RESOURCE_ATTRIBUTE_NAMES[typeclass]
274
+ if attribute.nil?
275
+ raise ArgumentError, "Invalid typeclass: #{typeclass}"
276
+ end
277
+ const = Resolv::DNS::Resource::IN.const_get(typeclass)
278
+
279
+ dns = Resolv::DNS.new
280
+ resources = dns.getresources(name, const)
281
+ resources.map(&attribute).map(&:to_s)
282
+ end
283
+
261
284
  #
262
285
  # Create a sockaddr structure using the supplied IP address, port, and
263
286
  # address family
@@ -672,37 +695,57 @@ module Socket
672
695
  # is no concurrent use of the same locals and this is safe.
673
696
  def self.tcp_socket_pair
674
697
  lsock = nil
698
+ last_child_error = nil
699
+ accept_timeout = 10
675
700
  rsock = nil
676
701
  laddr = '127.0.0.1'
677
702
  lport = 0
678
703
  threads = []
679
704
  mutex = ::Mutex.new
680
705
 
681
- threads << Rex::ThreadFactory.spawn('TcpSocketPair', false) {
706
+ threads << Rex::ThreadFactory.spawn('TcpSocketPair', false) do
682
707
  server = nil
683
- mutex.synchronize {
684
- threads << Rex::ThreadFactory.spawn('TcpSocketPairClient', false) {
685
- mutex.synchronize {
686
- rsock = ::TCPSocket.new( laddr, lport )
687
- }
688
- }
689
- server = ::TCPServer.new(laddr, 0)
690
- if (server.getsockname =~ /127\.0\.0\.1:/)
691
- # JRuby ridiculousness
692
- caddr, lport = server.getsockname.split(":")
693
- caddr = caddr[1,caddr.length]
694
- lport = lport.to_i
708
+ begin
709
+ mutex.synchronize do
710
+ threads << Rex::ThreadFactory.spawn('TcpSocketPairClient', false) do
711
+ mutex.synchronize do
712
+ begin
713
+ rsock = ::TCPSocket.new( laddr, lport )
714
+ rescue => e
715
+ last_child_error = "#{e.class} - #{e.message}"
716
+ raise
717
+ end
718
+ end
719
+ end
720
+ server = ::TCPServer.new(laddr, 0)
721
+ if (server.getsockname =~ /127\.0\.0\.1:/)
722
+ # JRuby ridiculousness
723
+ caddr, lport = server.getsockname.split(":")
724
+ caddr = caddr[1,caddr.length]
725
+ lport = lport.to_i
726
+ else
727
+ # Sane implementations where Socket#getsockname returns a
728
+ # sockaddr
729
+ lport, caddr = ::Socket.unpack_sockaddr_in( server.getsockname )
730
+ end
731
+ end
732
+
733
+ readable, _writable, _errors = ::IO.select([server], nil, nil, accept_timeout)
734
+ if readable && readable.any?
735
+ lsock, _ = server.accept_nonblock
695
736
  else
696
- # Sane implementations where Socket#getsockname returns a
697
- # sockaddr
698
- lport, caddr = ::Socket.unpack_sockaddr_in( server.getsockname )
737
+ raise RuntimeError, "rsock didn't connect in #{accept_timeout} seconds"
699
738
  end
700
- }
701
- lsock, _ = server.accept
702
- server.close
703
- }
739
+ ensure
740
+ server.close if server
741
+ end
742
+ end
704
743
 
705
- threads.each { |t| t.join }
744
+ threads.each.with_index do |thread, i|
745
+ thread.join
746
+ rescue => e
747
+ raise "Thread #{i} - error #{e} - last child error: #{last_child_error}"
748
+ end
706
749
 
707
750
  return [lsock, rsock]
708
751
  end
@@ -943,6 +986,52 @@ protected
943
986
  # Ensure response types (depending on underlying library used) provide required methods
944
987
  return v4, v6
945
988
  end
989
+
990
+ def self.rex_getresources(name, typeclass, resolver: @@resolver)
991
+ raise ::SocketError.new(
992
+ "Rex::Socket internal DNS resolution requires passing/setting a resolver"
993
+ ) unless resolver
994
+ raise ::SocketError.new(
995
+ "Rex::Socket internal DNS resolution requires passing a String name to resolve"
996
+ ) unless name.is_a?(String)
997
+
998
+ typeclass = typeclass.upcase
999
+ attribute = REX_DNS_RESOURCE_ATTRIBUTE_NAMES[typeclass]
1000
+ if attribute.nil?
1001
+ raise ArgumentError, "Invalid typeclass: #{typeclass}"
1002
+ end
1003
+ const = ::Net::DNS.const_get(typeclass)
1004
+
1005
+ resources = begin
1006
+ resolver.send(name, const).answer.select do |a|
1007
+ a.type == const
1008
+ end.map(&attribute).map(&:to_s)
1009
+ rescue
1010
+ []
1011
+ end
1012
+
1013
+ resources
1014
+ end
1015
+
1016
+ DNS_RESOURCE_ATTRIBUTE_NAMES = {
1017
+ CNAME: :name,
1018
+ MX: :exchange,
1019
+ NS: :name,
1020
+ PTR: :name,
1021
+ SOA: :mname,
1022
+ SRV: :target
1023
+ }.freeze
1024
+ private_constant :DNS_RESOURCE_ATTRIBUTE_NAMES
1025
+
1026
+ REX_DNS_RESOURCE_ATTRIBUTE_NAMES = {
1027
+ CNAME: :domainname,
1028
+ MX: :exchange,
1029
+ NS: :domainname,
1030
+ PTR: :domainname,
1031
+ SOA: :mname,
1032
+ SRV: :target
1033
+ }.freeze
1034
+ private_constant :REX_DNS_RESOURCE_ATTRIBUTE_NAMES
946
1035
  end
947
1036
 
948
1037
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rex-socket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.53
4
+ version: 0.1.55
5
5
  platform: ruby
6
6
  authors:
7
7
  - Metasploit Hackers
@@ -10,90 +10,31 @@ bindir: exe
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
33
36
  -----END CERTIFICATE-----
34
- - |
35
- -----BEGIN CERTIFICATE-----
36
- MIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0BAQsFADBl
37
- MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
38
- d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
39
- b3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQswCQYDVQQG
40
- EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
41
- cnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29kZSBT
42
- aWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+NOzHH8O
43
- Ea9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ1DcZ17aq
44
- 8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0sSgmuyRp
45
- wsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6scKKrzn/p
46
- fMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4TzrGdOtcT3
47
- jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg0A9kczye
48
- n6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV
49
- HQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUHAQEEbTBr
50
- MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUH
51
- MAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJ
52
- RFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2lj
53
- ZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0dHA6
54
- Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmww
55
- TwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
56
- d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYEFFrEuXsq
57
- CqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgP
58
- MA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06GsTvMGHX
59
- fgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5jDhNLrddf
60
- RHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgCPC6Ro8Al
61
- EeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIysjaKJAL+
62
- L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4GbT8aTEAb8
63
- B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHv
64
- -----END CERTIFICATE-----
65
- - |
66
- -----BEGIN CERTIFICATE-----
67
- MIIFIzCCBAugAwIBAgIQCMePMbkSxvnPeJhYXIfaxzANBgkqhkiG9w0BAQsFADBy
68
- MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
69
- d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg
70
- SUQgQ29kZSBTaWduaW5nIENBMB4XDTIwMTAwNzAwMDAwMFoXDTIzMTEwNjEyMDAw
71
- MFowYDELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNV
72
- BAcTBkJvc3RvbjETMBEGA1UEChMKUmFwaWQ3IExMQzETMBEGA1UEAxMKUmFwaWQ3
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
- B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1oDOgMYYvaHR0cDov
82
- L2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1nMS5jcmwwNaAzoDGG
83
- L2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3Js
84
- MEwGA1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
85
- d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQBMIGEBggrBgEFBQcBAQR4MHYw
86
- JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBOBggrBgEFBQcw
87
- AoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkFzc3Vy
88
- ZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEL
89
- BQADggEBAN+GL5/myPWg7oH4mVrG7/OhXF1MoYQF0ddaNiqaweEHMuKJBQCVZRbL
90
- 37HojoKXXv2yyRJBCeTB+ojrxX+5PdLVZa0ss7toWzJ2A1poPXZ1eZvm5xeFD32z
91
- YQaTmmNWNI3PCDTyJ2PXUc+bDiNNwcZ7yc5o78UNRvp9Jxghya17Q76c9Ov9wvnv
92
- dxxQKWGOQy0m4fBrkyjAyH9Djjn81RbQrqYgPuhd5nD0HjN3VUQLhQbIJrk9TVs0
93
- EknWpNgVhohbot1lfVAMmIhdtOVaRVcQQixWPwprDj/ydB8ryDMDosIMcw+fkoXU
94
- 9GJsSaSRRYQ9UUkVL27b64okU8D48m8=
95
- -----END CERTIFICATE-----
96
- date: 2023-09-05 00:00:00.000000000 Z
37
+ date: 2023-12-05 00:00:00.000000000 Z
97
38
  dependencies:
98
39
  - !ruby/object:Gem::Dependency
99
40
  name: rake
@@ -157,6 +98,7 @@ files:
157
98
  - Rakefile
158
99
  - bin/console
159
100
  - bin/setup
101
+ - cortex.yaml
160
102
  - lib/rex/socket.rb
161
103
  - lib/rex/socket/comm.rb
162
104
  - lib/rex/socket/comm/local.rb
metadata.gz.sig CHANGED
Binary file