mr-karan / doggo

:dog: Command-line DNS Client for Humans. Written in Golang
https://doggo.mrkaran.dev/
GNU General Public License v3.0
2.91k stars 100 forks source link

Feature request: trace #52

Open liamdawson opened 2 years ago

liamdawson commented 2 years ago

When explaining some aspects of DNS resolution, I noted that dig 9.10.6 has the following query option:

+[no]trace

Toggle tracing of the delegation path from the root name servers for the name being looked up. Tracing is disabled by default. When tracing is enabled, dig makes iterative queries to resolve the name being looked up. It will follow referrals from the root servers, showing the answer from each server that was used to resolve the lookup.

If @server is also specified, it affects only the initial query for the root zone name servers.

I found this pretty handy for investigating some configurations — I'd love to see an equivalent feature in doggo.

The dig version's behaviour:

$ dig github.com +trace +nodnssec @1.1.1.1

; <<>> DiG 9.10.6 <<>> github.com +trace +nodnssec @1.1.1.1
;; global options: +cmd
.           514951  IN  NS  a.root-servers.net.
.           514951  IN  NS  b.root-servers.net.
.           514951  IN  NS  c.root-servers.net.
.           514951  IN  NS  d.root-servers.net.
.           514951  IN  NS  e.root-servers.net.
.           514951  IN  NS  f.root-servers.net.
.           514951  IN  NS  g.root-servers.net.
.           514951  IN  NS  h.root-servers.net.
.           514951  IN  NS  i.root-servers.net.
.           514951  IN  NS  j.root-servers.net.
.           514951  IN  NS  k.root-servers.net.
.           514951  IN  NS  l.root-servers.net.
.           514951  IN  NS  m.root-servers.net.
;; Received 811 bytes from 1.1.1.1#53(1.1.1.1) in 54 ms

com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  b.gtld-servers.net.
com.            172800  IN  NS  c.gtld-servers.net.
com.            172800  IN  NS  d.gtld-servers.net.
com.            172800  IN  NS  e.gtld-servers.net.
com.            172800  IN  NS  f.gtld-servers.net.
com.            172800  IN  NS  g.gtld-servers.net.
com.            172800  IN  NS  a.gtld-servers.net.
com.            172800  IN  NS  h.gtld-servers.net.
com.            172800  IN  NS  i.gtld-servers.net.
com.            172800  IN  NS  j.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
com.            172800  IN  NS  m.gtld-servers.net.
;; Received 835 bytes from 192.5.5.241#53(f.root-servers.net) in 4 ms

github.com.     172800  IN  NS  ns-520.awsdns-01.net.
github.com.     172800  IN  NS  ns-421.awsdns-52.com.
github.com.     172800  IN  NS  ns-1707.awsdns-21.co.uk.
github.com.     172800  IN  NS  ns-1283.awsdns-32.org.
github.com.     172800  IN  NS  dns1.p08.nsone.net.
github.com.     172800  IN  NS  dns2.p08.nsone.net.
github.com.     172800  IN  NS  dns3.p08.nsone.net.
github.com.     172800  IN  NS  dns4.p08.nsone.net.
;; Received 278 bytes from 192.26.92.30#53(c.gtld-servers.net) in 173 ms

github.com.     60  IN  A   20.248.137.48
github.com.     900 IN  NS  dns1.p08.nsone.net.
github.com.     900 IN  NS  dns2.p08.nsone.net.
github.com.     900 IN  NS  dns3.p08.nsone.net.
github.com.     900 IN  NS  dns4.p08.nsone.net.
github.com.     900 IN  NS  ns-1283.awsdns-32.org.
github.com.     900 IN  NS  ns-1707.awsdns-21.co.uk.
github.com.     900 IN  NS  ns-421.awsdns-52.com.
github.com.     900 IN  NS  ns-520.awsdns-01.net.
;; Received 278 bytes from 205.251.193.165#53(ns-421.awsdns-52.com) in 14 ms
mr-karan commented 2 years ago

This is in my todo, will attempt this :+1: