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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5f4f760504764961fc5ed63cf451342c21363dda09f7019b069b39b07f1f285
4
- data.tar.gz: ea12f744a8ece727434e35109a4bbc47432e758aa9a316ed5e6188e87782b44d
3
+ metadata.gz: 58620e2fc9231b199356c668368c0af0b2b74a9bd6f081eaa6a0332794afe42c
4
+ data.tar.gz: 027a30588c369ecc5ee419f3821b3d2cef9aff5c27ced47227aba3384adba1bd
5
5
  SHA512:
6
- metadata.gz: 2a6ee4074192640bd558b7b8bb01667f870e96f76ce7be977278eceeeb9898e209a20fb8ad629ec17d315848e2b36d94cf4efd775735e4a57f792120b17e1779
7
- data.tar.gz: 21fefdd3bad1ad544b33c7e02c9dfd1a27dbe2b2791c8a552e701ef403ad915d3c98cc39e42f9ae2219f71fa175310d917fbb1b2b0d3cd7fe2fed04fbf0d9a1d
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
- puts 'ddig: doh needs option of --doh-path=doh-path'
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
- raise Error.new("Not Supportted Protocol (protocol: #{@protocol}). Suported protocol is #{PROTOCOLS.join(' / ')}")
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
- @designated_resolvers << designated_resolver
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
- @designated_resolvers << designated_resolver
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
- @designated_resolvers << designated_resolver
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
- @designated_resolvers << designated_resolver
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
- @designated_resolvers << designated_resolver
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
- @designated_resolvers << designated_resolver
132
+
133
+ if designated_resolver.errors.count.zero?
134
+ @designated_resolvers << designated_resolver
135
+ end
118
136
  end
119
137
  end
120
138
  end
@@ -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:, port: 443)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ddig
4
- VERSION = "0.4.1"
4
+ VERSION = "0.4.3"
5
5
  end
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.1
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-01-23 00:00:00.000000000 Z
10
+ date: 2025-04-19 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: resolv