ronin-support 1.0.0.beta3 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +14 -0
- data/.rubocop.yml +109 -0
- data/ChangeLog.md +12 -1
- data/Gemfile +8 -4
- data/README.md +1 -1
- data/Rakefile +2 -2
- data/examples/ssl_proxy.rb +2 -1
- data/examples/tcp_proxy.rb +6 -4
- data/lib/ronin/support/archive/tar/writer.rb +2 -2
- data/lib/ronin/support/archive/tar.rb +4 -4
- data/lib/ronin/support/archive/zip/reader.rb +2 -2
- data/lib/ronin/support/binary/array.rb +4 -7
- data/lib/ronin/support/binary/bit_flip.rb +7 -1
- data/lib/ronin/support/binary/buffer.rb +22 -22
- data/lib/ronin/support/binary/byte_slice.rb +17 -17
- data/lib/ronin/support/binary/cstring.rb +7 -4
- data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +4 -0
- data/lib/ronin/support/binary/ctypes/arch/arm.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +4 -0
- data/lib/ronin/support/binary/ctypes/arch/arm64.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +4 -0
- data/lib/ronin/support/binary/ctypes/arch/mips.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +4 -0
- data/lib/ronin/support/binary/ctypes/arch/mips64.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/x86.rb +3 -0
- data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +3 -0
- data/lib/ronin/support/binary/ctypes/array_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/big_endian.rb +3 -0
- data/lib/ronin/support/binary/ctypes/enum_type.rb +2 -2
- data/lib/ronin/support/binary/ctypes/little_endian.rb +3 -0
- data/lib/ronin/support/binary/ctypes/native.rb +3 -0
- data/lib/ronin/support/binary/ctypes/scalar_type.rb +2 -2
- data/lib/ronin/support/binary/ctypes/struct_type.rb +3 -3
- data/lib/ronin/support/binary/ctypes/type_resolver.rb +7 -8
- data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +1 -1
- data/lib/ronin/support/binary/ctypes/union_type.rb +3 -3
- data/lib/ronin/support/binary/ctypes.rb +3 -3
- data/lib/ronin/support/binary/memory.rb +2 -2
- data/lib/ronin/support/binary/packet.rb +3 -0
- data/lib/ronin/support/binary/stack.rb +3 -4
- data/lib/ronin/support/binary/struct/member.rb +5 -3
- data/lib/ronin/support/binary/struct.rb +81 -79
- data/lib/ronin/support/binary/template.rb +1 -0
- data/lib/ronin/support/binary/unhexdump/parser.rb +11 -11
- data/lib/ronin/support/binary/union.rb +22 -22
- data/lib/ronin/support/cli/ansi.rb +0 -1
- data/lib/ronin/support/cli/io_shell/core_ext/io.rb +1 -1
- data/lib/ronin/support/cli/io_shell.rb +4 -4
- data/lib/ronin/support/cli/printing.rb +3 -3
- data/lib/ronin/support/compression/zlib.rb +1 -1
- data/lib/ronin/support/core_ext/enumerable.rb +0 -2
- data/lib/ronin/support/core_ext/file.rb +1 -1
- data/lib/ronin/support/core_ext/kernel.rb +6 -5
- data/lib/ronin/support/core_ext/string.rb +2 -2
- data/lib/ronin/support/crypto/cert.rb +11 -15
- data/lib/ronin/support/crypto/cert_chain.rb +1 -1
- data/lib/ronin/support/crypto/cipher/aes.rb +3 -0
- data/lib/ronin/support/crypto/cipher/aes128.rb +4 -1
- data/lib/ronin/support/crypto/cipher/aes256.rb +4 -1
- data/lib/ronin/support/crypto/cipher.rb +1 -1
- data/lib/ronin/support/crypto/core_ext/file.rb +1 -1
- data/lib/ronin/support/crypto/key/methods.rb +4 -1
- data/lib/ronin/support/crypto/key.rb +5 -2
- data/lib/ronin/support/crypto/openssl.rb +1 -1
- data/lib/ronin/support/crypto.rb +0 -1
- data/lib/ronin/support/encoding/base16.rb +1 -1
- data/lib/ronin/support/encoding/base32.rb +28 -17
- data/lib/ronin/support/encoding/c/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/c.rb +4 -4
- data/lib/ronin/support/encoding/hex.rb +2 -2
- data/lib/ronin/support/encoding/js/core_ext/integer.rb +1 -1
- data/lib/ronin/support/encoding/js.rb +4 -4
- data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +2 -2
- data/lib/ronin/support/encoding/powershell.rb +4 -5
- data/lib/ronin/support/encoding/ruby.rb +4 -4
- data/lib/ronin/support/encoding/shell/core_ext/integer.rb +2 -2
- data/lib/ronin/support/encoding/shell.rb +3 -3
- data/lib/ronin/support/encoding/sql.rb +1 -1
- data/lib/ronin/support/encoding/xml.rb +2 -2
- data/lib/ronin/support/encoding.rb +95 -0
- data/lib/ronin/support/network/asn/list.rb +6 -1
- data/lib/ronin/support/network/asn/record.rb +3 -0
- data/lib/ronin/support/network/asn/record_set.rb +3 -0
- data/lib/ronin/support/network/asn.rb +167 -6
- data/lib/ronin/support/network/dns/resolver.rb +3 -0
- data/lib/ronin/support/network/domain.rb +21 -21
- data/lib/ronin/support/network/email_address.rb +1 -5
- data/lib/ronin/support/network/esmtp/mixin.rb +1 -0
- data/lib/ronin/support/network/ftp/mixin.rb +1 -1
- data/lib/ronin/support/network/host.rb +75 -47
- data/lib/ronin/support/network/http/core_ext.rb +1 -1
- data/lib/ronin/support/network/http.rb +317 -80
- data/lib/ronin/support/network/ip.rb +8 -10
- data/lib/ronin/support/network/ip_range/cidr.rb +1 -5
- data/lib/ronin/support/network/ip_range/glob.rb +1 -0
- data/lib/ronin/support/network/ip_range/range.rb +1 -1
- data/lib/ronin/support/network/ip_range.rb +1 -3
- data/lib/ronin/support/network/proxy.rb +4 -4
- data/lib/ronin/support/network/public_suffix/list.rb +10 -8
- data/lib/ronin/support/network/public_suffix/suffix_set.rb +3 -0
- data/lib/ronin/support/network/public_suffix.rb +9 -4
- data/lib/ronin/support/network/smtp/email.rb +0 -9
- data/lib/ronin/support/network/smtp/mixin.rb +2 -2
- data/lib/ronin/support/network/ssl/local_cert.rb +1 -3
- data/lib/ronin/support/network/ssl/mixin.rb +13 -13
- data/lib/ronin/support/network/ssl/openssl.rb +1 -1
- data/lib/ronin/support/network/ssl/proxy.rb +14 -16
- data/lib/ronin/support/network/ssl.rb +4 -2
- data/lib/ronin/support/network/tcp/proxy.rb +3 -3
- data/lib/ronin/support/network/tcp.rb +10 -12
- data/lib/ronin/support/network/telnet/mixin.rb +14 -14
- data/lib/ronin/support/network/tld/list.rb +2 -1
- data/lib/ronin/support/network/tld.rb +7 -4
- data/lib/ronin/support/network/tls/proxy.rb +1 -1
- data/lib/ronin/support/network/tls.rb +0 -2
- data/lib/ronin/support/network/udp/proxy.rb +5 -5
- data/lib/ronin/support/network/udp.rb +14 -16
- data/lib/ronin/support/path.rb +3 -3
- data/lib/ronin/support/text/erb/mixin.rb +3 -0
- data/lib/ronin/support/text/homoglyph/table.rb +3 -3
- data/lib/ronin/support/text/patterns/credentials.rb +2 -2
- data/lib/ronin/support/text/patterns/crypto.rb +1 -1
- data/lib/ronin/support/text/patterns/file_system.rb +3 -4
- data/lib/ronin/support/text/patterns/network.rb +10 -10
- data/lib/ronin/support/text/patterns/numeric.rb +1 -1
- data/lib/ronin/support/text/patterns/source_code.rb +2 -2
- data/lib/ronin/support/text/random.rb +2 -2
- data/lib/ronin/support/text/typo/generator.rb +2 -2
- data/lib/ronin/support/version.rb +1 -1
- data/ronin-support.gemspec +6 -5
- metadata +3 -2
@@ -29,7 +29,7 @@ module Ronin
|
|
29
29
|
# Represents a host or host name.
|
30
30
|
#
|
31
31
|
# ## Examples
|
32
|
-
#
|
32
|
+
#
|
33
33
|
# host = Host.new('www.example.com')
|
34
34
|
#
|
35
35
|
# Resolve parent domain:
|
@@ -69,36 +69,36 @@ module Ronin
|
|
69
69
|
# # => [#<Resolv::DNS::Resource::IN::MX:0x00007f7e50035658 @exchange=#<Resolv::DNS::Name: aspmx.l.google.com.>, @preference=1, @ttl=3600>, ...]
|
70
70
|
# host.get_mailservers
|
71
71
|
# # => ["alt1.aspmx.l.google.com",
|
72
|
-
#
|
73
|
-
#
|
74
|
-
#
|
75
|
-
#
|
72
|
+
# # "alt4.aspmx.l.google.com",
|
73
|
+
# # "alt3.aspmx.l.google.com",
|
74
|
+
# # "alt2.aspmx.l.google.com",
|
75
|
+
# # "aspmx.l.google.com"]
|
76
76
|
# host.mailservers
|
77
77
|
# # => ["alt1.aspmx.l.google.com",
|
78
|
-
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
#
|
78
|
+
# # "alt4.aspmx.l.google.com",
|
79
|
+
# # "alt3.aspmx.l.google.com",
|
80
|
+
# # "alt2.aspmx.l.google.com",
|
81
|
+
# # "aspmx.l.google.com"]
|
82
82
|
# host.get_ns_records
|
83
83
|
# # => [#<Resolv::DNS::Resource::IN::NS:0x00007f7e4f972258 @name=#<Resolv::DNS::Name: dns1.p08.nsone.net.>, @ttl=900>, ...]
|
84
84
|
# host.get_nameservers
|
85
85
|
# # => ["dns3.p08.nsone.net",
|
86
|
-
#
|
87
|
-
#
|
88
|
-
#
|
89
|
-
#
|
90
|
-
#
|
91
|
-
#
|
92
|
-
#
|
86
|
+
# # "ns-1707.awsdns-21.co.uk",
|
87
|
+
# # "dns2.p08.nsone.net",
|
88
|
+
# # "ns-1283.awsdns-32.org",
|
89
|
+
# # "dns4.p08.nsone.net",
|
90
|
+
# # "ns-421.awsdns-52.com",
|
91
|
+
# # "dns1.p08.nsone.net",
|
92
|
+
# # "ns-520.awsdns-01.net"]
|
93
93
|
# host.nameservers
|
94
94
|
# # => ["dns3.p08.nsone.net",
|
95
|
-
#
|
96
|
-
#
|
97
|
-
#
|
98
|
-
#
|
99
|
-
#
|
100
|
-
#
|
101
|
-
#
|
95
|
+
# # "ns-1707.awsdns-21.co.uk",
|
96
|
+
# # "dns2.p08.nsone.net",
|
97
|
+
# # "ns-1283.awsdns-32.org",
|
98
|
+
# # "dns4.p08.nsone.net",
|
99
|
+
# # "ns-421.awsdns-52.com",
|
100
|
+
# # "dns1.p08.nsone.net",
|
101
|
+
# # "ns-520.awsdns-01.net"]
|
102
102
|
# host.get_soa_record
|
103
103
|
# # => #<Resolv::DNS::Resource::IN::SOA:0x00007f7e4f63d0b0 @mname=#<Resolv::DNS::Name: ns-1707.awsdns-21.co.uk.>, @rname=#<Resolv::DNS::Name: awsdns-hostmaster.amazon.com.>, @serial=1, @refresh=7200, @retry=900, @expire=1209600, @minimum=86400, @ttl=880>
|
104
104
|
# host.soa_record
|
@@ -111,28 +111,28 @@ module Ronin
|
|
111
111
|
# # => [#<Resolv::DNS::Resource::IN::TXT:0x00007f7e4f67c648 @strings=[\"apple-domain-verification=RyQhdzTl6Z6x8ZP4\"], @ttl=2852>, ...]
|
112
112
|
# host.get_txt_strings
|
113
113
|
# # => ["apple-domain-verification=RyQhdzTl6Z6x8ZP4",
|
114
|
-
#
|
115
|
-
#
|
116
|
-
#
|
117
|
-
#
|
118
|
-
#
|
119
|
-
#
|
120
|
-
#
|
121
|
-
#
|
122
|
-
#
|
123
|
-
#
|
114
|
+
# # "MS=ms58704441",
|
115
|
+
# # "atlassian-domain-verification=jjgw98AKv2aeoYFxiL/VFaoyPkn3undEssTRuMg6C/3Fp/iqhkV4HVV7WjYlVeF8",
|
116
|
+
# # "MS=6BF03E6AF5CB689E315FB6199603BABF2C88D805",
|
117
|
+
# # "v=spf1 ip4:192.30.252.0/22 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com include:spf.protection.outlook.com include:mail.zendesk.com include:_spf.salesforce.com include:servers.mcsv.net ip4:166.78.69.169 ip4:1",
|
118
|
+
# # "66.78.69.170 ip4:166.78.71.131 ip4:167.89.101.2 ip4:167.89.101.192/28 ip4:192.254.112.60 ip4:192.254.112.98/31 ip4:192.254.113.10 ip4:192.254.113.101 ip4:192.254.114.176 ip4:62.253.227.114 ~all",
|
119
|
+
# # "docusign=087098e3-3d46-47b7-9b4e-8a23028154cd",
|
120
|
+
# # "google-site-verification=UTM-3akMgubp6tQtgEuAkYNYLyYAvpTnnSrDMWoDR3o",
|
121
|
+
# # "stripe-verification=f88ef17321660a01bab1660454192e014defa29ba7b8de9633c69d6b4912217f",
|
122
|
+
# # "adobe-idp-site-verification=b92c9e999aef825edc36e0a3d847d2dbad5b2fc0e05c79ddd7a16139b48ecf4b",
|
123
|
+
# # "MS=ms44452932"]
|
124
124
|
# host.txt_strings
|
125
125
|
# # => ["apple-domain-verification=RyQhdzTl6Z6x8ZP4",
|
126
|
-
#
|
127
|
-
#
|
128
|
-
#
|
129
|
-
#
|
130
|
-
#
|
131
|
-
#
|
132
|
-
#
|
133
|
-
#
|
134
|
-
#
|
135
|
-
#
|
126
|
+
# # "MS=ms58704441",
|
127
|
+
# # "atlassian-domain-verification=jjgw98AKv2aeoYFxiL/VFaoyPkn3undEssTRuMg6C/3Fp/iqhkV4HVV7WjYlVeF8",
|
128
|
+
# # "MS=6BF03E6AF5CB689E315FB6199603BABF2C88D805",
|
129
|
+
# # "v=spf1 ip4:192.30.252.0/22 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com include:spf.protection.outlook.com include:mail.zendesk.com include:_spf.salesforce.com include:servers.mcsv.net ip4:166.78.69.169 ip4:1",
|
130
|
+
# # "66.78.69.170 ip4:166.78.71.131 ip4:167.89.101.2 ip4:167.89.101.192/28 ip4:192.254.112.60 ip4:192.254.112.98/31 ip4:192.254.113.10 ip4:192.254.113.101 ip4:192.254.114.176 ip4:62.253.227.114 ~all",
|
131
|
+
# # "docusign=087098e3-3d46-47b7-9b4e-8a23028154cd",
|
132
|
+
# # "google-site-verification=UTM-3akMgubp6tQtgEuAkYNYLyYAvpTnnSrDMWoDR3o",
|
133
|
+
# # "stripe-verification=f88ef17321660a01bab1660454192e014defa29ba7b8de9633c69d6b4912217f",
|
134
|
+
# # "adobe-idp-site-verification=b92c9e999aef825edc36e0a3d847d2dbad5b2fc0e05c79ddd7a16139b48ecf4b",
|
135
|
+
# # "MS=ms44452932"]
|
136
136
|
#
|
137
137
|
# @api public
|
138
138
|
#
|
@@ -165,6 +165,11 @@ module Ronin
|
|
165
165
|
#
|
166
166
|
# @return [Boolean]
|
167
167
|
#
|
168
|
+
# @example
|
169
|
+
# host = Network::Host.new("www.詹姆斯.com')
|
170
|
+
# host.idn?
|
171
|
+
# # => true
|
172
|
+
#
|
168
173
|
def idn?
|
169
174
|
@name !~ /\A[A-Za-z0-9._-]+\z/
|
170
175
|
end
|
@@ -178,6 +183,11 @@ module Ronin
|
|
178
183
|
#
|
179
184
|
# @return [Boolean]
|
180
185
|
#
|
186
|
+
# @example
|
187
|
+
# host = Network::Host.new("www.xn--8ws00zhy3a.com")
|
188
|
+
# host.punycode?
|
189
|
+
# # => true
|
190
|
+
#
|
181
191
|
def punycode?
|
182
192
|
@name.include?('xn--')
|
183
193
|
end
|
@@ -190,6 +200,11 @@ module Ronin
|
|
190
200
|
# @return [Host]
|
191
201
|
# The new host containing the punycode version of the hostname.
|
192
202
|
#
|
203
|
+
# @example
|
204
|
+
# host = Network::Host.new("www.詹姆斯.com")
|
205
|
+
# host.punycode
|
206
|
+
# # => #<Ronin::Support::Network::Host: www.xn--8ws00zhy3a.com>
|
207
|
+
#
|
193
208
|
def punycode
|
194
209
|
self.class.new(DNS::IDN.to_ascii(@name))
|
195
210
|
end
|
@@ -252,7 +267,7 @@ module Ronin
|
|
252
267
|
domain, suffix = PublicSuffix.list.split(@name)
|
253
268
|
|
254
269
|
if (last_dot = domain.rindex('.'))
|
255
|
-
domain = domain[(last_dot+1)..]
|
270
|
+
domain = domain[(last_dot + 1)..]
|
256
271
|
end
|
257
272
|
|
258
273
|
Domain.new("#{domain}.#{suffix}")
|
@@ -268,6 +283,11 @@ module Ronin
|
|
268
283
|
# @return [Host]
|
269
284
|
# The new sub-domain.
|
270
285
|
#
|
286
|
+
# @example
|
287
|
+
# host = Network::Host.new('example.com')
|
288
|
+
# host.subdomain('www')
|
289
|
+
# # => #<Ronin::Support::Network::Host: www.example.com>
|
290
|
+
#
|
271
291
|
def subdomain(subname)
|
272
292
|
Host.new("#{subname}.#{@name}")
|
273
293
|
end
|
@@ -290,8 +310,8 @@ module Ronin
|
|
290
310
|
# # => #<Ronin::Support::Network::Host: www.example.com>
|
291
311
|
#
|
292
312
|
def change_suffix(new_suffix)
|
293
|
-
name,
|
294
|
-
new_suffix
|
313
|
+
name, _suffix = PublicSuffix.list.split(@name)
|
314
|
+
new_suffix = new_suffix.to_s
|
295
315
|
|
296
316
|
if new_suffix.start_with?('.')
|
297
317
|
return self.class.new("#{name}#{new_suffix}")
|
@@ -345,7 +365,7 @@ module Ronin
|
|
345
365
|
|
346
366
|
PublicSuffix.list.each do |suffix|
|
347
367
|
unless suffix.wildcard?
|
348
|
-
if
|
368
|
+
if type.nil? || (suffix.type == type)
|
349
369
|
yield change_suffix(suffix)
|
350
370
|
end
|
351
371
|
end
|
@@ -1416,6 +1436,14 @@ module Ronin
|
|
1416
1436
|
#
|
1417
1437
|
# @note This method will query `8.8.8.8` which supports `ANY` queries.
|
1418
1438
|
#
|
1439
|
+
# @example
|
1440
|
+
# host = Network::Host.new('www.example.com')
|
1441
|
+
# host.registered?
|
1442
|
+
# # => true
|
1443
|
+
# bad_host = Network::Host.new('foo.example.com')
|
1444
|
+
# bad_host.registered?
|
1445
|
+
# # => false
|
1446
|
+
#
|
1419
1447
|
def registered?
|
1420
1448
|
!get_any_records(nameserver: '8.8.8.8').empty?
|
1421
1449
|
end
|