ddig 0.4.1 → 0.4.3
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
- data/lib/ddig/cli.rb +2 -3
- data/lib/ddig/ddr/designated_resolver.rb +19 -2
- data/lib/ddig/ddr.rb +24 -6
- data/lib/ddig/resolver/doh_h1.rb +1 -1
- data/lib/ddig/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 58620e2fc9231b199356c668368c0af0b2b74a9bd6f081eaa6a0332794afe42c
|
4
|
+
data.tar.gz: 027a30588c369ecc5ee419f3821b3d2cef9aff5c27ced47227aba3384adba1bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58c9a6c611f8b68461d0bbfdd5d41f8ea9a3cd5ddf3d748c531f0e4c287b4bee2030ad977b9c4cc5b980011db6cf44efb85a63cbbb978435bed9890d36073dda
|
7
|
+
data.tar.gz: ae0f8a828569c64d6d7faefea81d7ab633a1691a8011a4d12e575c3e963d7fc1431c21e3bebdf18a3d8f01f808836011cf8b7444c91a437117da39f13cb2636b
|
data/lib/ddig/cli.rb
CHANGED
@@ -27,7 +27,7 @@ module Ddig
|
|
27
27
|
opts.on("--udp", "use resolve type of udp(do53)") { |v| @options[:dns_type] = 'do53' }
|
28
28
|
opts.on("--dot", "use resolve type of dot") { |v| @options[:dns_type] = 'dot' }
|
29
29
|
opts.on("--doh-h1", "use resolve type of doh (http/1.1)") { |v| @options[:dns_type] = 'doh_h1' }
|
30
|
-
opts.on("--doh-path=doh-path", "doh service path") { |v| @options[:doh_path] = v }
|
30
|
+
opts.on("--doh-path=doh-path", "doh service path (default: /dns-query{?dns})") { |v| @options[:doh_path] = v }
|
31
31
|
opts.on("--ddr", "discover designated resolvers via ddr (discovery of designated resolvers)") { |v| @options[:ddr] = v }
|
32
32
|
opts.on("-4", "--ipv4", "use IPv4 query transport only") { |v| @options[:ipv4] = v }
|
33
33
|
opts.on("-6", "--ipv6", "use IPv6 query transport only") { |v| @options[:ipv6] = v }
|
@@ -132,8 +132,7 @@ module Ddig
|
|
132
132
|
|
133
133
|
def resolve_doh_h1
|
134
134
|
if @options[:nameserver].nil? || @options[:doh_path].nil?
|
135
|
-
|
136
|
-
exit
|
135
|
+
@options[:doh_path] = '/dns-query{?dns}'
|
137
136
|
end
|
138
137
|
|
139
138
|
doh = Ddig::Resolver::DohH1.new(hostname: @hostname, server: @options[:nameserver], dohpath: @options[:doh_path], port: @options[:port]).lookup
|
@@ -8,6 +8,13 @@ module Ddig
|
|
8
8
|
attr_reader :hostname, :a, :aaaa, :resolver, :errors
|
9
9
|
|
10
10
|
PROTOCOLS = ['http/1.1', 'h2', 'h3', 'dot', 'doq']
|
11
|
+
# Reserved ALPN
|
12
|
+
# https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids
|
13
|
+
IGNORE_PROTOCOLS = [
|
14
|
+
"\u001A\u001A", "\u002A\u002A", "\u003A\u003A", "\u004A\u004A", "\u005A\u005A",
|
15
|
+
"\u006A\u006A", "\u007A\u007A", "\u008A\u008A", "\u009A\u009A", "\u00AA\u00AA",
|
16
|
+
"\u00BA\u00BA", "\u00CA\u00CA", "\u00DA\u00DA", "\u00EA\u00EA", "\u00FA\u00FA"
|
17
|
+
] # '**', '::', 'JJ', 'ZZ', 'jj', 'zz'
|
11
18
|
|
12
19
|
def initialize(unencrypted_resolver:, target:, protocol: nil, port: nil, dohpath: nil, address: nil, ip: nil)
|
13
20
|
@target = target
|
@@ -17,10 +24,16 @@ module Ddig
|
|
17
24
|
@dohpath = dohpath
|
18
25
|
@address = address
|
19
26
|
@ip = ip
|
27
|
+
@errors = []
|
20
28
|
|
21
29
|
# check protocol
|
22
30
|
unless PROTOCOLS.include?(@protocol)
|
23
|
-
|
31
|
+
if IGNORE_PROTOCOLS.include?(@protocol)
|
32
|
+
@errors << "Skip the protocol (protocol: #{@protocol}), as it is a reserved value in ALPN."
|
33
|
+
else
|
34
|
+
@errors << "Not Supportted Protocol (protocol: #{@protocol}). Suported protocol is #{PROTOCOLS.join(' / ')}"
|
35
|
+
puts "#{@errors.join('\n')}"
|
36
|
+
end
|
24
37
|
end
|
25
38
|
|
26
39
|
if @port.nil?
|
@@ -35,7 +48,6 @@ module Ddig
|
|
35
48
|
|
36
49
|
def lookup(hostname)
|
37
50
|
@hostname = hostname
|
38
|
-
@errors = []
|
39
51
|
|
40
52
|
case @protocol
|
41
53
|
when 'dot'
|
@@ -85,6 +97,11 @@ module Ddig
|
|
85
97
|
end
|
86
98
|
|
87
99
|
def to_cli
|
100
|
+
if @resolver.nil?
|
101
|
+
puts "# #{@errors.join('\n# ')}"
|
102
|
+
return
|
103
|
+
end
|
104
|
+
|
88
105
|
@resolver.to_cli
|
89
106
|
end
|
90
107
|
|
data/lib/ddig/ddr.rb
CHANGED
@@ -73,13 +73,19 @@ module Ddig
|
|
73
73
|
unless do53_v4.nil? || do53_v4.a.nil?
|
74
74
|
do53_v4.a.each do |address|
|
75
75
|
designated_resolver = ::Ddig::Ddr::DesignatedResolver.new(unencrypted_resolver: unencrypted_resolver, target: target, protocol: protocol, port: port, dohpath: dohpath, address: address.to_s, ip: :ipv4)
|
76
|
-
|
76
|
+
|
77
|
+
if designated_resolver.errors.count.zero?
|
78
|
+
@designated_resolvers << designated_resolver
|
79
|
+
end
|
77
80
|
end
|
78
81
|
end
|
79
82
|
unless do53_v6.nil? || do53_v6.a.nil?
|
80
83
|
do53_v6.a.each do |address|
|
81
84
|
designated_resolver = ::Ddig::Ddr::DesignatedResolver.new(unencrypted_resolver: unencrypted_resolver, target: target, protocol: protocol, port: port, dohpath: dohpath, address: address.to_s, ip: :ipv4)
|
82
|
-
|
85
|
+
|
86
|
+
if designated_resolver.errors.count.zero?
|
87
|
+
@designated_resolvers << designated_resolver
|
88
|
+
end
|
83
89
|
end
|
84
90
|
end
|
85
91
|
end
|
@@ -89,13 +95,19 @@ module Ddig
|
|
89
95
|
unless do53_v4.nil? || do53_v4.aaaa.nil?
|
90
96
|
do53_v4.aaaa.each do |address|
|
91
97
|
designated_resolver = ::Ddig::Ddr::DesignatedResolver.new(unencrypted_resolver: unencrypted_resolver, target: target, protocol: protocol, port: port, dohpath: dohpath, address: address.to_s, ip: :ipv6)
|
92
|
-
|
98
|
+
|
99
|
+
if designated_resolver.errors.count.zero?
|
100
|
+
@designated_resolvers << designated_resolver
|
101
|
+
end
|
93
102
|
end
|
94
103
|
end
|
95
104
|
unless do53_v6.nil? || do53_v6.aaaa.nil?
|
96
105
|
do53_v6.aaaa.each do |address|
|
97
106
|
designated_resolver = ::Ddig::Ddr::DesignatedResolver.new(unencrypted_resolver: unencrypted_resolver, target: target, protocol: protocol, port: port, dohpath: dohpath, address: address.to_s, ip: :ipv6)
|
98
|
-
|
107
|
+
|
108
|
+
if designated_resolver.errors.count.zero?
|
109
|
+
@designated_resolvers << designated_resolver
|
110
|
+
end
|
99
111
|
end
|
100
112
|
end
|
101
113
|
end
|
@@ -105,7 +117,10 @@ module Ddig
|
|
105
117
|
ipv4hint.each do |address|
|
106
118
|
ip = :ipv4
|
107
119
|
designated_resolver = ::Ddig::Ddr::DesignatedResolver.new(unencrypted_resolver: unencrypted_resolver, target: target, protocol: protocol, port: port, dohpath: dohpath, address: address.to_s, ip: ip)
|
108
|
-
|
120
|
+
|
121
|
+
if designated_resolver.errors.count.zero?
|
122
|
+
@designated_resolvers << designated_resolver
|
123
|
+
end
|
109
124
|
end
|
110
125
|
end
|
111
126
|
|
@@ -114,7 +129,10 @@ module Ddig
|
|
114
129
|
ipv6hint.each do |address|
|
115
130
|
ip = :ipv6
|
116
131
|
designated_resolver = ::Ddig::Ddr::DesignatedResolver.new(unencrypted_resolver: unencrypted_resolver, target: target, protocol: protocol, port: port, dohpath: dohpath, address: address.to_s, ip: ip)
|
117
|
-
|
132
|
+
|
133
|
+
if designated_resolver.errors.count.zero?
|
134
|
+
@designated_resolvers << designated_resolver
|
135
|
+
end
|
118
136
|
end
|
119
137
|
end
|
120
138
|
end
|
data/lib/ddig/resolver/doh_h1.rb
CHANGED
@@ -12,7 +12,7 @@ module Ddig
|
|
12
12
|
attr_reader :hostname, :server, :address, :dohpath, :port
|
13
13
|
attr_reader :a, :aaaa
|
14
14
|
|
15
|
-
def initialize(hostname:, server:, address: nil, dohpath
|
15
|
+
def initialize(hostname:, server:, address: nil, dohpath: '/dns-query{?dns}', port: 443)
|
16
16
|
@hostname = hostname
|
17
17
|
@server = server
|
18
18
|
@address = address
|
data/lib/ddig/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ddig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taketo Takashima
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-04-19 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: resolv
|