ddig 0.4.3 → 0.5.0

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: 58620e2fc9231b199356c668368c0af0b2b74a9bd6f081eaa6a0332794afe42c
4
- data.tar.gz: 027a30588c369ecc5ee419f3821b3d2cef9aff5c27ced47227aba3384adba1bd
3
+ metadata.gz: 436345c126c2da37eec4a4b3e53ffa6fb951b8f843194b20f4c58d2fdded7932
4
+ data.tar.gz: '092f974b175b6086e4affec4b2df6a59231abcac1e7c78ea2c6a0894fa291d1d'
5
5
  SHA512:
6
- metadata.gz: 58c9a6c611f8b68461d0bbfdd5d41f8ea9a3cd5ddf3d748c531f0e4c287b4bee2030ad977b9c4cc5b980011db6cf44efb85a63cbbb978435bed9890d36073dda
7
- data.tar.gz: ae0f8a828569c64d6d7faefea81d7ab633a1691a8011a4d12e575c3e963d7fc1431c21e3bebdf18a3d8f01f808836011cf8b7444c91a437117da39f13cb2636b
6
+ metadata.gz: e68d13faf8b03d62f4da5b6995e8dff1ae21205569af2dfb8c3a4553f7c699ed3b6dd188c412d80785be57c5f75ffc7f0f1aba319492d464a52cdfcfa3f85570
7
+ data.tar.gz: 2e00a96f37828eabbd75ba22e18ab6f15b3ef0023d03b52b363fadc48922a96e3d16495bb059d8945b96e550756fa54b0a0ee7c5c49281a125720e39d0d400ef
data/README.md CHANGED
@@ -34,9 +34,9 @@ If bundler is not being used to manage dependencies, install the gem by executin
34
34
  ddig = Ddig.lookup('dns.google', nameservers: ['8.8.8.8', '2001:4860:4860::8888'])
35
35
 
36
36
  ddig[:do53][:ipv4]
37
- => #<Ddig::Resolver::Do53:0x00000001207aaeb0 @a=["8.8.4.4", "8.8.8.8"], @aaaa=["2001:4860:4860::8844", "2001:4860:4860::8888"], @hostname="dns.google", @ip=:ipv4, @nameservers=["8.8.8.8"]>
37
+ => #<Ddig::Resolver::Do53:0x00000001207aaeb0 @a=["8.8.4.4", "8.8.8.8"], @a_response_time=18, @aaaa=["2001:4860:4860::8844", "2001:4860:4860::8888"], @aaaa_response_time=16, @hostname="dns.google", @ip=:ipv4, @nameservers=["8.8.8.8"]>
38
38
  ddig[:do53][:ipv6]
39
- => #<Ddig::Resolver::Do53:0x000000012073d2c0 @a=["8.8.4.4", "8.8.8.8"], @aaaa=["2001:4860:4860::8844", "2001:4860:4860::8888"], @hostname="dns.google", @ip=:ipv4, @nameservers=["2001:4860:4860::8888"]>
39
+ => #<Ddig::Resolver::Do53:0x000000012073d2c0 @a=["8.8.4.4", "8.8.8.8"], @a_response_time=18, @aaaa=["2001:4860:4860::8844", "2001:4860:4860::8888"], @aaaa_response_time=16, @hostname="dns.google", @ip=:ipv4, @nameservers=["2001:4860:4860::8888"]>
40
40
 
41
41
  ddig[:ddr]
42
42
  => [#<Ddig::Ddr::DesignatedResolver:0x0000000120735480
@@ -90,7 +90,7 @@ ddig[:ddr]
90
90
  - Do53
91
91
  ```ruby
92
92
  do53 = Ddig::Resolver::Do53.new(hostname: 'dns.google', nameservers: '8.8.8.8').lookup
93
- => #<Ddig::Resolver::Do53:0x0000000121717b78 @a=["8.8.8.8", "8.8.4.4"], @aaaa=["2001:4860:4860::8844", "2001:4860:4860::8888"], @hostname="dns.google", @ip=nil, @nameserver=#<Ddig::Nameserver:0x00000001211fb108 @nameservers="8.8.8.8", @servers=["8.8.8.8"]>, @nameservers=["8.8.8.8"]>
93
+ => #<Ddig::Resolver::Do53:0x0000000121717b78 @a=["8.8.8.8", "8.8.4.4"], @a_response_time=18, @aaaa=["2001:4860:4860::8844", "2001:4860:4860::8888"], @aaaa_response_time=16, @hostname="dns.google", @ip=nil, @nameserver=#<Ddig::Nameserver:0x00000001211fb108 @nameservers="8.8.8.8", @servers=["8.8.8.8"]>, @nameservers=["8.8.8.8"]>
94
94
 
95
95
  do53.a
96
96
  => ["8.8.4.4", "8.8.8.8"]
@@ -101,7 +101,7 @@ do53.aaaa
101
101
  - DoT
102
102
  ```ruby
103
103
  dot = Ddig::Resolver::Dot.new(hostname: 'dns.google', server: '8.8.8.8').lookup
104
- => #<Ddig::Resolver::Dot:0x000000012145da90 @a=["8.8.8.8", "8.8.4.4"], @aaaa=["2001:4860:4860::8844", "2001:4860:4860::8888"], @hostname="dns.google", @open_timeout=3, @port=853, @server="8.8.8.8", @server_name=nil>
104
+ => #<Ddig::Resolver::Dot:0x000000012145da90 @a=["8.8.8.8", "8.8.4.4"], @a_response_time=108, @aaaa=["2001:4860:4860::8844", "2001:4860:4860::8888"], @aaaa_response_time=122, @hostname="dns.google", @open_timeout=3, @port=853, @server="8.8.8.8", @server_name=nil>
105
105
 
106
106
  dot.a
107
107
  => ["8.8.4.4", "8.8.8.8"]
@@ -112,7 +112,7 @@ dot.aaaa
112
112
  - DoH (HTTP/1.1)
113
113
  ```ruby
114
114
  doh = Ddig::Resolver::DohH1.new(hostname: 'dns.google', server: 'dns.google', dohpath: '/dns-query{?dns}').lookup
115
- => #<Ddig::Resolver::DohH1:0x00000001023ed020 @a=["8.8.4.4", "8.8.8.8"], @aaaa=["2001:4860:4860::8888", "2001:4860:4860::8844"], @address=nil, @dohpath="/dns-query{?dns}", @hostname="dns.google", @open_timeout=10, @port=443, @server="dns.google">
115
+ => #<Ddig::Resolver::DohH1:0x00000001023ed020 @a=["8.8.4.4", "8.8.8.8"], @a_response_time=62, @aaaa=["2001:4860:4860::8888", "2001:4860:4860::8844"], @aaaa_response_time=77, @address=nil, @dohpath="/dns-query{?dns}", @hostname="dns.google", @open_timeout=10, @port=443, @server="dns.google">
116
116
 
117
117
  doh.a
118
118
  => ["8.8.4.4", "8.8.8.8"]
@@ -151,6 +151,8 @@ dns.google A 8.8.8.8
151
151
  dns.google AAAA 2001:4860:4860::8844
152
152
  dns.google AAAA 2001:4860:4860::8888
153
153
 
154
+ # Query time (A): 15 msec
155
+ # Query time (AAAA): 15 msec
154
156
  # SERVER: 8.8.8.8
155
157
 
156
158
  # DDR
@@ -160,6 +162,8 @@ dns.google A 8.8.8.8
160
162
  dns.google AAAA 2001:4860:4860::8844
161
163
  dns.google AAAA 2001:4860:4860::8888
162
164
 
165
+ # Query time (A): 114 msec
166
+ # Query time (AAAA): 187 msec
163
167
  # SERVER(Address): 8.8.4.4
164
168
  # PORT: 853
165
169
 
@@ -174,6 +178,8 @@ dns.google A 8.8.4.4
174
178
  dns.google AAAA 2001:4860:4860::8844
175
179
  dns.google AAAA 2001:4860:4860::8888
176
180
 
181
+ # Query time (A): 89 msec
182
+ # Query time (AAAA): 105 msec
177
183
  # SERVER(Hostname): 2001:4860:4860::8888
178
184
  # SERVER(Path): /dns-query{?dns}
179
185
  # PORT: 443
@@ -188,6 +194,8 @@ dns.google A 8.8.4.4
188
194
  dns.google AAAA 2001:4860:4860::8844
189
195
  dns.google AAAA 2001:4860:4860::8888
190
196
 
197
+ # Query time (A): 20 msec
198
+ # Query time (AAAA): 16 msec
191
199
  # SERVER: 8.8.8.8
192
200
  ```
193
201
 
@@ -199,6 +207,8 @@ dns.google A 8.8.4.4
199
207
  dns.google AAAA 2001:4860:4860::8888
200
208
  dns.google AAAA 2001:4860:4860::8844
201
209
 
210
+ # Query time (A): 90 msec
211
+ # Query time (AAAA): 167 msec
202
212
  # SERVER(Address): 8.8.8.8
203
213
  # PORT: 853
204
214
  ```
@@ -211,6 +221,8 @@ dns.google A 8.8.4.4
211
221
  dns.google AAAA 2001:4860:4860::8888
212
222
  dns.google AAAA 2001:4860:4860::8844
213
223
 
224
+ # Query time (A): 69 msec
225
+ # Query time (AAAA): 70 msec
214
226
  # SERVER(Hostname): dns.google
215
227
  # SERVER(Path): /dns-query{?dns}
216
228
  # PORT: 443
data/exe/ddig CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "ddig/cli"
4
5
 
data/lib/ddig/cli.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "optparse"
2
4
 
3
5
  require "ddig"
@@ -56,6 +58,15 @@ module Ddig
56
58
  return false
57
59
  end
58
60
 
61
+ if @options[:nameserver].nil?
62
+ if @options[:dns_type] == "dot" || @options[:dns_type] == "doh_h1"
63
+ puts "Error: nameserver is required with dns_type: #{@options[:dns_type]}"
64
+ puts
65
+
66
+ return false
67
+ end
68
+ end
69
+
59
70
  return true
60
71
  end
61
72
 
@@ -116,35 +127,47 @@ module Ddig
116
127
  ip = Ddig::Ip.new(use_ipv4: @use_ipv4, use_ipv6: @use_ipv6)
117
128
  do53 = Ddig::Resolver::Do53.new(hostname: @hostname, nameservers: @options[:nameserver], ip: ip.ip_type).lookup
118
129
 
119
- if do53.nil?
120
- puts "Error: Could not lookup wit nameserver: #{@options[:nameserver]}"
121
- exit
130
+ if @options[:format] == 'json'
131
+ puts do53.to_json
132
+ else
133
+ do53.to_cli
122
134
  end
123
-
124
- do53.to_cli
125
135
  end
126
136
 
127
137
  def resolve_dot
128
138
  dot = Ddig::Resolver::Dot.new(hostname: @hostname, server: @options[:nameserver], port: @options[:port]).lookup
129
139
 
130
- dot.to_cli
140
+ if @options[:format] == 'json'
141
+ puts dot.to_json
142
+ else
143
+ dot.to_cli
144
+ end
131
145
  end
132
146
 
133
147
  def resolve_doh_h1
134
- if @options[:nameserver].nil? || @options[:doh_path].nil?
148
+ # set default doh_path
149
+ if @options[:doh_path].nil?
135
150
  @options[:doh_path] = '/dns-query{?dns}'
136
151
  end
137
152
 
138
153
  doh = Ddig::Resolver::DohH1.new(hostname: @hostname, server: @options[:nameserver], dohpath: @options[:doh_path], port: @options[:port]).lookup
139
154
 
140
- doh.to_cli
155
+ if @options[:format] == 'json'
156
+ puts dot.to_json
157
+ else
158
+ doh.to_cli
159
+ end
141
160
  end
142
161
 
143
162
  def resolve_ddr
144
163
  ip = Ddig::Ip.new(use_ipv4: @use_ipv4, use_ipv6: @use_ipv6)
145
164
  ddr = Ddig::Ddr.new(nameservers: @options[:nameserver], ip: ip.ip_type)
146
165
 
147
- ddr.to_cli
166
+ if @options[:format] == 'json'
167
+ puts ddr.to_json
168
+ else
169
+ ddr.to_cli
170
+ end
148
171
  end
149
172
  end
150
173
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
 
3
5
  module Ddig
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "openssl"
2
4
  require 'net/protocol'
3
5
 
data/lib/ddig/ddr.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'resolv'
2
4
  require 'json'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'resolv'
2
4
 
3
5
  module Ddig
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'resolv'
2
4
 
3
5
  module Ddig
@@ -0,0 +1,41 @@
1
+ require 'resolv'
2
+
3
+ module Ddig
4
+ module Resolver
5
+ class DnsResourceHttps
6
+ attr_reader :priority, :target, :alpn, :port, :ipv4hint, :ipv6hint
7
+
8
+ def self.build(resources)
9
+ resources
10
+ .select { |resource| resource.is_a?(Resolv::DNS::Resource::IN::HTTPS) }
11
+ .map { |resource| new(resource) }
12
+ .sort_by { |https| https.priority }
13
+ end
14
+
15
+ def initialize(resource)
16
+ @priority = resource.priority
17
+ @target = resource.target != Resolv::DNS::Name.create(".") ? resource.target.to_s : "."
18
+
19
+ @alpn = resource.params[:alpn]&.protocol_ids
20
+ @port = resource.params[:port]&.port
21
+ @ipv4hint = resource.params[:ipv4hint]&.addresses&.map(&:to_s)
22
+ @ipv6hint = resource.params[:ipv6hint]&.addresses&.map(&:to_s)
23
+ end
24
+
25
+ def as_json(*)
26
+ {
27
+ priority: @priority,
28
+ target: @target,
29
+ alpn: @alpn,
30
+ port: @port,
31
+ ipv4hint: @ipv4hint,
32
+ ipv6hint: @ipv6hint,
33
+ }
34
+ end
35
+
36
+ def to_json(*args)
37
+ as_json.to_json
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,12 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'resolv'
2
4
  require 'json'
3
5
 
6
+ require_relative 'dns_resource_https'
7
+
4
8
  module Ddig
5
9
  module Resolver
6
10
  # DNS Resolver of UDP/53
7
11
  class Do53
8
12
  attr_reader :hostname, :nameservers, :ip
9
- attr_reader :a, :aaaa
13
+ attr_reader :a, :aaaa, :https
14
+ attr_reader :a_response_time, :aaaa_response_time
10
15
 
11
16
  def initialize(hostname:, nameservers: nil, ip: nil)
12
17
  @hostname = hostname
@@ -21,15 +26,24 @@ module Ddig
21
26
  return nil
22
27
  end
23
28
 
29
+ a_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
24
30
  @a = Resolv::DNS.open(nameserver: @nameservers) do |dns|
25
31
  ress = dns.getresources(@hostname, Resolv::DNS::Resource::IN::A)
26
32
  ress.map { |resource| resource.address.to_s }
27
33
  end
34
+ @a_response_time = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - a_start) * 1000).round
28
35
 
36
+ aaaa_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
29
37
  @aaaa = Resolv::DNS.open(nameserver: @nameservers) do |dns|
30
38
  ress = dns.getresources(@hostname, Resolv::DNS::Resource::IN::AAAA)
31
39
  ress.map { |resource| resource.address.to_s }
32
40
  end
41
+ @aaaa_response_time = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - aaaa_start) * 1000).round
42
+
43
+ @https = Resolv::DNS.open(nameserver: @nameservers) do |dns|
44
+ ress = dns.getresources(@hostname, Resolv::DNS::Resource::IN::HTTPS)
45
+ DnsResourceHttps.build(ress)
46
+ end
33
47
 
34
48
  self
35
49
  end
@@ -38,9 +52,12 @@ module Ddig
38
52
  {
39
53
  a: @a,
40
54
  aaaa: @aaaa,
55
+ https: @https.map { |dns_resource_https| dns_resource_https.as_json },
41
56
  hostname: @hostname,
42
57
  nameservers: @nameservers,
43
58
  ip: @ip,
59
+ a_response_time: @a_response_time,
60
+ aaaa_response_time: @aaaa_response_time,
44
61
  }
45
62
  end
46
63
 
@@ -57,8 +74,18 @@ module Ddig
57
74
  rr_type = 'AAAA'
58
75
  puts "#{@hostname}\t#{rr_type}\t#{address}"
59
76
  end
77
+ @https.each do |record|
78
+ rr_type = 'HTTPS'
79
+ puts "#{@hostname}\t#{rr_type}\tpriority: #{record.priority}\ttarget: #{record.target}\talpn: #{record.alpn.join(', ')}"
80
+ end
60
81
 
61
82
  puts
83
+ unless @a_response_time.nil?
84
+ puts "# Query time (A): #{@a_response_time} msec"
85
+ end
86
+ unless @aaaa_response_time.nil?
87
+ puts "# Query time (AAAA): #{@aaaa_response_time} msec"
88
+ end
62
89
  puts "# SERVER: #{@nameservers.join(', ')}"
63
90
  end
64
91
 
@@ -1,16 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/http'
2
4
  require 'resolv'
3
5
  require 'base64'
4
6
  require 'json'
5
7
 
6
8
  require_relative 'dns_message'
9
+ require_relative 'dns_resource_https'
7
10
 
8
11
  module Ddig
9
12
  module Resolver
10
13
  # DNS over HTTPS (HTTP/1.1)
11
14
  class DohH1
12
15
  attr_reader :hostname, :server, :address, :dohpath, :port
13
- attr_reader :a, :aaaa
16
+ attr_reader :a, :aaaa, :https
17
+ attr_reader :a_response_time, :aaaa_response_time
14
18
 
15
19
  def initialize(hostname:, server:, address: nil, dohpath: '/dns-query{?dns}', port: 443)
16
20
  @hostname = hostname
@@ -27,9 +31,17 @@ module Ddig
27
31
  return nil
28
32
  end
29
33
 
34
+ a_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
30
35
  @a = get_resources(@hostname, Resolv::DNS::Resource::IN::A).map { |resource| resource.address.to_s if resource.is_a?(Resolv::DNS::Resource::IN::A) }.compact
36
+ @a_response_time = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - a_start) * 1000).round
31
37
 
38
+ aaaa_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
32
39
  @aaaa = get_resources(@hostname, Resolv::DNS::Resource::IN::AAAA).map { |resource| resource.address.to_s if resource.is_a?(Resolv::DNS::Resource::IN::AAAA) }.compact
40
+ @aaaa_response_time = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - aaaa_start) * 1000).round
41
+
42
+ @https = DnsResourceHttps.build(
43
+ get_resources(@hostname, Resolv::DNS::Resource::IN::HTTPS)
44
+ )
33
45
 
34
46
  self
35
47
  end
@@ -62,11 +74,14 @@ module Ddig
62
74
  {
63
75
  a: @a,
64
76
  aaaa: @aaaa,
77
+ https: @https.map { |dns_resource_https| dns_resource_https.as_json },
65
78
  hostname: @hostname,
66
79
  server: @server,
67
80
  address: @address,
68
81
  dohpath: @dohpath,
69
82
  port: @port,
83
+ a_response_time: @a_response_time,
84
+ aaaa_response_time: @aaaa_response_time,
70
85
  }
71
86
  end
72
87
 
@@ -83,8 +98,18 @@ module Ddig
83
98
  rr_type = 'AAAA'
84
99
  puts "#{@hostname}\t#{rr_type}\t#{address}"
85
100
  end
101
+ @https.each do |record|
102
+ rr_type = 'HTTPS'
103
+ puts "#{@hostname}\t#{rr_type}\tpriority: #{record.priority}\ttarget: #{record.target}\talpn: #{record.alpn.join(', ')}"
104
+ end
86
105
 
87
106
  puts
107
+ unless @a_response_time.nil?
108
+ puts "# Query time (A): #{@a_response_time} msec"
109
+ end
110
+ unless @aaaa_response_time.nil?
111
+ puts "# Query time (AAAA): #{@aaaa_response_time} msec"
112
+ end
88
113
  puts "# SERVER(Hostname): #{@server}"
89
114
  puts "# SERVER(Path): #{@dohpath}"
90
115
  puts "# PORT: #{@port}"
@@ -1,15 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'openssl'
2
4
  require 'resolv'
3
5
  require 'json'
4
6
 
5
7
  require_relative 'dns_message'
8
+ require_relative 'dns_resource_https'
6
9
 
7
10
  module Ddig
8
11
  module Resolver
9
12
  # DNS over TLS/TCP
10
13
  class Dot
11
14
  attr_reader :hostname, :server, :server_name, :port
12
- attr_reader :a, :aaaa
15
+ attr_reader :a, :aaaa, :https
16
+ attr_reader :a_response_time, :aaaa_response_time
13
17
 
14
18
  def initialize(hostname:, server:, server_name: nil, port: 853)
15
19
  @hostname = hostname
@@ -25,9 +29,17 @@ module Ddig
25
29
  return nil
26
30
  end
27
31
 
32
+ a_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
28
33
  @a = get_resources(@hostname, Resolv::DNS::Resource::IN::A).map { |resource| resource.address.to_s if resource.is_a?(Resolv::DNS::Resource::IN::A) }.compact
34
+ @a_response_time = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - a_start) * 1000).round
29
35
 
36
+ aaaa_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
30
37
  @aaaa = get_resources(@hostname, Resolv::DNS::Resource::IN::AAAA).map { |resource| resource.address.to_s if resource.is_a?(Resolv::DNS::Resource::IN::AAAA) }.compact
38
+ @aaaa_response_time = ((Process.clock_gettime(Process::CLOCK_MONOTONIC) - aaaa_start) * 1000).round
39
+
40
+ @https = DnsResourceHttps.build(
41
+ get_resources(@hostname, Resolv::DNS::Resource::IN::HTTPS)
42
+ )
31
43
 
32
44
  self
33
45
  end
@@ -80,10 +92,13 @@ module Ddig
80
92
  {
81
93
  a: @a,
82
94
  aaaa: @aaaa,
95
+ https: @https.map { |dns_resource_https| dns_resource_https.as_json },
83
96
  hostname: @hostname,
84
97
  server: @server,
85
98
  server_name: @server_name,
86
99
  port: @port,
100
+ a_response_time: @a_response_time,
101
+ aaaa_response_time: @aaaa_response_time,
87
102
  }
88
103
  end
89
104
 
@@ -100,8 +115,18 @@ module Ddig
100
115
  rr_type = 'AAAA'
101
116
  puts "#{@hostname}\t#{rr_type}\t#{address}"
102
117
  end
118
+ @https.each do |record|
119
+ rr_type = 'HTTPS'
120
+ puts "#{@hostname}\t#{rr_type}\tpriority: #{record.priority}\ttarget: #{record.target}\talpn: #{record.alpn.join(', ')}"
121
+ end
103
122
 
104
123
  puts
124
+ unless @a_response_time.nil?
125
+ puts "# Query time (A): #{@a_response_time} msec"
126
+ end
127
+ unless @aaaa_response_time.nil?
128
+ puts "# Query time (AAAA): #{@aaaa_response_time} msec"
129
+ end
105
130
  puts "# SERVER(Address): #{@server}"
106
131
  #puts "# SERVER(Hostname): #{@server_name}"
107
132
  puts "# PORT: #{@port}"
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.3"
4
+ VERSION = "0.5.0"
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.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taketo Takashima
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-04-19 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: resolv
@@ -58,6 +58,7 @@ files:
58
58
  - lib/ddig/ip.rb
59
59
  - lib/ddig/nameserver.rb
60
60
  - lib/ddig/resolver/dns_message.rb
61
+ - lib/ddig/resolver/dns_resource_https.rb
61
62
  - lib/ddig/resolver/do53.rb
62
63
  - lib/ddig/resolver/doh_h1.rb
63
64
  - lib/ddig/resolver/dot.rb
@@ -70,6 +71,7 @@ metadata:
70
71
  homepage_uri: https://github.com/taketo1113/ddig
71
72
  source_code_uri: https://github.com/taketo1113/ddig
72
73
  changelog_uri: https://github.com/taketo1113/ddig/releases
74
+ rubygems_mfa_required: 'true'
73
75
  rdoc_options: []
74
76
  require_paths:
75
77
  - lib
@@ -84,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
86
  - !ruby/object:Gem::Version
85
87
  version: '0'
86
88
  requirements: []
87
- rubygems_version: 3.6.2
89
+ rubygems_version: 3.6.9
88
90
  specification_version: 4
89
91
  summary: DNS lookup utility for Ruby
90
92
  test_files: []