├── .gitignore ├── check_no_http_test.go ├── testdata ├── cnameroot.com_A_norecurse.dig ├── examplecat.com_A_norecurse.dig ├── www.github.com_A_norecurse.dig ├── exampleffff.com_A_norecurse.dig ├── examplefffffff.com._A_norecurse.dig ├── nonexistent.example.com_A_norecurse.dig ├── bad-ip.ring269.messwithdns.com_A_norecurse.dig ├── dig_example_com.txt ├── bad-cname.ring269.messwithdns.com_A_norecurse.dig ├── github.com_A_norecurse.dig ├── neg-cache.ring269.messwithdns.com_A_norecurse.dig ├── example_com_norecurse.txt ├── github.com._A_norecurse.dig ├── example.com_A_norecurse.dig ├── dig_example_com_v6.txt ├── ring269.messwithdns.com_A_norecurse.dig ├── dig_example_com_authority.txt ├── dig_trace_example_com.txt ├── examplecat.com_A_trace.dig ├── example.com_A_trace.dig ├── exampleffff.com_A_trace.dig ├── examplefffffff.com._A_trace.dig ├── cnameroot.com_A_trace.dig ├── github.com._A_trace.dig ├── github.com_A_trace.dig ├── nonexistent.example.com_A_trace.dig ├── www.github.com_A_trace.dig ├── bad-cname.ring269.messwithdns.com_A_trace.dig ├── ring269.messwithdns.com_A_trace.dig ├── bad-ip.ring269.messwithdns.com_A_trace.dig └── neg-cache.ring269.messwithdns.com_A_trace.dig ├── .github └── workflows │ └── go.yml ├── check_cname_root_test.go ├── check_cache_mismatch_test.go ├── check_bad_cname.go ├── check_no_record_test.go ├── go.mod ├── check_no_record.go ├── check_bad_cname_test.go ├── check_negative_cache_test.go ├── check_negative_cache.go ├── check_cname_root.go ├── LICENSE ├── check_cache_mismatch.go ├── check_no_http.go ├── test_utils.go ├── checks.go ├── parsing.go ├── main.go ├── README.md ├── go.sum └── parsing_test.go /.gitignore: -------------------------------------------------------------------------------- 1 | dns-doctor 2 | -------------------------------------------------------------------------------- /check_no_http_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/hexops/autogold/v2" 7 | ) 8 | 9 | func TestCheckNoHTTP(t *testing.T) { 10 | got := testRunCheck(t, CheckNoHTTP, "example.com", "A") 11 | autogold.Expect(&CheckResult{Status: true, Message: "All A records have HTTP and HTTPS"}).Equal(t, got) 12 | 13 | got = testRunCheck(t, CheckNoHTTP, "bad-ip.ring269.messwithdns.com", "A") 14 | autogold.Expect(&CheckResult{Status: false, Message: "Failed to connect to 203.0.113.0:80"}).Equal(t, got) 15 | } 16 | -------------------------------------------------------------------------------- /testdata/cnameroot.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A cnameroot.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 7194 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;cnameroot.com. IN A 12 | 13 | ;; Query time: 37 msec 14 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 15 | ;; WHEN: Thu Aug 31 12:00:50 EDT 2023 16 | ;; MSG SIZE rcvd: 42 17 | 18 | -------------------------------------------------------------------------------- /testdata/examplecat.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A examplecat.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 41532 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;examplecat.com. IN A 12 | 13 | ;; Query time: 51 msec 14 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 15 | ;; WHEN: Thu Aug 31 08:03:59 EDT 2023 16 | ;; MSG SIZE rcvd: 43 17 | 18 | -------------------------------------------------------------------------------- /testdata/www.github.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A www.github.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 10576 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;www.github.com. IN A 12 | 13 | ;; Query time: 15 msec 14 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 15 | ;; WHEN: Thu Aug 31 12:04:00 EDT 2023 16 | ;; MSG SIZE rcvd: 43 17 | 18 | -------------------------------------------------------------------------------- /testdata/exampleffff.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A exampleffff.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 60509 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 4096 10 | ;; QUESTION SECTION: 11 | ;exampleffff.com. IN A 12 | 13 | ;; Query time: 22 msec 14 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 15 | ;; WHEN: Thu Aug 31 07:07:08 EDT 2023 16 | ;; MSG SIZE rcvd: 44 17 | 18 | -------------------------------------------------------------------------------- /testdata/examplefffffff.com._A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A examplefffffff.com. 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 887 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;examplefffffff.com. IN A 12 | 13 | ;; Query time: 12 msec 14 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 15 | ;; WHEN: Thu Aug 31 07:49:30 EDT 2023 16 | ;; MSG SIZE rcvd: 47 17 | 18 | -------------------------------------------------------------------------------- /testdata/nonexistent.example.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A nonexistent.example.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 43587 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;nonexistent.example.com. IN A 12 | 13 | ;; Query time: 16 msec 14 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 15 | ;; WHEN: Thu Aug 31 09:58:03 EDT 2023 16 | ;; MSG SIZE rcvd: 52 17 | 18 | -------------------------------------------------------------------------------- /testdata/bad-ip.ring269.messwithdns.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A bad-ip.ring269.messwithdns.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 17656 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;bad-ip.ring269.messwithdns.com. IN A 12 | 13 | ;; Query time: 3598 msec 14 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 15 | ;; WHEN: Thu Aug 31 11:19:58 EDT 2023 16 | ;; MSG SIZE rcvd: 59 17 | 18 | -------------------------------------------------------------------------------- /testdata/dig_example_com.txt: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all example.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52157 6 | ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;example.com. IN A 12 | 13 | ;; ANSWER SECTION: 14 | example.com. 75789 IN A 93.184.216.34 15 | 16 | ;; Query time: 51 msec 17 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 18 | ;; WHEN: Wed Aug 30 19:56:52 EDT 2023 19 | ;; MSG SIZE rcvd: 56 20 | 21 | -------------------------------------------------------------------------------- /testdata/bad-cname.ring269.messwithdns.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A bad-cname.ring269.messwithdns.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 52860 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;bad-cname.ring269.messwithdns.com. IN A 12 | 13 | ;; Query time: 15 msec 14 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 15 | ;; WHEN: Thu Aug 31 07:49:30 EDT 2023 16 | ;; MSG SIZE rcvd: 62 17 | 18 | -------------------------------------------------------------------------------- /testdata/github.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A github.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4094 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;github.com. IN A 12 | 13 | ;; ANSWER SECTION: 14 | github.com. 16 IN A 140.82.114.3 15 | 16 | ;; Query time: 15 msec 17 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 18 | ;; WHEN: Thu Aug 31 12:02:45 EDT 2023 19 | ;; MSG SIZE rcvd: 55 20 | 21 | -------------------------------------------------------------------------------- /testdata/neg-cache.ring269.messwithdns.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A neg-cache.ring269.messwithdns.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 26793 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 4096 10 | ;; QUESTION SECTION: 11 | ;neg-cache.ring269.messwithdns.com. IN A 12 | 13 | ;; Query time: 9 msec 14 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 15 | ;; WHEN: Thu Aug 31 08:01:33 EDT 2023 16 | ;; MSG SIZE rcvd: 62 17 | 18 | -------------------------------------------------------------------------------- /testdata/example_com_norecurse.txt: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse example.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17912 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 4096 10 | ;; QUESTION SECTION: 11 | ;example.com. IN A 12 | 13 | ;; ANSWER SECTION: 14 | example.com. 82183 IN A 93.184.216.34 15 | 16 | ;; Query time: 51 msec 17 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 18 | ;; WHEN: Thu Aug 31 06:57:37 EDT 2023 19 | ;; MSG SIZE rcvd: 56 20 | 21 | -------------------------------------------------------------------------------- /testdata/github.com._A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A github.com. 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50793 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;github.com. IN A 12 | 13 | ;; ANSWER SECTION: 14 | github.com. 52 IN A 140.82.113.3 15 | 16 | ;; Query time: 30 msec 17 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 18 | ;; WHEN: Thu Aug 31 12:04:01 EDT 2023 19 | ;; MSG SIZE rcvd: 55 20 | 21 | -------------------------------------------------------------------------------- /testdata/example.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A example.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5396 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;example.com. IN A 12 | 13 | ;; ANSWER SECTION: 14 | example.com. 81350 IN A 93.184.216.34 15 | 16 | ;; Query time: 27 msec 17 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 18 | ;; WHEN: Thu Aug 31 10:01:15 EDT 2023 19 | ;; MSG SIZE rcvd: 56 20 | 21 | -------------------------------------------------------------------------------- /testdata/dig_example_com_v6.txt: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.10.6 <<>> +all example.com AAAA 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26306 6 | ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;example.com. IN AAAA 12 | 13 | ;; ANSWER SECTION: 14 | example.com. 21370 IN AAAA 2606:2800:220:1:248:1893:25c8:1946 15 | 16 | ;; Query time: 43 msec 17 | ;; SERVER: 2001:4860:4860::8888#53(2001:4860:4860::8888) 18 | ;; WHEN: Thu Aug 31 16:49:25 PDT 2023 19 | ;; MSG SIZE rcvd: 68 20 | -------------------------------------------------------------------------------- /.github/workflows/go.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a golang project 2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go 3 | 4 | name: Go 5 | 6 | on: 7 | push: 8 | branches: [ "main" ] 9 | pull_request: 10 | branches: [ "main" ] 11 | 12 | jobs: 13 | 14 | build: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@v3 18 | 19 | - name: Set up Go 20 | uses: actions/setup-go@v4 21 | with: 22 | go-version: '1.20' 23 | 24 | - name: Build 25 | run: go build -v ./... 26 | 27 | - name: Test 28 | run: go test -v ./... 29 | -------------------------------------------------------------------------------- /testdata/ring269.messwithdns.com_A_norecurse.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +all +norecurse A ring269.messwithdns.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11236 6 | ;; flags: qr ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags:; udp: 4096 10 | ;; QUESTION SECTION: 11 | ;ring269.messwithdns.com. IN A 12 | 13 | ;; ANSWER SECTION: 14 | ring269.messwithdns.com. 267 IN A 1.2.3.4 15 | 16 | ;; Query time: 10 msec 17 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 18 | ;; WHEN: Thu Aug 31 07:12:06 EDT 2023 19 | ;; MSG SIZE rcvd: 68 20 | 21 | -------------------------------------------------------------------------------- /check_cname_root_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/hexops/autogold/v2" 7 | ) 8 | 9 | func TestCheckCnameRoot(t *testing.T) { 10 | got := testRunCheck(t, CheckCnameRoot, "cnameroot.com", "A") 11 | autogold.Expect(&CheckResult{Message: "CNAME at root points to 'examplecat.com.'"}).Equal(t, got) 12 | 13 | got = testRunCheck(t, CheckCnameRoot, "example.com", "A") 14 | autogold.Expect(&CheckResult{Status: true, Message: "No CNAME at root"}).Equal(t, got) 15 | 16 | got = testRunCheck(t, CheckCnameRoot, "www.github.com", "A") 17 | autogold.Expect(&CheckResult{Status: true, Message: "Skipping: this is a subdomain"}).Equal(t, got) 18 | } 19 | -------------------------------------------------------------------------------- /check_cache_mismatch_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/hexops/autogold/v2" 7 | ) 8 | 9 | func TestCacheMismatchFail(t *testing.T) { 10 | got := testRunCheck(t, CheckCacheMismatch, "ring269.messwithdns.com", "A") 11 | autogold.Expect(&CheckResult{Status: false, Message: `Cached records don't match authoritative records: 12 | Only in resolver: 13 | ring269.messwithdns.com. 267 A 1.2.3.4 14 | 15 | Only in authoritative: 16 | ring269.messwithdns.com. 300 A 5.6.7.8 17 | `}).Equal(t, got) 18 | } 19 | 20 | func TestCacheMismatchSuccess(t *testing.T) { 21 | got := testRunCheck(t, CheckCacheMismatch, "example.com", "A") 22 | autogold.Expect(&CheckResult{Status: true, Message: "Cached records match authoritative records"}).Equal(t, got) 23 | } 24 | -------------------------------------------------------------------------------- /check_bad_cname.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | var CheckBadCNAME = &Check{ 6 | ID: "bad-cname", 7 | Run: checkBadCNAME, 8 | } 9 | 10 | func checkBadCNAME(config *Config, outputs *DigOutputs) (*CheckResult, error) { 11 | if outputs.cnameTrace == nil { 12 | return &CheckResult{ 13 | Status: true, 14 | Message: "No CNAME found", 15 | }, nil 16 | } 17 | records := outputs.cnameTrace[len(outputs.cnameTrace)-1].Answers 18 | if len(records) == 0 { 19 | return &CheckResult{ 20 | Status: false, 21 | Message: fmt.Sprintf("No record found for CNAME domain '%s'", outputs.cname), 22 | }, nil 23 | } 24 | return &CheckResult{ 25 | Status: true, 26 | Message: fmt.Sprintf("Record found for CNAME domain '%s': %s", outputs.cname, records[0].Data), 27 | }, nil 28 | } 29 | -------------------------------------------------------------------------------- /check_no_record_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/hexops/autogold/v2" 7 | ) 8 | 9 | func TestCheckNoRecordNotRegistered(t *testing.T) { 10 | got := testRunCheck(t, CheckNoRecord, "exampleffff.com", "A") 11 | autogold.Expect(&CheckResult{Message: "This domain is not registered"}).Equal(t, got) 12 | } 13 | 14 | func TestCheckNoRecordFail(t *testing.T) { 15 | got := testRunCheck(t, CheckNoRecord, "nonexistent.example.com", "A") 16 | autogold.Expect(&CheckResult{Message: "No record found, using nameserver 'a.iana-servers.net'"}).Equal(t, got) 17 | } 18 | 19 | func TestCheckNoRecordSucceed(t *testing.T) { 20 | got := testRunCheck(t, CheckNoRecord, "example.com", "A") 21 | autogold.Expect(&CheckResult{Status: true, Message: "Found record: '93.184.216.34'"}).Equal(t, got) 22 | } 23 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/jvns/dns-doctor 2 | 3 | go 1.19 4 | 5 | require ( 6 | github.com/hexops/autogold/v2 v2.2.1 7 | github.com/spf13/cobra v1.7.0 8 | ) 9 | 10 | require ( 11 | github.com/fatih/color v1.15.0 // indirect 12 | github.com/google/go-cmp v0.5.9 // indirect 13 | github.com/hexops/gotextdiff v1.0.3 // indirect 14 | github.com/hexops/valast v1.4.4 // indirect 15 | github.com/inconshreveable/mousetrap v1.1.0 // indirect 16 | github.com/mattn/go-colorable v0.1.13 // indirect 17 | github.com/mattn/go-isatty v0.0.19 // indirect 18 | github.com/nightlyone/lockfile v1.0.0 // indirect 19 | github.com/spf13/pflag v1.0.5 // indirect 20 | golang.org/x/mod v0.12.0 // indirect 21 | golang.org/x/sys v0.11.0 // indirect 22 | golang.org/x/tools v0.12.0 // indirect 23 | mvdan.cc/gofumpt v0.5.0 // indirect 24 | ) 25 | -------------------------------------------------------------------------------- /check_no_record.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | var CheckNoRecord = &Check{ 6 | ID: "no-record", 7 | Run: checkNoRecord, 8 | } 9 | 10 | func checkNoRecord(config *Config, outputs *DigOutputs) (*CheckResult, error) { 11 | last_response := outputs.trace[len(outputs.trace)-1] 12 | if len(outputs.trace) == 3 { 13 | return &CheckResult{ 14 | Status: false, 15 | Message: fmt.Sprintf("This domain is not registered"), 16 | }, nil 17 | } 18 | if len(last_response.Answers) == 0 { 19 | nameserver := last_response.ServerName 20 | return &CheckResult{ 21 | Status: false, 22 | Message: fmt.Sprintf("No record found, using nameserver '%s'", nameserver), 23 | }, nil 24 | } else { 25 | return &CheckResult{ 26 | Status: true, 27 | Message: fmt.Sprintf("Found record: '%v'", last_response.Answers[0].Data), 28 | }, nil 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /check_bad_cname_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/hexops/autogold/v2" 7 | ) 8 | 9 | func TestCheckBadCNAMENone(t *testing.T) { 10 | got := testRunCheck(t, CheckBadCNAME, "example.com", "A") 11 | autogold.Expect(&CheckResult{Status: true, Message: "No CNAME found"}).Equal(t, got) 12 | } 13 | 14 | func TestCheckBadCNAMEOK(t *testing.T) { 15 | got := testRunCheckCNAME(t, CheckBadCNAME, "www.github.com", "A", "github.com.") 16 | autogold.Expect(&CheckResult{Status: true, Message: "Record found for CNAME domain 'github.com.': 140.82.112.3"}).Equal(t, got) 17 | } 18 | 19 | func TestCheckBadCNAMEFail(t *testing.T) { 20 | got := testRunCheckCNAME(t, CheckBadCNAME, "bad-cname.ring269.messwithdns.com", "A", "examplefffffff.com.") 21 | autogold.Expect(&CheckResult{Status: false, Message: "No record found for CNAME domain 'examplefffffff.com.'"}).Equal(t, got) 22 | } 23 | -------------------------------------------------------------------------------- /check_negative_cache_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/hexops/autogold/v2" 7 | ) 8 | 9 | func TestCheckNegativeCacheFail(t *testing.T) { 10 | got := testRunCheck(t, CheckNegativeCache, "neg-cache.ring269.messwithdns.com", "A") 11 | autogold.Expect(&CheckResult{Message: "Resolver's cached result is empty, but authoritative answer is '1.2.3.4'"}).Equal(t, got) 12 | } 13 | 14 | func TestCheckNegativeCacheSuccess(t *testing.T) { 15 | got := testRunCheck(t, CheckNegativeCache, "example.com", "A") 16 | autogold.Expect(&CheckResult{Status: true, Message: "Resolver's cached result is nonempty (A 93.184.216.34)"}).Equal(t, got) 17 | } 18 | 19 | func TestCheckNegativeCacheSuccess2(t *testing.T) { 20 | got := testRunCheck(t, CheckNegativeCache, "examplecat.com", "A") 21 | autogold.Expect(&CheckResult{Status: true, Message: "Resolver doesn't have any records cached"}).Equal(t, got) 22 | } 23 | -------------------------------------------------------------------------------- /check_negative_cache.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | var CheckNegativeCache = &Check{ 6 | ID: "negative-cache", 7 | Run: checkNegativeCache, 8 | } 9 | 10 | func checkNegativeCache(config *Config, outputs *DigOutputs) (*CheckResult, error) { 11 | if outputs.resolverNoRecurse.Status != "NOERROR" && outputs.resolverNoRecurse.Status != "NXDOMAIN" { 12 | return &CheckResult{ 13 | Status: true, 14 | Message: fmt.Sprintf("Resolver doesn't have any records cached"), 15 | }, nil 16 | } 17 | 18 | authRecords := outputs.trace[len(outputs.trace)-1].Answers 19 | resolverRecords := outputs.resolverNoRecurse.Answers 20 | if len(authRecords) != 0 && len(resolverRecords) == 0 { 21 | return &CheckResult{ 22 | Status: false, 23 | Message: fmt.Sprintf("Resolver's cached result is empty, but authoritative answer is '%s'", authRecords[0].Data), 24 | }, nil 25 | } 26 | 27 | return &CheckResult{ 28 | Status: true, 29 | Message: fmt.Sprintf("Resolver's cached result is nonempty (%s %s)", resolverRecords[0].Type, resolverRecords[0].Data), 30 | }, nil 31 | } 32 | -------------------------------------------------------------------------------- /check_cname_root.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "strings" 6 | ) 7 | 8 | var CheckCnameRoot = &Check{ 9 | ID: "cname-root", 10 | Run: checkCnameRoot, 11 | } 12 | 13 | func normalizeDomain(domain string) string { 14 | if domain[len(domain)-1] != '.' { 15 | return domain + "." 16 | } 17 | return strings.ToLower(domain) 18 | } 19 | 20 | func checkCnameRoot(config *Config, outputs *DigOutputs) (*CheckResult, error) { 21 | domain := outputs.trace[2].Authorities[0].Name 22 | if normalizeDomain(domain) != normalizeDomain(config.Domain) { 23 | return &CheckResult{ 24 | Status: true, 25 | Message: fmt.Sprintf("Skipping: this is a subdomain"), 26 | }, nil 27 | } 28 | 29 | answers := outputs.trace[len(outputs.trace)-1].Answers 30 | for _, answer := range answers { 31 | if answer.Type == "CNAME" { 32 | return &CheckResult{ 33 | Status: false, 34 | Message: fmt.Sprintf("CNAME at root points to '%s'", answer.Data), 35 | }, nil 36 | } 37 | } 38 | return &CheckResult{ 39 | Status: true, 40 | Message: fmt.Sprintf("No CNAME at root"), 41 | }, nil 42 | } 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2023 Julia Evans 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /check_cache_mismatch.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "fmt" 4 | 5 | var CheckCacheMismatch = &Check{ 6 | ID: "cache-mismatch", 7 | Run: checkCacheMismatch, 8 | } 9 | 10 | func checkCacheMismatch(config *Config, outputs *DigOutputs) (*CheckResult, error) { 11 | traceRecords := normalize(outputs.trace[len(outputs.trace)-1].Answers, config.RecordType) 12 | resolverRecords := normalize(outputs.resolverNoRecurse.Answers, config.RecordType) 13 | if outputs.resolverNoRecurse.Status != "NOERROR" { 14 | return &CheckResult{ 15 | Status: true, 16 | Message: fmt.Sprintf("Resolver doesn't have any records cached"), 17 | }, nil 18 | } 19 | 20 | onlyResolver, onlyAuthoritative := diff(resolverRecords, traceRecords) 21 | 22 | if len(onlyResolver) == 0 { 23 | return &CheckResult{ 24 | Status: true, 25 | Message: fmt.Sprintf("Cached records match authoritative records"), 26 | }, nil 27 | } 28 | 29 | return &CheckResult{ 30 | Status: false, 31 | Message: fmt.Sprintf(`Cached records don't match authoritative records: 32 | Only in resolver: 33 | %s 34 | Only in authoritative: 35 | %s`, showRecords(onlyResolver), showRecords(onlyAuthoritative)), 36 | }, nil 37 | } 38 | -------------------------------------------------------------------------------- /check_no_http.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "net" 6 | "time" 7 | ) 8 | 9 | var CheckNoHTTP = &Check{ 10 | ID: "no-http", 11 | Run: checkNoHTTP, 12 | } 13 | 14 | func checkNoHTTP(config *Config, outputs *DigOutputs) (*CheckResult, error) { 15 | if config.RecordType != "A" { 16 | return &CheckResult{ 17 | Status: true, 18 | Message: fmt.Sprintf("Skipping check for non-A record"), 19 | }, nil 20 | } 21 | answers := outputs.trace[len(outputs.trace)-1].Answers 22 | for _, answer := range answers { 23 | if answer.Type == "A" { 24 | result := connect(answer.Data, 80) 25 | if !result { 26 | return &CheckResult{ 27 | Status: false, 28 | Message: fmt.Sprintf("Failed to connect to %s:80", answer.Data), 29 | }, nil 30 | } 31 | result = connect(answer.Data, 443) 32 | if !result { 33 | return &CheckResult{ 34 | Status: false, 35 | Message: fmt.Sprintf("Failed to connect to %s:443", answer.Data), 36 | }, nil 37 | } 38 | } 39 | } 40 | return &CheckResult{ 41 | Status: true, 42 | Message: fmt.Sprintf("All A records have HTTP and HTTPS"), 43 | }, nil 44 | 45 | } 46 | 47 | func connect(ip string, port int) bool { 48 | dialer := net.Dialer{Timeout: 300 * time.Millisecond} 49 | conn, err := dialer.Dial("tcp", fmt.Sprintf("%s:%d", ip, port)) 50 | if err != nil { 51 | return false 52 | } 53 | conn.Close() 54 | return true 55 | } 56 | -------------------------------------------------------------------------------- /test_utils.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "testing" 7 | ) 8 | 9 | func readFile(t *testing.T, path string) string { 10 | t.Helper() 11 | output, err := os.ReadFile(path) 12 | if err != nil { 13 | t.Fatal(err) 14 | } 15 | return string(output) 16 | } 17 | 18 | func testRunCheck(t *testing.T, check *Check, domain string, recordType string) *CheckResult { 19 | trace := parseDigTraceOutput(readFile(t, fmt.Sprintf("testdata/%s_%s_trace.dig", domain, recordType))) 20 | resolver := parseDigOutput(readFile(t, fmt.Sprintf("testdata/%s_%s_norecurse.dig", domain, recordType))) 21 | config := &Config{ 22 | RecordType: recordType, 23 | Domain: domain, 24 | } 25 | outputs := &DigOutputs{ 26 | trace: trace, 27 | resolverNoRecurse: resolver, 28 | } 29 | got, err := check.Run(config, outputs) 30 | if err != nil { 31 | t.Fatal(err) 32 | } 33 | return got 34 | } 35 | 36 | func testRunCheckCNAME(t *testing.T, check *Check, domain string, recordType string, cname string) *CheckResult { 37 | trace := parseDigTraceOutput(readFile(t, fmt.Sprintf("testdata/%s_%s_trace.dig", domain, recordType))) 38 | resolver := parseDigOutput(readFile(t, fmt.Sprintf("testdata/%s_%s_norecurse.dig", domain, recordType))) 39 | traceCNAME := parseDigTraceOutput(readFile(t, fmt.Sprintf("testdata/%s_%s_trace.dig", cname, recordType))) 40 | resolverCNAME := parseDigOutput(readFile(t, fmt.Sprintf("testdata/%s_%s_norecurse.dig", cname, recordType))) 41 | config := &Config{ 42 | RecordType: recordType, 43 | Domain: domain, 44 | } 45 | outputs := &DigOutputs{ 46 | trace: trace, 47 | resolverNoRecurse: resolver, 48 | cname: cname, 49 | cnameTrace: traceCNAME, 50 | cnameNoRecurse: &resolverCNAME, 51 | } 52 | got, err := check.Run(config, outputs) 53 | if err != nil { 54 | t.Fatal(err) 55 | } 56 | return got 57 | } 58 | -------------------------------------------------------------------------------- /testdata/dig_example_com_authority.txt: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> @a.root-servers.net +all example.com 3 | ; (1 server found) 4 | ;; global options: +cmd 5 | ;; Got answer: 6 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32696 7 | ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 27 8 | ;; WARNING: recursion requested but not available 9 | 10 | ;; OPT PSEUDOSECTION: 11 | ; EDNS: version: 0, flags:; udp: 1472 12 | ;; QUESTION SECTION: 13 | ;example.com. IN A 14 | 15 | ;; AUTHORITY SECTION: 16 | com. 172800 IN NS a.gtld-servers.net. 17 | com. 172800 IN NS b.gtld-servers.net. 18 | com. 172800 IN NS c.gtld-servers.net. 19 | com. 172800 IN NS d.gtld-servers.net. 20 | com. 172800 IN NS e.gtld-servers.net. 21 | com. 172800 IN NS f.gtld-servers.net. 22 | com. 172800 IN NS g.gtld-servers.net. 23 | com. 172800 IN NS h.gtld-servers.net. 24 | com. 172800 IN NS i.gtld-servers.net. 25 | com. 172800 IN NS j.gtld-servers.net. 26 | com. 172800 IN NS k.gtld-servers.net. 27 | com. 172800 IN NS l.gtld-servers.net. 28 | com. 172800 IN NS m.gtld-servers.net. 29 | 30 | ;; ADDITIONAL SECTION: 31 | a.gtld-servers.net. 172800 IN A 192.5.6.30 32 | b.gtld-servers.net. 172800 IN A 192.33.14.30 33 | c.gtld-servers.net. 172800 IN A 192.26.92.30 34 | d.gtld-servers.net. 172800 IN A 192.31.80.30 35 | e.gtld-servers.net. 172800 IN A 192.12.94.30 36 | f.gtld-servers.net. 172800 IN A 192.35.51.30 37 | g.gtld-servers.net. 172800 IN A 192.42.93.30 38 | h.gtld-servers.net. 172800 IN A 192.54.112.30 39 | i.gtld-servers.net. 172800 IN A 192.43.172.30 40 | j.gtld-servers.net. 172800 IN A 192.48.79.30 41 | k.gtld-servers.net. 172800 IN A 192.52.178.30 42 | l.gtld-servers.net. 172800 IN A 192.41.162.30 43 | m.gtld-servers.net. 172800 IN A 192.55.83.30 44 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 45 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 46 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 47 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 48 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 49 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 50 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 51 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 52 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 53 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 54 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 55 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 56 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 57 | 58 | ;; Query time: 89 msec 59 | ;; SERVER: 198.41.0.4#53(a.root-servers.net) (UDP) 60 | ;; WHEN: Wed Aug 30 20:02:13 EDT 2023 61 | ;; MSG SIZE rcvd: 836 62 | 63 | -------------------------------------------------------------------------------- /checks.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "sort" 6 | ) 7 | 8 | type Check struct { 9 | ID string 10 | Description string 11 | Run func(config *Config, outputs *DigOutputs) (*CheckResult, error) 12 | } 13 | 14 | type CheckResult struct { 15 | Status bool 16 | Message string 17 | } 18 | 19 | func runCheck(check *Check, config *Config, outputs *DigOutputs) bool { 20 | // color the output based on the result of the check 21 | result, err := check.Run(config, outputs) 22 | if err != nil { 23 | fmt.Printf("Error running check '%s': %s\n", check.ID, err) 24 | return false 25 | } 26 | if !result.Status { 27 | fmt.Println("\033[31mFAILURE:\033[0m", check.ID) 28 | fmt.Println(" Details:", result.Message) 29 | } 30 | return result.Status 31 | } 32 | 33 | func filterRecords(records []Record, typ string) []Record { 34 | filtered := []Record{} 35 | for _, record := range records { 36 | if record.Type == typ || record.Type == "CNAME" { 37 | filtered = append(filtered, record) 38 | } 39 | } 40 | return filtered 41 | } 42 | 43 | func sortRecords(records []Record) []Record { 44 | // copy records 45 | sorted := []Record{} 46 | for _, record := range records { 47 | sorted = append(sorted, record) 48 | } 49 | sort.Slice(sorted, func(i, j int) bool { 50 | return sorted[i].Data < sorted[j].Data 51 | }) 52 | return sorted 53 | } 54 | 55 | func normalize(records []Record, typ string) []Record { 56 | records = filterRecords(records, typ) 57 | return sortRecords(records) 58 | } 59 | 60 | func containsRecord(records []Record, record Record) bool { 61 | for _, r := range records { 62 | if r.Data == record.Data && r.Type == record.Type && r.Name == record.Name && r.Class == record.Class { 63 | return true 64 | } 65 | } 66 | return false 67 | } 68 | 69 | func isSubset(resolverRecords []Record, authoritativeRecords []Record) bool { 70 | for _, record := range resolverRecords { 71 | if !containsRecord(authoritativeRecords, record) { 72 | return false 73 | } 74 | } 75 | return true 76 | } 77 | 78 | func diff(resolverRecords []Record, authoritativeRecords []Record) ([]Record, []Record) { 79 | plus := []Record{} 80 | minus := []Record{} 81 | for _, record := range resolverRecords { 82 | if !containsRecord(authoritativeRecords, record) { 83 | plus = append(plus, record) 84 | } 85 | } 86 | for _, record := range authoritativeRecords { 87 | if !containsRecord(resolverRecords, record) { 88 | minus = append(minus, record) 89 | } 90 | } 91 | /* only resolver, only authortative */ 92 | return plus, minus 93 | } 94 | 95 | func showRecords(records []Record) string { 96 | str := "" 97 | for _, record := range records { 98 | str += record.String() + "\n" 99 | } 100 | return str 101 | } 102 | -------------------------------------------------------------------------------- /parsing.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "regexp" 6 | "strconv" 7 | "strings" 8 | ) 9 | 10 | type Record struct { 11 | Name string 12 | TTL int 13 | Class string 14 | Type string 15 | Data string 16 | } 17 | 18 | func (r *Record) String() string { 19 | return fmt.Sprintf("%s %d %s %s", r.Name, r.TTL, r.Type, r.Data) 20 | } 21 | 22 | type Question struct { 23 | Name string 24 | Type string 25 | Class string 26 | } 27 | 28 | type DNSResponse struct { 29 | Status string 30 | ServerIP string 31 | ServerName string 32 | Question Question 33 | Answers []Record 34 | Authorities []Record 35 | Additionals []Record 36 | } 37 | 38 | type TraceOutput struct { 39 | Server string 40 | IP string 41 | Records []Record 42 | } 43 | 44 | func parseQuestion(line string) Question { 45 | fields := strings.Fields(line[1:]) 46 | if len(fields) < 3 { 47 | panic(fmt.Sprintf("Invalid record: %s", line)) 48 | } 49 | return Question{ 50 | Name: fields[0], 51 | Class: fields[1], 52 | Type: fields[2], 53 | } 54 | } 55 | func parseRecord(line string) Record { 56 | fields := strings.Fields(line) 57 | if len(fields) < 5 { 58 | panic(fmt.Sprintf("Invalid record: %s", line)) 59 | } 60 | ttl, err := strconv.Atoi(fields[1]) 61 | if err != nil { 62 | panic(fmt.Sprintf("Invalid ttl: %s", fields[1])) 63 | } 64 | return Record{ 65 | Name: fields[0], 66 | TTL: ttl, 67 | Class: fields[2], 68 | Type: fields[3], 69 | Data: strings.Join(fields[4:], " "), 70 | } 71 | } 72 | 73 | func parseDigOutput(output string) DNSResponse { 74 | lines := strings.Split(output, "\n") 75 | part := "start" 76 | resp := DNSResponse{ 77 | Status: "", 78 | Question: Question{}, 79 | Answers: make([]Record, 0), 80 | Authorities: make([]Record, 0), 81 | Additionals: make([]Record, 0), 82 | } 83 | 84 | for _, line := range lines { 85 | if strings.Contains(line, "ANSWER SECTION") { 86 | part = "answer" 87 | } else if strings.Contains(line, "AUTHORITY SECTION") { 88 | part = "authority" 89 | } else if len(line) == 0 { 90 | part = "start" 91 | } else if strings.Contains(line, "ADDITIONAL SECTION") { 92 | part = "additional" 93 | } else if strings.Contains(line, "QUESTION SECTION") { 94 | part = "question" 95 | } else if strings.Contains(line, "->>HEADER<<-") { 96 | fields := strings.Fields(line) 97 | for i, field := range fields { 98 | if field == "status:" { 99 | resp.Status = fields[i+1][:len(fields[i+1])-1] 100 | break 101 | } 102 | } 103 | } else if strings.Contains(line, "SERVER:") { 104 | 105 | // SERVER: 192.48.79.30#53(j.gtld-servers.net) (UDP) 106 | regex := regexp.MustCompile(`SERVER: (.+)#(\d+)\(([\w:\.\-]+)\)`) 107 | matches := regex.FindStringSubmatch(line) 108 | if len(matches) != 4 { 109 | panic(fmt.Sprintf("Invalid server line: %s", line)) 110 | } 111 | resp.ServerIP = fmt.Sprintf("%s:%s", matches[1], matches[2]) 112 | resp.ServerName = matches[3] 113 | } else if part == "question" { 114 | resp.Question = parseQuestion(line) 115 | } else if part == "answer" { 116 | resp.Answers = append(resp.Answers, parseRecord(line)) 117 | } else if part == "authority" { 118 | resp.Authorities = append(resp.Authorities, parseRecord(line)) 119 | } else if part == "additional" { 120 | resp.Additionals = append(resp.Additionals, parseRecord(line)) 121 | } 122 | 123 | } 124 | return resp 125 | } 126 | 127 | func parseDigTraceOutput(output string) []DNSResponse { 128 | parts := strings.Split(output, "Got answer")[1:] 129 | responses := make([]DNSResponse, 0) 130 | for _, part := range parts { 131 | responses = append(responses, parseDigOutput(part)) 132 | } 133 | return responses 134 | } 135 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "os/exec" 7 | "strings" 8 | 9 | "github.com/spf13/cobra" 10 | ) 11 | 12 | type Config struct { 13 | RecordType string 14 | Domain string 15 | Resolver string 16 | } 17 | 18 | type DigOutputs struct { 19 | trace []DNSResponse 20 | //resolver DNSResponse 21 | resolverNoRecurse DNSResponse 22 | cname string 23 | cnameTrace []DNSResponse 24 | cnameNoRecurse *DNSResponse 25 | } 26 | 27 | func main() { 28 | // example: dnsdoctor A google.com 29 | // example: dnsdoctor google.com 30 | 31 | cmd := &cobra.Command{ 32 | Use: "dnsdoctor [record-type] domain-name", 33 | Short: "", 34 | Long: ``, 35 | Run: func(cmd *cobra.Command, args []string) { 36 | /* require at least 1 arg */ 37 | if len(args) < 1 { 38 | cmd.Help() 39 | return 40 | } 41 | config := &Config{} 42 | if len(args) == 1 { 43 | config.RecordType = "A" 44 | config.Domain = args[0] 45 | } else { 46 | config.RecordType = strings.ToUpper(args[0]) 47 | config.Domain = args[1] 48 | } 49 | doctor(config) 50 | }, 51 | } 52 | cmd.Execute() 53 | } 54 | 55 | func doctor(config *Config) { 56 | trace := runDigTrace(config) 57 | cname := getCNAME(trace) 58 | outputs := &DigOutputs{ 59 | trace: trace, 60 | cname: cname, 61 | resolverNoRecurse: runDigNorecurse(config), 62 | cnameTrace: runDigCNAMETrace(config, cname), 63 | cnameNoRecurse: runDigCNAMENorecurse(config, cname), 64 | } 65 | 66 | checks := []*Check{ 67 | CheckNoRecord, 68 | CheckCacheMismatch, 69 | CheckBadCNAME, 70 | CheckNegativeCache, 71 | CheckNoHTTP, 72 | CheckCnameRoot, 73 | } 74 | 75 | allGood := true 76 | for _, check := range checks { 77 | result := runCheck(check, config, outputs) 78 | allGood = allGood && result 79 | } 80 | if allGood { 81 | fmt.Println("All checks passed!") 82 | } 83 | } 84 | 85 | func run(cmd *exec.Cmd) string { 86 | stdout, err := cmd.CombinedOutput() 87 | if err != nil { 88 | fmt.Printf("error running `%v`: %v", cmd, err) 89 | os.Exit(1) 90 | } 91 | return string(stdout) 92 | } 93 | 94 | func runDigTrace(config *Config) []DNSResponse { 95 | cmd := exec.Command("dig", "+trace", "+all", config.RecordType, config.Domain) 96 | stdout := run(cmd) 97 | logQuery(config.Domain+"_"+config.RecordType+"_trace.dig", stdout) 98 | trace := parseDigTraceOutput(stdout) 99 | if len(trace) == 0 { 100 | fmt.Println("No trace output found") 101 | os.Exit(1) 102 | } 103 | return trace 104 | } 105 | 106 | func runDigNorecurse(config *Config) DNSResponse { 107 | cmd := exec.Command("dig", "+all", "+norecurse", config.RecordType, config.Domain) 108 | stdout := run(cmd) 109 | logQuery(config.Domain+"_"+config.RecordType+"_norecurse.dig", string(stdout)) 110 | return parseDigOutput(stdout) 111 | } 112 | 113 | func runDig(config *Config) DNSResponse { 114 | cmd := exec.Command("dig", "+all", config.RecordType, config.Domain) 115 | stdout := run(cmd) 116 | logQuery(config.Domain+"_"+config.RecordType+".dig", string(stdout)) 117 | return parseDigOutput(stdout) 118 | } 119 | 120 | func getCNAME(trace []DNSResponse) string { 121 | records := trace[len(trace)-1].Answers 122 | for _, record := range records { 123 | if record.Type == "CNAME" { 124 | return record.Data 125 | } 126 | } 127 | return "" 128 | } 129 | 130 | func runDigCNAMETrace(rootConfig *Config, cname string) []DNSResponse { 131 | if cname == "" { 132 | return nil 133 | } 134 | return runDigTrace(&Config{ 135 | RecordType: rootConfig.RecordType, 136 | Domain: cname, 137 | }) 138 | } 139 | 140 | func runDigCNAMENorecurse(rootConfig *Config, cname string) *DNSResponse { 141 | if cname == "" { 142 | return nil 143 | } 144 | resp := runDigNorecurse(&Config{ 145 | RecordType: rootConfig.RecordType, 146 | Domain: cname, 147 | }) 148 | return &resp 149 | } 150 | 151 | func logQuery(filename string, contents string) { 152 | os.MkdirAll("/tmp/dns-doctor-logs/", os.ModePerm) 153 | f, err := os.Create("/tmp/dns-doctor-logs/" + filename) 154 | if err != nil { 155 | fmt.Printf("error creating file %v: %v", filename, err) 156 | os.Exit(1) 157 | } 158 | defer f.Close() 159 | _, err = f.WriteString(contents) 160 | if err != nil { 161 | fmt.Printf("error writing to file %v: %v", filename, err) 162 | os.Exit(1) 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## dns doctor 2 | 3 | **PROTOTYPE, PRETTY CRAPPY, PROBABLY HAS ONE MILLION BUGS** 4 | 5 | You give it a domain name where something is wrong, and it runs a bunch of checks to try to figure out the reason. 6 | 7 | **Usage**: `dns-doctor your-domain.com` 8 | 9 | You can install it with `go install github.com/jvns/dns-doctor@latest` 10 | 11 | ## How it works 12 | 13 | It basically just runs `dig +trace` and `dig +norecurse` on your domain, parses 14 | the output, and tries to diagnose some problems. You'll need to have `dig` 15 | installed. 16 | 17 | ## example output 18 | 19 | ``` 20 | $ ./dns-doctor cnameroot.com 21 | FAILURE: cname-root 22 | Details: CNAME at root points to 'examplecat.com.' 23 | $ /dns-doctor asdfasdf.jvns.ca 24 | FAILURE: no-record 25 | Details: No record found, using nameserver 'ns-2-b.gandi.net' 26 | $ ./dns-doctor bad-ip.ring269.messwithdns.com 27 | FAILURE: no-http 28 | Details: Failed to connect to 203.0.113.0:80 29 | $ ./dns-doctor example.com 30 | All checks passed! 31 | ``` 32 | 33 | ## List of checks 34 | 35 | ### **`no-record`** 36 | 37 | Checks to see if your authoritative nameserver actually just doesn't have a record set. 38 | 39 | #### How it's implemented 40 | 41 | 1. Look up the record with the authoritative nameserver (the equivalent of `dig +trace some.domain.com`) 42 | 2. If there's no matching record, fail this check 43 | 44 | #### How to fix it 45 | 46 | DNS Doctor will give you the domain name of the nameservers where your record is set. That should give you a clue about where to fix it 47 | 48 | 49 | ### **`cache-mismatch`** 50 | 51 | Checks to see if your local resolver has an old cached version. 52 | 53 | #### How it's implemented 54 | 55 | 1. Look up the record with the authoritative nameserver (the equivalent of `dig +trace some.domain.com`) 56 | 2. Look up the record with the local resolver (the equivalent of `dig +norecurse some.domain.com`) 57 | 3. If the record the local resolver returns is outdated (if it's not), fail this check 58 | 59 | #### How to fix it: 60 | 61 | You just gotta wait! `DNS Doctor` will tell you how long you have to wait. It 62 | figures that out by looking at the TTL (time to live) of the cached record. 63 | 64 | ### **`negative-cache`** 65 | 66 | This is a variant of `cache-mismatch` that checks specifically for negative caching (a cached "this domain does not exist" response). 67 | 68 | #### How it's implemented: 69 | 70 | 1. Look up the domain name with the authoritative nameserver 71 | 2. If there's no result, return success 72 | 3. Otherwise, look up the domain with local resolver, (equivalent of `dig some.domain.com`) using `+norecurse` 73 | 6. If we get an empty NOERROR result, fail the check 74 | 75 | #### How to fix it: 76 | 77 | You just gotta wait! `DNS Doctor` will tell you how approximately you have to wait. It 78 | figures that out by looking at the TTL (time to live) on the domain's SOA record. 79 | 80 | ### **`bad-cname`** 81 | 82 | Checks if your domain's CNAME doesn't resolve to anything. 83 | 84 | #### How it's implemented: 85 | 86 | 1. Look up the domain name with the local resolver (equivalent of `dig some.domain.com`) 87 | 2. Check if it returns a CNAME record. If there's no CNAME record, return success 88 | 3. If there is a CNAME record, run `dig +trace cname.otherdomain.com` 89 | 4. If `dig +trace` reports no record for `cname.otherdomain.com`, fail the check 90 | 91 | #### How to fix it: 92 | 93 | You might have made a typo in your CNAME record. 94 | 95 | ### **`cname-cache-mismatch`** 96 | 97 | 1. Look up the domain name with the local resolver (equivalent of `dig some.domain.com`) 98 | 2. Check if it returns a CNAME record. If there's no CNAME record, return success 99 | 3. Run the `cache-mismatch` check on the CNAME record 100 | 101 | ### **`cname-root`** 102 | 103 | #### How `cname-root` is implemented: 104 | 105 | 1. Check if the domain has a CNAME record 106 | 2. If it does, and if it's not a subdomain (`blah.example.com` is ok, `example.com` is not), fail the check 107 | 108 | #### How to fix `cname-root`: 109 | 110 | This isn't **necessarily** a problem -- your site might work just fine! (todo: explain) 111 | 112 | ### **`no-http`** 113 | 114 | Only runs if you requested an A record check. This is a heuristic to see if you 115 | might have made a typo in the IP address. 116 | 117 | #### How `no-http` is implemented: 118 | 119 | 1. Look up the domain with the authoritative nameserver (the equivalent of `dig +trace some.domain.com`) 120 | 2. Try to connect to each resulting IP address on port 80 and port 443 121 | 3. If we get a "connection refused" error or if it times out, fail the check 122 | 123 | #### How to fix this 124 | 125 | If your server isn't a HTTP server, you can ignore this one. Otherwise there's likely an issue with the configuration of your HTTP server. 126 | 127 | ### **old-nameserver** 128 | 129 | This checks for whether your nameservers changed recently, and if they're 130 | cached with your local resolver. 131 | 132 | TODO: not implemented, not sure how to implement this. 133 | 134 | #### How to fix `old-nameserver`: 135 | 136 | You just gotta wait! Typically you'll have to wait up to 1-2 days after you 137 | made the changes. DNS Doctor will tell you the TTL (in days) for the total 138 | waiting time. 139 | -------------------------------------------------------------------------------- /testdata/dig_trace_example_com.txt: -------------------------------------------------------------------------------- 1 | ;; Got answer: 2 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63932 3 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 4 | 5 | ;; OPT PSEUDOSECTION: 6 | ; EDNS: version: 0, flags: do; udp: 1232 7 | ;; QUESTION SECTION: 8 | ;. IN NS 9 | 10 | ;; ANSWER SECTION: 11 | . 517950 IN NS a.root-servers.net. 12 | . 517950 IN NS b.root-servers.net. 13 | . 517950 IN NS c.root-servers.net. 14 | . 517950 IN NS d.root-servers.net. 15 | . 517950 IN NS e.root-servers.net. 16 | . 517950 IN NS f.root-servers.net. 17 | . 517950 IN NS g.root-servers.net. 18 | . 517950 IN NS h.root-servers.net. 19 | . 517950 IN NS i.root-servers.net. 20 | . 517950 IN NS j.root-servers.net. 21 | . 517950 IN NS k.root-servers.net. 22 | . 517950 IN NS l.root-servers.net. 23 | . 517950 IN NS m.root-servers.net. 24 | . 517950 IN RRSIG NS 8 0 518400 20230912210000 20230830200000 11019 . iKKR8LMlixZs53amGnK69lRbb91ttySCHMWjIOzbI3eYCOL4f5ZnyJuY yzo1VWA/TlMCM4NJzScyvIVJS5jaz2oKEUDLzm7v9xoFhYMbBL7y7fc+ 8ByPRZ5rYOcRjhimlToRnAPxh8iXG5xsAmlCJ8+vy00eL7l3Sn8bsQaf x7cvq5ZVYpUZ1jf8S1VhJjHrw8iTNYZHPqmoL7DrzszkKSTrZD5Bmzzt I9qVbpWV69F5cyr/uGo1DhH5Sscz0TVGPBAErFW+EfdO/D491T3Bv1bE MR7+m5TwuQTOs6u4vztRyz+GxvMweSl6xoLxhJ75J+D4snnNZPr+EGGz thIwOQ== 25 | 26 | ;; ADDITIONAL SECTION: 27 | a.root-servers.net. 517950 IN A 198.41.0.4 28 | a.root-servers.net. 517950 IN AAAA 2001:503:ba3e::2:30 29 | b.root-servers.net. 517950 IN A 199.9.14.201 30 | b.root-servers.net. 517950 IN AAAA 2001:500:200::b 31 | c.root-servers.net. 517950 IN A 192.33.4.12 32 | c.root-servers.net. 517950 IN AAAA 2001:500:2::c 33 | d.root-servers.net. 517950 IN A 199.7.91.13 34 | d.root-servers.net. 517950 IN AAAA 2001:500:2d::d 35 | e.root-servers.net. 517950 IN A 192.203.230.10 36 | e.root-servers.net. 517950 IN AAAA 2001:500:a8::e 37 | f.root-servers.net. 517950 IN A 192.5.5.241 38 | f.root-servers.net. 517950 IN AAAA 2001:500:2f::f 39 | g.root-servers.net. 517950 IN A 192.112.36.4 40 | g.root-servers.net. 517950 IN AAAA 2001:500:12::d0d 41 | h.root-servers.net. 517950 IN A 198.97.190.53 42 | h.root-servers.net. 517950 IN AAAA 2001:500:1::53 43 | i.root-servers.net. 517950 IN A 192.36.148.17 44 | i.root-servers.net. 517950 IN AAAA 2001:7fe::53 45 | j.root-servers.net. 517950 IN A 192.58.128.30 46 | j.root-servers.net. 517950 IN AAAA 2001:503:c27::2:30 47 | k.root-servers.net. 517950 IN A 193.0.14.129 48 | k.root-servers.net. 517950 IN AAAA 2001:7fd::1 49 | l.root-servers.net. 517950 IN A 199.7.83.42 50 | l.root-servers.net. 517950 IN AAAA 2001:500:9f::42 51 | m.root-servers.net. 517950 IN A 202.12.27.33 52 | m.root-servers.net. 517950 IN AAAA 2001:dc3::35 53 | 54 | ;; Query time: 78 msec 55 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 56 | ;; WHEN: Wed Aug 30 20:26:21 EDT 2023 57 | ;; MSG SIZE rcvd: 1097 58 | 59 | ;; Got answer: 60 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11339 61 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 62 | 63 | ;; OPT PSEUDOSECTION: 64 | ; EDNS: version: 0, flags: do; udp: 4096 65 | ;; QUESTION SECTION: 66 | ;example.com. IN A 67 | 68 | ;; AUTHORITY SECTION: 69 | com. 172800 IN NS a.gtld-servers.net. 70 | com. 172800 IN NS b.gtld-servers.net. 71 | com. 172800 IN NS c.gtld-servers.net. 72 | com. 172800 IN NS d.gtld-servers.net. 73 | com. 172800 IN NS e.gtld-servers.net. 74 | com. 172800 IN NS f.gtld-servers.net. 75 | com. 172800 IN NS g.gtld-servers.net. 76 | com. 172800 IN NS h.gtld-servers.net. 77 | com. 172800 IN NS i.gtld-servers.net. 78 | com. 172800 IN NS j.gtld-servers.net. 79 | com. 172800 IN NS k.gtld-servers.net. 80 | com. 172800 IN NS l.gtld-servers.net. 81 | com. 172800 IN NS m.gtld-servers.net. 82 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 83 | com. 86400 IN RRSIG DS 8 1 86400 20230912210000 20230830200000 11019 . b0f9IhTkzzSIFp5ioeI5YJbcH3/hAdM1kOxkOF3Tl9f69Pytjw2OdA2S NVkS9Ul1SlZYapCa+OJiyHbDjiV1Ub/kqk6yzg6E1JwVQObfHH9j8zvx SmLzCMLuTVGCFZKNyRa0K6axO+x+ZYpwzul6IVzKREsQC9JdUogygyrO ZymGxDMvSj6d9UXT+g2xVGwfuncFklYAdrtM+z5xYIy0XXQbpsZ6Dqsv T1LR/GKAwGGjNXE2RICg8prz92t36G4WUO/AJuf8FoYGFReK3Vhh4G1H 6AXxSN7tYG2fSJ74qPe95xIV7O5JqULVKdKtCYDo3o71+AziVpAbNS4Z vOEbog== 84 | 85 | ;; ADDITIONAL SECTION: 86 | a.gtld-servers.net. 172800 IN A 192.5.6.30 87 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 88 | b.gtld-servers.net. 172800 IN A 192.33.14.30 89 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 90 | c.gtld-servers.net. 172800 IN A 192.26.92.30 91 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 92 | d.gtld-servers.net. 172800 IN A 192.31.80.30 93 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 94 | e.gtld-servers.net. 172800 IN A 192.12.94.30 95 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 96 | f.gtld-servers.net. 172800 IN A 192.35.51.30 97 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 98 | g.gtld-servers.net. 172800 IN A 192.42.93.30 99 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 100 | h.gtld-servers.net. 172800 IN A 192.54.112.30 101 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 102 | i.gtld-servers.net. 172800 IN A 192.43.172.30 103 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 104 | j.gtld-servers.net. 172800 IN A 192.48.79.30 105 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 106 | k.gtld-servers.net. 172800 IN A 192.52.178.30 107 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 108 | l.gtld-servers.net. 172800 IN A 192.41.162.30 109 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 110 | m.gtld-servers.net. 172800 IN A 192.55.83.30 111 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 112 | 113 | ;; Query time: 85 msec 114 | ;; SERVER: 199.7.83.42#53(l.root-servers.net) (UDP) 115 | ;; WHEN: Wed Aug 30 20:26:21 EDT 2023 116 | ;; MSG SIZE rcvd: 1171 117 | 118 | ;; Got answer: 119 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60386 120 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1 121 | 122 | ;; OPT PSEUDOSECTION: 123 | ; EDNS: version: 0, flags: do; udp: 4096 124 | ;; QUESTION SECTION: 125 | ;example.com. IN A 126 | 127 | ;; AUTHORITY SECTION: 128 | example.com. 172800 IN NS a.iana-servers.net. 129 | example.com. 172800 IN NS b.iana-servers.net. 130 | example.com. 86400 IN DS 370 13 2 BE74359954660069D5C63D200C39F5603827D7DD02B56F120EE9F3A8 6764247C 131 | example.com. 86400 IN RRSIG DS 8 2 86400 20230906062331 20230830051331 4459 com. GMHHwISDn8Yh8+8Y/aTXu9XkZCobOWJ94nPPPYTvRvpUDJfMHV8k2aSO 9lW6xBjeaWtl9MVBRUKIh6CgLH+hZ/V0UHAROh6mt6jKa/3W35OqcULN 8aRsGujntVlByyD3/1Kxki0S8x+wbbymShuqmXC0KQy7Wl0mkimOCwZD +IDk1UhC5zjZnQjFKmJ4SVLb7ayOsbsoQoufx3BNk2kFig== 132 | 133 | ;; Query time: 89 msec 134 | ;; SERVER: 192.35.51.30#53(f.gtld-servers.net) (UDP) 135 | ;; WHEN: Wed Aug 30 20:26:21 EDT 2023 136 | ;; MSG SIZE rcvd: 331 137 | 138 | ;; Got answer: 139 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 83 140 | ;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 1 141 | 142 | ;; OPT PSEUDOSECTION: 143 | ; EDNS: version: 0, flags: do; udp: 4096 144 | ;; QUESTION SECTION: 145 | ;example.com. IN A 146 | 147 | ;; ANSWER SECTION: 148 | example.com. 86400 IN A 93.184.216.34 149 | example.com. 86400 IN RRSIG A 13 2 86400 20230909025252 20230819070125 2061 example.com. 8adF5DxheCltQ61A6m5kHUfzgsuhY3zPscP9YDB16sDn2bk6Rw7Fz+gI MiixWE2SkLFl7LWN5cLN7B/aGBGUlw== 150 | 151 | ;; AUTHORITY SECTION: 152 | example.com. 86400 IN NS a.iana-servers.net. 153 | example.com. 86400 IN NS b.iana-servers.net. 154 | example.com. 86400 IN RRSIG NS 13 2 86400 20230909053651 20230819070125 2061 example.com. BbDbIs5CLfsfydzBZOcDqZfwRo/YyDZKeKTs3C6RzGgcC5RpBaXYk7Oh XTZ3OjM3y7YDJVNtuPGcB8Ti7WlMZg== 155 | 156 | ;; Query time: 88 msec 157 | ;; SERVER: 199.43.133.53#53(b.iana-servers.net) (UDP) 158 | ;; WHEN: Wed Aug 30 20:26:21 EDT 2023 159 | ;; MSG SIZE rcvd: 318 160 | 161 | -------------------------------------------------------------------------------- /testdata/examplecat.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A examplecat.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29232 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 514226 IN NS a.root-servers.net. 15 | . 514226 IN NS b.root-servers.net. 16 | . 514226 IN NS c.root-servers.net. 17 | . 514226 IN NS d.root-servers.net. 18 | . 514226 IN NS e.root-servers.net. 19 | . 514226 IN NS f.root-servers.net. 20 | . 514226 IN NS g.root-servers.net. 21 | . 514226 IN NS h.root-servers.net. 22 | . 514226 IN NS i.root-servers.net. 23 | . 514226 IN NS j.root-servers.net. 24 | . 514226 IN NS k.root-servers.net. 25 | . 514226 IN NS l.root-servers.net. 26 | . 514226 IN NS m.root-servers.net. 27 | . 514226 IN RRSIG NS 8 0 518400 20230913050000 20230831040000 11019 . sTegTb4O1m5gsG6/bNYMthI0KmGTq0sqyKzys6J9GjN05eew+r+hommx jkUk2k0SL8gFMvEOTCmObUw94Ln6qHK5FbyThvQFvxzF7TMBc+YIVEAU 9qYKNNcB+kXOdkrSYVUjFFKfIWbczm/4XhvAv8GkZqbNKEJwkgyKi9bH ippRdD67TNBWoaij+Q8XvlwnHXP3xfiptcTuxtsx8zSlBzVvKMb2GvlL W/Uf6QR+eL5QstjrqOv6TCMPz5UBtEQbuPBiZWArdsERT/3WH8Qir6Rq sFGpVbXijVDFykKxR3Cjby5zB/iQGlAdxFUY2uwJvvVu1dR/WE/G2IoG OUsTMw== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 514226 IN A 198.41.0.4 31 | a.root-servers.net. 514226 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 514226 IN A 199.9.14.201 33 | b.root-servers.net. 514226 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 514226 IN A 192.33.4.12 35 | c.root-servers.net. 514226 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 514226 IN A 199.7.91.13 37 | d.root-servers.net. 514226 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 514226 IN A 192.203.230.10 39 | e.root-servers.net. 514226 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 514226 IN A 192.5.5.241 41 | f.root-servers.net. 514226 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 514226 IN A 192.112.36.4 43 | g.root-servers.net. 514226 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 514226 IN A 198.97.190.53 45 | h.root-servers.net. 514226 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 514226 IN A 192.36.148.17 47 | i.root-servers.net. 514226 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 514226 IN A 192.58.128.30 49 | j.root-servers.net. 514226 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 514226 IN A 193.0.14.129 51 | k.root-servers.net. 514226 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 514226 IN A 199.7.83.42 53 | l.root-servers.net. 514226 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 514226 IN A 202.12.27.33 55 | m.root-servers.net. 514226 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 17 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 08:03:58 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42788 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 4096 68 | ;; QUESTION SECTION: 69 | ;examplecat.com. IN A 70 | 71 | ;; AUTHORITY SECTION: 72 | com. 172800 IN NS a.gtld-servers.net. 73 | com. 172800 IN NS b.gtld-servers.net. 74 | com. 172800 IN NS c.gtld-servers.net. 75 | com. 172800 IN NS d.gtld-servers.net. 76 | com. 172800 IN NS e.gtld-servers.net. 77 | com. 172800 IN NS f.gtld-servers.net. 78 | com. 172800 IN NS g.gtld-servers.net. 79 | com. 172800 IN NS h.gtld-servers.net. 80 | com. 172800 IN NS i.gtld-servers.net. 81 | com. 172800 IN NS j.gtld-servers.net. 82 | com. 172800 IN NS k.gtld-servers.net. 83 | com. 172800 IN NS l.gtld-servers.net. 84 | com. 172800 IN NS m.gtld-servers.net. 85 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 86 | com. 86400 IN RRSIG DS 8 1 86400 20230913050000 20230831040000 11019 . SDSqlwjZKrqNVP2SV+cRQEaiBBNvx8tIP8+tbNmNGyi9LqcDEKCWB5J8 3qfhueg/Wg31In3vFA7InAoeCciGeBXegT+iNdPNRt+/L2oXk5WYteQI YpQ9TvjilFBmvbfrfoJUxCe4yQsN7cMsvOB17e9OpWAdZxTdjra7qT+I GkHCzIhWJJ0y1LlpqGOSwPff2N3QABYzndPE5K/8Jn0kQaXS4yPSKN/G 6uGag6wrdb3e6wcLwg0iOe0B7cjBODKJF1OfnfIjdjd59w8uQfK8Zs9z 4etaabDHVcYrLCtVZeRU3uZ8jDYhw7O6EqjBQYgUZkEMe5TDIML7M+CT eP70VQ== 87 | 88 | ;; ADDITIONAL SECTION: 89 | a.gtld-servers.net. 172800 IN A 192.5.6.30 90 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 91 | b.gtld-servers.net. 172800 IN A 192.33.14.30 92 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 93 | c.gtld-servers.net. 172800 IN A 192.26.92.30 94 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 95 | d.gtld-servers.net. 172800 IN A 192.31.80.30 96 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 97 | e.gtld-servers.net. 172800 IN A 192.12.94.30 98 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 99 | f.gtld-servers.net. 172800 IN A 192.35.51.30 100 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 101 | g.gtld-servers.net. 172800 IN A 192.42.93.30 102 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 103 | h.gtld-servers.net. 172800 IN A 192.54.112.30 104 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 105 | i.gtld-servers.net. 172800 IN A 192.43.172.30 106 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 107 | j.gtld-servers.net. 172800 IN A 192.48.79.30 108 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 109 | k.gtld-servers.net. 172800 IN A 192.52.178.30 110 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 111 | l.gtld-servers.net. 172800 IN A 192.41.162.30 112 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 113 | m.gtld-servers.net. 172800 IN A 192.55.83.30 114 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 115 | 116 | ;; Query time: 35 msec 117 | ;; SERVER: 199.7.83.42#53(l.root-servers.net) (UDP) 118 | ;; WHEN: Thu Aug 31 08:03:58 EDT 2023 119 | ;; MSG SIZE rcvd: 1174 120 | 121 | ;; Got answer: 122 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10198 123 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 1 124 | 125 | ;; OPT PSEUDOSECTION: 126 | ; EDNS: version: 0, flags: do; udp: 4096 127 | ;; QUESTION SECTION: 128 | ;examplecat.com. IN A 129 | 130 | ;; AUTHORITY SECTION: 131 | examplecat.com. 172800 IN NS ns-58-a.gandi.net. 132 | examplecat.com. 172800 IN NS ns-24-b.gandi.net. 133 | examplecat.com. 172800 IN NS ns-162-c.gandi.net. 134 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 135 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 136 | N2V4RJ4LTA0I5CFMVNDOIMH5BULMH5V1.com. 86400 IN NSEC3 1 1 0 - N2V55Q7LTKTEGD205TP4VPSI490PI443 NS DS RRSIG 137 | N2V4RJ4LTA0I5CFMVNDOIMH5BULMH5V1.com. 86400 IN RRSIG NSEC3 8 2 86400 20230904060746 20230828045746 4459 com. lFsgSoWMORn3G7Oqu1G/roGzlp4rUIeCymLo83soaubLBTVOUl3s3j71 QkiUBB/2og+6Or5WM3NosdDFZlgjqxiTAjQL/XF0q30MOLf0RZjLYgaA xHm90cd24ogSnXU4gaJFhMg01gGLgsoGLH34GG+LaHEylVFktAGTE9IW TbAeZsjdK27Au8Eooo2cZHkh+brtaTANs69uXjA+4xdJpQ== 138 | 139 | ;; Query time: 96 msec 140 | ;; SERVER: 192.31.80.30#53(d.gtld-servers.net) (UDP) 141 | ;; WHEN: Thu Aug 31 08:03:59 EDT 2023 142 | ;; MSG SIZE rcvd: 668 143 | 144 | ;; Got answer: 145 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26051 146 | ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 147 | 148 | ;; OPT PSEUDOSECTION: 149 | ; EDNS: version: 0, flags: do; udp: 1232 150 | ;; QUESTION SECTION: 151 | ;examplecat.com. IN A 152 | 153 | ;; ANSWER SECTION: 154 | examplecat.com. 300 IN A 208.94.117.43 155 | 156 | ;; Query time: 21 msec 157 | ;; SERVER: 173.246.100.59#53(ns-58-a.gandi.net) (UDP) 158 | ;; WHEN: Thu Aug 31 08:03:59 EDT 2023 159 | ;; MSG SIZE rcvd: 59 160 | 161 | -------------------------------------------------------------------------------- /testdata/example.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A example.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10811 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 511710 IN NS a.root-servers.net. 15 | . 511710 IN NS b.root-servers.net. 16 | . 511710 IN NS c.root-servers.net. 17 | . 511710 IN NS d.root-servers.net. 18 | . 511710 IN NS e.root-servers.net. 19 | . 511710 IN NS f.root-servers.net. 20 | . 511710 IN NS g.root-servers.net. 21 | . 511710 IN NS h.root-servers.net. 22 | . 511710 IN NS i.root-servers.net. 23 | . 511710 IN NS j.root-servers.net. 24 | . 511710 IN NS k.root-servers.net. 25 | . 511710 IN NS l.root-servers.net. 26 | . 511710 IN NS m.root-servers.net. 27 | . 511710 IN RRSIG NS 8 0 518400 20230913050000 20230831040000 11019 . sTegTb4O1m5gsG6/bNYMthI0KmGTq0sqyKzys6J9GjN05eew+r+hommx jkUk2k0SL8gFMvEOTCmObUw94Ln6qHK5FbyThvQFvxzF7TMBc+YIVEAU 9qYKNNcB+kXOdkrSYVUjFFKfIWbczm/4XhvAv8GkZqbNKEJwkgyKi9bH ippRdD67TNBWoaij+Q8XvlwnHXP3xfiptcTuxtsx8zSlBzVvKMb2GvlL W/Uf6QR+eL5QstjrqOv6TCMPz5UBtEQbuPBiZWArdsERT/3WH8Qir6Rq sFGpVbXijVDFykKxR3Cjby5zB/iQGlAdxFUY2uwJvvVu1dR/WE/G2IoG OUsTMw== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 511710 IN A 198.41.0.4 31 | a.root-servers.net. 511710 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 511710 IN A 199.9.14.201 33 | b.root-servers.net. 511710 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 511710 IN A 192.33.4.12 35 | c.root-servers.net. 511710 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 511710 IN A 199.7.91.13 37 | d.root-servers.net. 511710 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 511710 IN A 192.203.230.10 39 | e.root-servers.net. 511710 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 511710 IN A 192.5.5.241 41 | f.root-servers.net. 511710 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 511710 IN A 192.112.36.4 43 | g.root-servers.net. 511710 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 511710 IN A 198.97.190.53 45 | h.root-servers.net. 511710 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 511710 IN A 192.36.148.17 47 | i.root-servers.net. 511710 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 511710 IN A 192.58.128.30 49 | j.root-servers.net. 511710 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 511710 IN A 193.0.14.129 51 | k.root-servers.net. 511710 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 511710 IN A 199.7.83.42 53 | l.root-servers.net. 511710 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 511710 IN A 202.12.27.33 55 | m.root-servers.net. 511710 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 22 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 10:01:14 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11488 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1232 68 | ; COOKIE: 20a3119bb19465d50100000064f09d2b22a5ce25552b42c0 (good) 69 | ;; QUESTION SECTION: 70 | ;example.com. IN A 71 | 72 | ;; AUTHORITY SECTION: 73 | com. 172800 IN NS c.gtld-servers.net. 74 | com. 172800 IN NS m.gtld-servers.net. 75 | com. 172800 IN NS l.gtld-servers.net. 76 | com. 172800 IN NS b.gtld-servers.net. 77 | com. 172800 IN NS j.gtld-servers.net. 78 | com. 172800 IN NS i.gtld-servers.net. 79 | com. 172800 IN NS e.gtld-servers.net. 80 | com. 172800 IN NS d.gtld-servers.net. 81 | com. 172800 IN NS h.gtld-servers.net. 82 | com. 172800 IN NS f.gtld-servers.net. 83 | com. 172800 IN NS g.gtld-servers.net. 84 | com. 172800 IN NS k.gtld-servers.net. 85 | com. 172800 IN NS a.gtld-servers.net. 86 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 87 | com. 86400 IN RRSIG DS 8 1 86400 20230913130000 20230831120000 11019 . WEysarPyDRpInVdiVOqRuMRdwfFAy9OIWUBA+T2ogNdmYK9Lsax7zKZC n2h4Y4VTjIyN7YXh6uuCrWZf0Zcq/YOzib6PwWmTqzXTiNyEm/kKSP9f J1rC/BJWe0sBxvmInqG7hqOAvBzPohA2f03p8feO1ZfpGQduMHtGvOvr IMJ8VrWUaxqcqntV2AYeIVSPUAnEboiCCfS8eUgMQGV7TCcC8s1X/zXT FjU6Qw6bs98QV+KEoQbYnCFlGF0CyKyB506hXeywjFVVIFbabITHeQ4q C4CU+EId9g5o6XHvevTuazoXJixh1EaWs0/Om+Lh2NX7Z/K6xVJ3kzsE J0Twuw== 88 | 89 | ;; ADDITIONAL SECTION: 90 | m.gtld-servers.net. 172800 IN A 192.55.83.30 91 | l.gtld-servers.net. 172800 IN A 192.41.162.30 92 | k.gtld-servers.net. 172800 IN A 192.52.178.30 93 | j.gtld-servers.net. 172800 IN A 192.48.79.30 94 | i.gtld-servers.net. 172800 IN A 192.43.172.30 95 | h.gtld-servers.net. 172800 IN A 192.54.112.30 96 | g.gtld-servers.net. 172800 IN A 192.42.93.30 97 | f.gtld-servers.net. 172800 IN A 192.35.51.30 98 | e.gtld-servers.net. 172800 IN A 192.12.94.30 99 | d.gtld-servers.net. 172800 IN A 192.31.80.30 100 | c.gtld-servers.net. 172800 IN A 192.26.92.30 101 | b.gtld-servers.net. 172800 IN A 192.33.14.30 102 | a.gtld-servers.net. 172800 IN A 192.5.6.30 103 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 104 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 105 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 106 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 107 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 108 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 109 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 110 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 111 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 112 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 113 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 114 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 115 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 116 | 117 | ;; Query time: 25 msec 118 | ;; SERVER: 192.36.148.17#53(i.root-servers.net) (UDP) 119 | ;; WHEN: Thu Aug 31 10:01:15 EDT 2023 120 | ;; MSG SIZE rcvd: 1199 121 | 122 | ;; Got answer: 123 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19460 124 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1 125 | 126 | ;; OPT PSEUDOSECTION: 127 | ; EDNS: version: 0, flags: do; udp: 4096 128 | ;; QUESTION SECTION: 129 | ;example.com. IN A 130 | 131 | ;; AUTHORITY SECTION: 132 | example.com. 172800 IN NS a.iana-servers.net. 133 | example.com. 172800 IN NS b.iana-servers.net. 134 | example.com. 86400 IN DS 370 13 2 BE74359954660069D5C63D200C39F5603827D7DD02B56F120EE9F3A8 6764247C 135 | example.com. 86400 IN RRSIG DS 8 2 86400 20230906062331 20230830051331 4459 com. GMHHwISDn8Yh8+8Y/aTXu9XkZCobOWJ94nPPPYTvRvpUDJfMHV8k2aSO 9lW6xBjeaWtl9MVBRUKIh6CgLH+hZ/V0UHAROh6mt6jKa/3W35OqcULN 8aRsGujntVlByyD3/1Kxki0S8x+wbbymShuqmXC0KQy7Wl0mkimOCwZD +IDk1UhC5zjZnQjFKmJ4SVLb7ayOsbsoQoufx3BNk2kFig== 136 | 137 | ;; Query time: 43 msec 138 | ;; SERVER: 192.41.162.30#53(l.gtld-servers.net) (UDP) 139 | ;; WHEN: Thu Aug 31 10:01:15 EDT 2023 140 | ;; MSG SIZE rcvd: 331 141 | 142 | ;; Got answer: 143 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47868 144 | ;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 1 145 | 146 | ;; OPT PSEUDOSECTION: 147 | ; EDNS: version: 0, flags: do; udp: 4096 148 | ;; QUESTION SECTION: 149 | ;example.com. IN A 150 | 151 | ;; ANSWER SECTION: 152 | example.com. 86400 IN A 93.184.216.34 153 | example.com. 86400 IN RRSIG A 13 2 86400 20230909025252 20230819070125 2061 example.com. 8adF5DxheCltQ61A6m5kHUfzgsuhY3zPscP9YDB16sDn2bk6Rw7Fz+gI MiixWE2SkLFl7LWN5cLN7B/aGBGUlw== 154 | 155 | ;; AUTHORITY SECTION: 156 | example.com. 86400 IN NS a.iana-servers.net. 157 | example.com. 86400 IN NS b.iana-servers.net. 158 | example.com. 86400 IN RRSIG NS 13 2 86400 20230909053651 20230819070125 2061 example.com. BbDbIs5CLfsfydzBZOcDqZfwRo/YyDZKeKTs3C6RzGgcC5RpBaXYk7Oh XTZ3OjM3y7YDJVNtuPGcB8Ti7WlMZg== 159 | 160 | ;; Query time: 28 msec 161 | ;; SERVER: 199.43.133.53#53(b.iana-servers.net) (UDP) 162 | ;; WHEN: Thu Aug 31 10:01:15 EDT 2023 163 | ;; MSG SIZE rcvd: 318 164 | 165 | -------------------------------------------------------------------------------- /testdata/exampleffff.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A exampleffff.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56397 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 510883 IN NS a.root-servers.net. 15 | . 510883 IN NS b.root-servers.net. 16 | . 510883 IN NS c.root-servers.net. 17 | . 510883 IN NS d.root-servers.net. 18 | . 510883 IN NS e.root-servers.net. 19 | . 510883 IN NS f.root-servers.net. 20 | . 510883 IN NS g.root-servers.net. 21 | . 510883 IN NS h.root-servers.net. 22 | . 510883 IN NS i.root-servers.net. 23 | . 510883 IN NS j.root-servers.net. 24 | . 510883 IN NS k.root-servers.net. 25 | . 510883 IN NS l.root-servers.net. 26 | . 510883 IN NS m.root-servers.net. 27 | . 510883 IN RRSIG NS 8 0 518400 20230913050000 20230831040000 11019 . sTegTb4O1m5gsG6/bNYMthI0KmGTq0sqyKzys6J9GjN05eew+r+hommx jkUk2k0SL8gFMvEOTCmObUw94Ln6qHK5FbyThvQFvxzF7TMBc+YIVEAU 9qYKNNcB+kXOdkrSYVUjFFKfIWbczm/4XhvAv8GkZqbNKEJwkgyKi9bH ippRdD67TNBWoaij+Q8XvlwnHXP3xfiptcTuxtsx8zSlBzVvKMb2GvlL W/Uf6QR+eL5QstjrqOv6TCMPz5UBtEQbuPBiZWArdsERT/3WH8Qir6Rq sFGpVbXijVDFykKxR3Cjby5zB/iQGlAdxFUY2uwJvvVu1dR/WE/G2IoG OUsTMw== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 510883 IN A 198.41.0.4 31 | a.root-servers.net. 510883 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 510883 IN A 199.9.14.201 33 | b.root-servers.net. 510883 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 510883 IN A 192.33.4.12 35 | c.root-servers.net. 510883 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 510883 IN A 199.7.91.13 37 | d.root-servers.net. 510883 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 510883 IN A 192.203.230.10 39 | e.root-servers.net. 510883 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 510883 IN A 192.5.5.241 41 | f.root-servers.net. 510883 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 510883 IN A 192.112.36.4 43 | g.root-servers.net. 510883 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 510883 IN A 198.97.190.53 45 | h.root-servers.net. 510883 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 510883 IN A 192.36.148.17 47 | i.root-servers.net. 510883 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 510883 IN A 192.58.128.30 49 | j.root-servers.net. 510883 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 510883 IN A 193.0.14.129 51 | k.root-servers.net. 510883 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 510883 IN A 199.7.83.42 53 | l.root-servers.net. 510883 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 510883 IN A 202.12.27.33 55 | m.root-servers.net. 510883 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 63 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 07:07:08 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11450 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1232 68 | ;; QUESTION SECTION: 69 | ;exampleffff.com. IN A 70 | 71 | ;; AUTHORITY SECTION: 72 | com. 172800 IN NS a.gtld-servers.net. 73 | com. 172800 IN NS h.gtld-servers.net. 74 | com. 172800 IN NS j.gtld-servers.net. 75 | com. 172800 IN NS f.gtld-servers.net. 76 | com. 172800 IN NS b.gtld-servers.net. 77 | com. 172800 IN NS l.gtld-servers.net. 78 | com. 172800 IN NS c.gtld-servers.net. 79 | com. 172800 IN NS e.gtld-servers.net. 80 | com. 172800 IN NS k.gtld-servers.net. 81 | com. 172800 IN NS d.gtld-servers.net. 82 | com. 172800 IN NS i.gtld-servers.net. 83 | com. 172800 IN NS g.gtld-servers.net. 84 | com. 172800 IN NS m.gtld-servers.net. 85 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 86 | com. 86400 IN RRSIG DS 8 1 86400 20230913050000 20230831040000 11019 . SDSqlwjZKrqNVP2SV+cRQEaiBBNvx8tIP8+tbNmNGyi9LqcDEKCWB5J8 3qfhueg/Wg31In3vFA7InAoeCciGeBXegT+iNdPNRt+/L2oXk5WYteQI YpQ9TvjilFBmvbfrfoJUxCe4yQsN7cMsvOB17e9OpWAdZxTdjra7qT+I GkHCzIhWJJ0y1LlpqGOSwPff2N3QABYzndPE5K/8Jn0kQaXS4yPSKN/G 6uGag6wrdb3e6wcLwg0iOe0B7cjBODKJF1OfnfIjdjd59w8uQfK8Zs9z 4etaabDHVcYrLCtVZeRU3uZ8jDYhw7O6EqjBQYgUZkEMe5TDIML7M+CT eP70VQ== 87 | 88 | ;; ADDITIONAL SECTION: 89 | m.gtld-servers.net. 172800 IN A 192.55.83.30 90 | l.gtld-servers.net. 172800 IN A 192.41.162.30 91 | k.gtld-servers.net. 172800 IN A 192.52.178.30 92 | j.gtld-servers.net. 172800 IN A 192.48.79.30 93 | i.gtld-servers.net. 172800 IN A 192.43.172.30 94 | h.gtld-servers.net. 172800 IN A 192.54.112.30 95 | g.gtld-servers.net. 172800 IN A 192.42.93.30 96 | f.gtld-servers.net. 172800 IN A 192.35.51.30 97 | e.gtld-servers.net. 172800 IN A 192.12.94.30 98 | d.gtld-servers.net. 172800 IN A 192.31.80.30 99 | c.gtld-servers.net. 172800 IN A 192.26.92.30 100 | b.gtld-servers.net. 172800 IN A 192.33.14.30 101 | a.gtld-servers.net. 172800 IN A 192.5.6.30 102 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 103 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 104 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 105 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 106 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 107 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 108 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 109 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 110 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 111 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 112 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 113 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 114 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 115 | 116 | ;; Query time: 75 msec 117 | ;; SERVER: 202.12.27.33#53(m.root-servers.net) (UDP) 118 | ;; WHEN: Thu Aug 31 07:07:08 EDT 2023 119 | ;; MSG SIZE rcvd: 1175 120 | 121 | ;; Got answer: 122 | ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 15273 123 | ;; flags: qr aa; QUERY: 1, ANSWER: 0, AUTHORITY: 8, ADDITIONAL: 1 124 | 125 | ;; OPT PSEUDOSECTION: 126 | ; EDNS: version: 0, flags: do; udp: 4096 127 | ;; QUESTION SECTION: 128 | ;exampleffff.com. IN A 129 | 130 | ;; AUTHORITY SECTION: 131 | com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1693480003 1800 900 604800 86400 132 | com. 900 IN RRSIG SOA 8 1 900 20230907110643 20230831095643 4459 com. OGy8cuqdzP9npIeOipHfPmV+0TToLOUXUnYNAQLybxSW+nRBKI0js+Be nBHblTbGA3qSgnh61bK780yVIshyZPHanKHMBlxy0CZqWm8iGvyXMyrh qzmZLxeuvlF/vGlDAk0sTwWPOTUgXF3vDmn0rPuDQud7y+kA5OcW7GcC H4WNB9G+9W1BxBpPENyifdfPsT7IB/mD+Rgy0ZcTp28X2Q== 133 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 134 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 135 | VBLR7D3JMR4T47N0R8V92RS2L4MLAI8F.com. 86400 IN NSEC3 1 1 0 - VBLRF827N43SSBGETHQ8S22GN8SPFCIS NS DS RRSIG 136 | VBLR7D3JMR4T47N0R8V92RS2L4MLAI8F.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907064805 20230831053805 4459 com. i54pamYM/hgKYqGqH8nvtsHwd55cVA5ejQgDZ1Xdx+2/wvH8YDdVm2kv rRRv1qF9sgkVydZ6yAEl/XdkvwZAJszsriWUcichO8AmEkBJbs+Y5BaV AcJwNDxghxS6Vw04ahAovoUtyOiBmxoQR32tiYqmzPTzoSidQSHgVah6 OGzSTobWyRcrLrg7kj70EAztH7MZopggZBYCiXhHBlQ77w== 137 | 3RL2Q58205687C8I9KC9MV46DGHCNS45.com. 86400 IN NSEC3 1 1 0 - 3RL2SHVUMC300IUC2TDL4VML2HNF0O7I NS DS RRSIG 138 | 3RL2Q58205687C8I9KC9MV46DGHCNS45.com. 86400 IN RRSIG NSEC3 8 2 86400 20230906041620 20230830030620 4459 com. JbuPqq8s5CVbVMIszuuBgWrIXBLOUospJW1Reekzdao3VF33jA1yXRc6 hk6FAPSrWqzD0+QionGYpljH7Befe55stN0BO5CaGRV9BMKAu28yzxSA 1beL1ClsSvqQrdKohCHi+HVQHGDbO5YwUwhyBvm9nxnddCalXGL6ELUj jVhykmy1Jxv4JdRLt0T6QC9eqO1R8QdTFUw7ggpMBlHiyQ== 139 | 140 | ;; Query time: 34 msec 141 | ;; SERVER: 192.54.112.30#53(h.gtld-servers.net) (UDP) 142 | ;; WHEN: Thu Aug 31 07:07:08 EDT 2023 143 | ;; MSG SIZE rcvd: 1135 144 | 145 | -------------------------------------------------------------------------------- /testdata/examplefffffff.com._A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A examplefffffff.com. 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50094 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 513535 IN NS a.root-servers.net. 15 | . 513535 IN NS b.root-servers.net. 16 | . 513535 IN NS c.root-servers.net. 17 | . 513535 IN NS d.root-servers.net. 18 | . 513535 IN NS e.root-servers.net. 19 | . 513535 IN NS f.root-servers.net. 20 | . 513535 IN NS g.root-servers.net. 21 | . 513535 IN NS h.root-servers.net. 22 | . 513535 IN NS i.root-servers.net. 23 | . 513535 IN NS j.root-servers.net. 24 | . 513535 IN NS k.root-servers.net. 25 | . 513535 IN NS l.root-servers.net. 26 | . 513535 IN NS m.root-servers.net. 27 | . 513535 IN RRSIG NS 8 0 518400 20230913050000 20230831040000 11019 . sTegTb4O1m5gsG6/bNYMthI0KmGTq0sqyKzys6J9GjN05eew+r+hommx jkUk2k0SL8gFMvEOTCmObUw94Ln6qHK5FbyThvQFvxzF7TMBc+YIVEAU 9qYKNNcB+kXOdkrSYVUjFFKfIWbczm/4XhvAv8GkZqbNKEJwkgyKi9bH ippRdD67TNBWoaij+Q8XvlwnHXP3xfiptcTuxtsx8zSlBzVvKMb2GvlL W/Uf6QR+eL5QstjrqOv6TCMPz5UBtEQbuPBiZWArdsERT/3WH8Qir6Rq sFGpVbXijVDFykKxR3Cjby5zB/iQGlAdxFUY2uwJvvVu1dR/WE/G2IoG OUsTMw== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 513535 IN A 198.41.0.4 31 | a.root-servers.net. 513535 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 513535 IN A 199.9.14.201 33 | b.root-servers.net. 513535 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 513535 IN A 192.33.4.12 35 | c.root-servers.net. 513535 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 513535 IN A 199.7.91.13 37 | d.root-servers.net. 513535 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 513535 IN A 192.203.230.10 39 | e.root-servers.net. 513535 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 513535 IN A 192.5.5.241 41 | f.root-servers.net. 513535 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 513535 IN A 192.112.36.4 43 | g.root-servers.net. 513535 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 513535 IN A 198.97.190.53 45 | h.root-servers.net. 513535 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 513535 IN A 192.36.148.17 47 | i.root-servers.net. 513535 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 513535 IN A 192.58.128.30 49 | j.root-servers.net. 513535 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 513535 IN A 193.0.14.129 51 | k.root-servers.net. 513535 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 513535 IN A 199.7.83.42 53 | l.root-servers.net. 513535 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 513535 IN A 202.12.27.33 55 | m.root-servers.net. 513535 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 22 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 07:49:30 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65141 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1232 68 | ; COOKIE: cff1542fe9ad79a10100000064f07e4a219b48bf67b7a7fd (good) 69 | ;; QUESTION SECTION: 70 | ;examplefffffff.com. IN A 71 | 72 | ;; AUTHORITY SECTION: 73 | com. 172800 IN NS l.gtld-servers.net. 74 | com. 172800 IN NS g.gtld-servers.net. 75 | com. 172800 IN NS b.gtld-servers.net. 76 | com. 172800 IN NS i.gtld-servers.net. 77 | com. 172800 IN NS j.gtld-servers.net. 78 | com. 172800 IN NS k.gtld-servers.net. 79 | com. 172800 IN NS h.gtld-servers.net. 80 | com. 172800 IN NS m.gtld-servers.net. 81 | com. 172800 IN NS d.gtld-servers.net. 82 | com. 172800 IN NS f.gtld-servers.net. 83 | com. 172800 IN NS c.gtld-servers.net. 84 | com. 172800 IN NS e.gtld-servers.net. 85 | com. 172800 IN NS a.gtld-servers.net. 86 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 87 | com. 86400 IN RRSIG DS 8 1 86400 20230913050000 20230831040000 11019 . SDSqlwjZKrqNVP2SV+cRQEaiBBNvx8tIP8+tbNmNGyi9LqcDEKCWB5J8 3qfhueg/Wg31In3vFA7InAoeCciGeBXegT+iNdPNRt+/L2oXk5WYteQI YpQ9TvjilFBmvbfrfoJUxCe4yQsN7cMsvOB17e9OpWAdZxTdjra7qT+I GkHCzIhWJJ0y1LlpqGOSwPff2N3QABYzndPE5K/8Jn0kQaXS4yPSKN/G 6uGag6wrdb3e6wcLwg0iOe0B7cjBODKJF1OfnfIjdjd59w8uQfK8Zs9z 4etaabDHVcYrLCtVZeRU3uZ8jDYhw7O6EqjBQYgUZkEMe5TDIML7M+CT eP70VQ== 88 | 89 | ;; ADDITIONAL SECTION: 90 | m.gtld-servers.net. 172800 IN A 192.55.83.30 91 | l.gtld-servers.net. 172800 IN A 192.41.162.30 92 | k.gtld-servers.net. 172800 IN A 192.52.178.30 93 | j.gtld-servers.net. 172800 IN A 192.48.79.30 94 | i.gtld-servers.net. 172800 IN A 192.43.172.30 95 | h.gtld-servers.net. 172800 IN A 192.54.112.30 96 | g.gtld-servers.net. 172800 IN A 192.42.93.30 97 | f.gtld-servers.net. 172800 IN A 192.35.51.30 98 | e.gtld-servers.net. 172800 IN A 192.12.94.30 99 | d.gtld-servers.net. 172800 IN A 192.31.80.30 100 | c.gtld-servers.net. 172800 IN A 192.26.92.30 101 | b.gtld-servers.net. 172800 IN A 192.33.14.30 102 | a.gtld-servers.net. 172800 IN A 192.5.6.30 103 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 104 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 105 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 106 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 107 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 108 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 109 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 110 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 111 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 112 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 113 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 114 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 115 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 116 | 117 | ;; Query time: 21 msec 118 | ;; SERVER: 192.33.4.12#53(c.root-servers.net) (UDP) 119 | ;; WHEN: Thu Aug 31 07:49:30 EDT 2023 120 | ;; MSG SIZE rcvd: 1206 121 | 122 | ;; Got answer: 123 | ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 32456 124 | ;; flags: qr aa; QUERY: 1, ANSWER: 0, AUTHORITY: 8, ADDITIONAL: 1 125 | 126 | ;; OPT PSEUDOSECTION: 127 | ; EDNS: version: 0, flags: do; udp: 4096 128 | ;; QUESTION SECTION: 129 | ;examplefffffff.com. IN A 130 | 131 | ;; AUTHORITY SECTION: 132 | com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1693482543 1800 900 604800 86400 133 | com. 900 IN RRSIG SOA 8 1 900 20230907114903 20230831103903 4459 com. UsKSFHLNAQwXBj1+AOFqEd/iRvZRPzD/g/jbl+eKSwZTyThS85kjNHZ2 qly8JZP6TbP8Sh6MQXKjg1NraciWrNGler7wpAcxdSQfglZrlbW1Hpaw QQOSuuzE/TZzl0LgVWUDJ7grnSKbZN1Uii7ANqQftVRfxLvN7uoBsfAe h/Bn+oNEH/+EOsTUbVMSZPVgOrdXn+frlEqb3Zgt5O+Urg== 134 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 135 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 136 | EQ7H0TG565QU5MK17I01B7EBJSAOKEEE.com. 86400 IN NSEC3 1 1 0 - EQ7HGJJCSKHLE3SQIGRDU6O88H1OHB6K NS DS RRSIG 137 | EQ7H0TG565QU5MK17I01B7EBJSAOKEEE.com. 86400 IN RRSIG NSEC3 8 2 86400 20230906054708 20230830043708 4459 com. U5UI4yPyCyGvRTfNY9dB5Veh2fOwDhiKtJvPlsezdHqNthGoW6R+HxYS mrvQuGkIoKS5yA+UEU/i3VuOCNZfwS3zZDavDmLUoBmusAbIz9PWN1ns I69cSLuw70bTYRk4iAAqXHnLJ5Tq4K5IBU0G0LZnzVYXwNtQWJLGhll6 onoMrnr6W62IW1wHTY5j8kUf+dMiB5dOzXqitaMA5SSbwA== 138 | 3RL2Q58205687C8I9KC9MV46DGHCNS45.com. 86400 IN NSEC3 1 1 0 - 3RL2SHVUMC300IUC2TDL4VML2HNF0O7I NS DS RRSIG 139 | 3RL2Q58205687C8I9KC9MV46DGHCNS45.com. 86400 IN RRSIG NSEC3 8 2 86400 20230906041620 20230830030620 4459 com. JbuPqq8s5CVbVMIszuuBgWrIXBLOUospJW1Reekzdao3VF33jA1yXRc6 hk6FAPSrWqzD0+QionGYpljH7Befe55stN0BO5CaGRV9BMKAu28yzxSA 1beL1ClsSvqQrdKohCHi+HVQHGDbO5YwUwhyBvm9nxnddCalXGL6ELUj jVhykmy1Jxv4JdRLt0T6QC9eqO1R8QdTFUw7ggpMBlHiyQ== 140 | 141 | ;; Query time: 28 msec 142 | ;; SERVER: 192.41.162.30#53(l.gtld-servers.net) (UDP) 143 | ;; WHEN: Thu Aug 31 07:49:30 EDT 2023 144 | ;; MSG SIZE rcvd: 1138 145 | 146 | -------------------------------------------------------------------------------- /testdata/cnameroot.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A cnameroot.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8917 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 516727 IN NS a.root-servers.net. 15 | . 516727 IN NS b.root-servers.net. 16 | . 516727 IN NS c.root-servers.net. 17 | . 516727 IN NS d.root-servers.net. 18 | . 516727 IN NS e.root-servers.net. 19 | . 516727 IN NS f.root-servers.net. 20 | . 516727 IN NS g.root-servers.net. 21 | . 516727 IN NS h.root-servers.net. 22 | . 516727 IN NS i.root-servers.net. 23 | . 516727 IN NS j.root-servers.net. 24 | . 516727 IN NS k.root-servers.net. 25 | . 516727 IN NS l.root-servers.net. 26 | . 516727 IN NS m.root-servers.net. 27 | . 516727 IN RRSIG NS 8 0 518400 20230913130000 20230831120000 11019 . OLBV/JPi7VlovCQuxwGYBeAmOFfh4Qc0sV1d7kpbpFCNF5doOeVhY8DR dA5gr9dIpyZvBvIbpxtS8KNGL4dvmIwMpU640B7F4wv5pkM6lU/RNHZa AYqaK0QITIJKJdYnQk3h0+wcmnoZyFIhUYOBBy8k3TPXf45AzkyI/rBb GIU49OHCGZAz2nAtj/ETw9w5lyt8JmzInkyDqQ41t8Z6L948ADCsvO/a YnOKMeiPV4Zhljy5GNwdKrs1dzmScdZ8dm6qmwk6Mpou7+7JBi7C1r7z faamXu736lS5KauKUUZ44oyNuceMnahoO37qmUNtAcMC4BH+wYFsdQNe e3JveQ== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 516727 IN A 198.41.0.4 31 | a.root-servers.net. 516727 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 516727 IN A 199.9.14.201 33 | b.root-servers.net. 516727 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 516727 IN A 192.33.4.12 35 | c.root-servers.net. 516727 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 516727 IN A 199.7.91.13 37 | d.root-servers.net. 516727 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 516727 IN A 192.203.230.10 39 | e.root-servers.net. 516727 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 516727 IN A 192.5.5.241 41 | f.root-servers.net. 516727 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 516727 IN A 192.112.36.4 43 | g.root-servers.net. 516727 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 516727 IN A 198.97.190.53 45 | h.root-servers.net. 516727 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 516727 IN A 192.36.148.17 47 | i.root-servers.net. 516727 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 516727 IN A 192.58.128.30 49 | j.root-servers.net. 516727 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 516727 IN A 193.0.14.129 51 | k.root-servers.net. 516727 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 516727 IN A 199.7.83.42 53 | l.root-servers.net. 516727 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 516727 IN A 202.12.27.33 55 | m.root-servers.net. 516727 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 27 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 12:00:50 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33556 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 4096 68 | ;; QUESTION SECTION: 69 | ;cnameroot.com. IN A 70 | 71 | ;; AUTHORITY SECTION: 72 | com. 172800 IN NS e.gtld-servers.net. 73 | com. 172800 IN NS b.gtld-servers.net. 74 | com. 172800 IN NS j.gtld-servers.net. 75 | com. 172800 IN NS m.gtld-servers.net. 76 | com. 172800 IN NS i.gtld-servers.net. 77 | com. 172800 IN NS f.gtld-servers.net. 78 | com. 172800 IN NS a.gtld-servers.net. 79 | com. 172800 IN NS g.gtld-servers.net. 80 | com. 172800 IN NS h.gtld-servers.net. 81 | com. 172800 IN NS l.gtld-servers.net. 82 | com. 172800 IN NS k.gtld-servers.net. 83 | com. 172800 IN NS c.gtld-servers.net. 84 | com. 172800 IN NS d.gtld-servers.net. 85 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 86 | com. 86400 IN RRSIG DS 8 1 86400 20230913130000 20230831120000 11019 . WEysarPyDRpInVdiVOqRuMRdwfFAy9OIWUBA+T2ogNdmYK9Lsax7zKZC n2h4Y4VTjIyN7YXh6uuCrWZf0Zcq/YOzib6PwWmTqzXTiNyEm/kKSP9f J1rC/BJWe0sBxvmInqG7hqOAvBzPohA2f03p8feO1ZfpGQduMHtGvOvr IMJ8VrWUaxqcqntV2AYeIVSPUAnEboiCCfS8eUgMQGV7TCcC8s1X/zXT FjU6Qw6bs98QV+KEoQbYnCFlGF0CyKyB506hXeywjFVVIFbabITHeQ4q C4CU+EId9g5o6XHvevTuazoXJixh1EaWs0/Om+Lh2NX7Z/K6xVJ3kzsE J0Twuw== 87 | 88 | ;; ADDITIONAL SECTION: 89 | e.gtld-servers.net. 172800 IN A 192.12.94.30 90 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 91 | b.gtld-servers.net. 172800 IN A 192.33.14.30 92 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 93 | j.gtld-servers.net. 172800 IN A 192.48.79.30 94 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 95 | m.gtld-servers.net. 172800 IN A 192.55.83.30 96 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 97 | i.gtld-servers.net. 172800 IN A 192.43.172.30 98 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 99 | f.gtld-servers.net. 172800 IN A 192.35.51.30 100 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 101 | a.gtld-servers.net. 172800 IN A 192.5.6.30 102 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 103 | g.gtld-servers.net. 172800 IN A 192.42.93.30 104 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 105 | h.gtld-servers.net. 172800 IN A 192.54.112.30 106 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 107 | l.gtld-servers.net. 172800 IN A 192.41.162.30 108 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 109 | k.gtld-servers.net. 172800 IN A 192.52.178.30 110 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 111 | c.gtld-servers.net. 172800 IN A 192.26.92.30 112 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 113 | d.gtld-servers.net. 172800 IN A 192.31.80.30 114 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 115 | 116 | ;; Query time: 27 msec 117 | ;; SERVER: 192.58.128.30#53(j.root-servers.net) (UDP) 118 | ;; WHEN: Thu Aug 31 12:00:50 EDT 2023 119 | ;; MSG SIZE rcvd: 1173 120 | 121 | ;; Got answer: 122 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52748 123 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 5 124 | 125 | ;; OPT PSEUDOSECTION: 126 | ; EDNS: version: 0, flags: do; udp: 4096 127 | ;; QUESTION SECTION: 128 | ;cnameroot.com. IN A 129 | 130 | ;; AUTHORITY SECTION: 131 | cnameroot.com. 172800 IN NS dns1.registrar-servers.com. 132 | cnameroot.com. 172800 IN NS dns2.registrar-servers.com. 133 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 134 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 135 | H4FK6O0RM9JUOA3N3SD27QUE07R09H43.com. 86400 IN NSEC3 1 1 0 - H4FKNLNQLA4VLFB165H7J36MBDQEP3O5 NS DS RRSIG 136 | H4FK6O0RM9JUOA3N3SD27QUE07R09H43.com. 86400 IN RRSIG NSEC3 8 2 86400 20230905064654 20230829053654 4459 com. ZPims4Di/W3Z/R+1mktRxsSaL5kSA17pmMoiz7sSsGo0792z0OiNhj0k 6g3Xlpxo2vlBLd6L8VoPRNB7TpKzwRpsJvUhN3tjPSt3B9rl5AoBuodw L1YlyiGkHDpj311DAHgGKFHuntRjB2e7ltNNAjakZChidm2tbXwBkDME 4x07ENqvIYwYWoFjJQtKJftPj2pQolhveX8/uylS/xX0AQ== 137 | 138 | ;; ADDITIONAL SECTION: 139 | dns1.registrar-servers.com. 172800 IN A 156.154.132.200 140 | dns1.registrar-servers.com. 172800 IN AAAA 2610:a1:1024::200 141 | dns2.registrar-servers.com. 172800 IN A 156.154.133.200 142 | dns2.registrar-servers.com. 172800 IN AAAA 2610:a1:1025::200 143 | 144 | ;; Query time: 99 msec 145 | ;; SERVER: 192.26.92.30#53(c.gtld-servers.net) (UDP) 146 | ;; WHEN: Thu Aug 31 12:00:50 EDT 2023 147 | ;; MSG SIZE rcvd: 735 148 | 149 | ;; Got answer: 150 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45797 151 | ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 152 | 153 | ;; OPT PSEUDOSECTION: 154 | ; EDNS: version: 0, flags: do; udp: 4096 155 | ;; QUESTION SECTION: 156 | ;cnameroot.com. IN A 157 | 158 | ;; ANSWER SECTION: 159 | cnameroot.com. 300 IN CNAME examplecat.com. 160 | 161 | ;; Query time: 29 msec 162 | ;; SERVER: 156.154.132.200#53(dns1.registrar-servers.com) (UDP) 163 | ;; WHEN: Thu Aug 31 12:00:50 EDT 2023 164 | ;; MSG SIZE rcvd: 67 165 | 166 | -------------------------------------------------------------------------------- /testdata/github.com._A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A github.com. 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19773 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 517014 IN NS a.root-servers.net. 15 | . 517014 IN NS b.root-servers.net. 16 | . 517014 IN NS c.root-servers.net. 17 | . 517014 IN NS d.root-servers.net. 18 | . 517014 IN NS e.root-servers.net. 19 | . 517014 IN NS f.root-servers.net. 20 | . 517014 IN NS g.root-servers.net. 21 | . 517014 IN NS h.root-servers.net. 22 | . 517014 IN NS i.root-servers.net. 23 | . 517014 IN NS j.root-servers.net. 24 | . 517014 IN NS k.root-servers.net. 25 | . 517014 IN NS l.root-servers.net. 26 | . 517014 IN NS m.root-servers.net. 27 | . 517014 IN RRSIG NS 8 0 518400 20230913130000 20230831120000 11019 . OLBV/JPi7VlovCQuxwGYBeAmOFfh4Qc0sV1d7kpbpFCNF5doOeVhY8DR dA5gr9dIpyZvBvIbpxtS8KNGL4dvmIwMpU640B7F4wv5pkM6lU/RNHZa AYqaK0QITIJKJdYnQk3h0+wcmnoZyFIhUYOBBy8k3TPXf45AzkyI/rBb GIU49OHCGZAz2nAtj/ETw9w5lyt8JmzInkyDqQ41t8Z6L948ADCsvO/a YnOKMeiPV4Zhljy5GNwdKrs1dzmScdZ8dm6qmwk6Mpou7+7JBi7C1r7z faamXu736lS5KauKUUZ44oyNuceMnahoO37qmUNtAcMC4BH+wYFsdQNe e3JveQ== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 517014 IN A 198.41.0.4 31 | a.root-servers.net. 517014 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 517014 IN A 199.9.14.201 33 | b.root-servers.net. 517014 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 517014 IN A 192.33.4.12 35 | c.root-servers.net. 517014 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 517014 IN A 199.7.91.13 37 | d.root-servers.net. 517014 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 517014 IN A 192.203.230.10 39 | e.root-servers.net. 517014 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 517014 IN A 192.5.5.241 41 | f.root-servers.net. 517014 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 517014 IN A 192.112.36.4 43 | g.root-servers.net. 517014 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 517014 IN A 198.97.190.53 45 | h.root-servers.net. 517014 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 517014 IN A 192.36.148.17 47 | i.root-servers.net. 517014 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 517014 IN A 192.58.128.30 49 | j.root-servers.net. 517014 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 517014 IN A 193.0.14.129 51 | k.root-servers.net. 517014 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 517014 IN A 199.7.83.42 53 | l.root-servers.net. 517014 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 517014 IN A 202.12.27.33 55 | m.root-servers.net. 517014 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 30 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 12:04:00 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19780 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1232 68 | ;; QUESTION SECTION: 69 | ;github.com. IN A 70 | 71 | ;; AUTHORITY SECTION: 72 | com. 172800 IN NS l.gtld-servers.net. 73 | com. 172800 IN NS k.gtld-servers.net. 74 | com. 172800 IN NS h.gtld-servers.net. 75 | com. 172800 IN NS e.gtld-servers.net. 76 | com. 172800 IN NS b.gtld-servers.net. 77 | com. 172800 IN NS g.gtld-servers.net. 78 | com. 172800 IN NS c.gtld-servers.net. 79 | com. 172800 IN NS d.gtld-servers.net. 80 | com. 172800 IN NS j.gtld-servers.net. 81 | com. 172800 IN NS f.gtld-servers.net. 82 | com. 172800 IN NS i.gtld-servers.net. 83 | com. 172800 IN NS m.gtld-servers.net. 84 | com. 172800 IN NS a.gtld-servers.net. 85 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 86 | com. 86400 IN RRSIG DS 8 1 86400 20230913130000 20230831120000 11019 . WEysarPyDRpInVdiVOqRuMRdwfFAy9OIWUBA+T2ogNdmYK9Lsax7zKZC n2h4Y4VTjIyN7YXh6uuCrWZf0Zcq/YOzib6PwWmTqzXTiNyEm/kKSP9f J1rC/BJWe0sBxvmInqG7hqOAvBzPohA2f03p8feO1ZfpGQduMHtGvOvr IMJ8VrWUaxqcqntV2AYeIVSPUAnEboiCCfS8eUgMQGV7TCcC8s1X/zXT FjU6Qw6bs98QV+KEoQbYnCFlGF0CyKyB506hXeywjFVVIFbabITHeQ4q C4CU+EId9g5o6XHvevTuazoXJixh1EaWs0/Om+Lh2NX7Z/K6xVJ3kzsE J0Twuw== 87 | 88 | ;; ADDITIONAL SECTION: 89 | m.gtld-servers.net. 172800 IN A 192.55.83.30 90 | l.gtld-servers.net. 172800 IN A 192.41.162.30 91 | k.gtld-servers.net. 172800 IN A 192.52.178.30 92 | j.gtld-servers.net. 172800 IN A 192.48.79.30 93 | i.gtld-servers.net. 172800 IN A 192.43.172.30 94 | h.gtld-servers.net. 172800 IN A 192.54.112.30 95 | g.gtld-servers.net. 172800 IN A 192.42.93.30 96 | f.gtld-servers.net. 172800 IN A 192.35.51.30 97 | e.gtld-servers.net. 172800 IN A 192.12.94.30 98 | d.gtld-servers.net. 172800 IN A 192.31.80.30 99 | c.gtld-servers.net. 172800 IN A 192.26.92.30 100 | b.gtld-servers.net. 172800 IN A 192.33.14.30 101 | a.gtld-servers.net. 172800 IN A 192.5.6.30 102 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 103 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 104 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 105 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 106 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 107 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 108 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 109 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 110 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 111 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 112 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 113 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 114 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 115 | 116 | ;; Query time: 90 msec 117 | ;; SERVER: 202.12.27.33#53(m.root-servers.net) (UDP) 118 | ;; WHEN: Thu Aug 31 12:04:01 EDT 2023 119 | ;; MSG SIZE rcvd: 1170 120 | 121 | ;; Got answer: 122 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39869 123 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 12, ADDITIONAL: 2 124 | 125 | ;; OPT PSEUDOSECTION: 126 | ; EDNS: version: 0, flags: do; udp: 4096 127 | ;; QUESTION SECTION: 128 | ;github.com. IN A 129 | 130 | ;; AUTHORITY SECTION: 131 | github.com. 172800 IN NS ns-520.awsdns-01.net. 132 | github.com. 172800 IN NS ns-421.awsdns-52.com. 133 | github.com. 172800 IN NS ns-1707.awsdns-21.co.uk. 134 | github.com. 172800 IN NS ns-1283.awsdns-32.org. 135 | github.com. 172800 IN NS dns1.p08.nsone.net. 136 | github.com. 172800 IN NS dns2.p08.nsone.net. 137 | github.com. 172800 IN NS dns3.p08.nsone.net. 138 | github.com. 172800 IN NS dns4.p08.nsone.net. 139 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 140 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 141 | 4KB4DFS71LEP8G8P8VT4CCUSQNL4CNCS.com. 86400 IN NSEC3 1 1 0 - 4KB4PTQQ5CTA7POCTGM7RUFC8B1RKTEU NS DS RRSIG 142 | 4KB4DFS71LEP8G8P8VT4CCUSQNL4CNCS.com. 86400 IN RRSIG NSEC3 8 2 86400 20230904045825 20230828034825 4459 com. BXuaqjYx8Q4NQZJPtnBTXsXdBF5bWOFO2Y8EV4OTTFb7+++mJdg4AqwW MjJWFVpDXJhjQdsk+AVvcjX5npLkFLrZgSgUVoguGOViyurzIg2ePSrx 6T17xxEW/+K2+qUFLVikR59d2XWelafw5uAwpPQIRln026iTvrqINogT 4yc1TvWYuc1HAp3Q12+8osus/PuI3byByHFkXhT8V/eiuA== 143 | 144 | ;; ADDITIONAL SECTION: 145 | ns-421.awsdns-52.com. 172800 IN A 205.251.193.165 146 | 147 | ;; Query time: 90 msec 148 | ;; SERVER: 192.5.6.30#53(a.gtld-servers.net) (UDP) 149 | ;; WHEN: Thu Aug 31 12:04:01 EDT 2023 150 | ;; MSG SIZE rcvd: 827 151 | 152 | ;; Got answer: 153 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25250 154 | ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 155 | 156 | ;; OPT PSEUDOSECTION: 157 | ; EDNS: version: 0, flags: do; udp: 1232 158 | ;; QUESTION SECTION: 159 | ;github.com. IN A 160 | 161 | ;; ANSWER SECTION: 162 | github.com. 60 IN A 140.82.112.3 163 | 164 | ;; Query time: 27 msec 165 | ;; SERVER: 198.51.45.72#53(dns4.p08.nsone.net) (UDP) 166 | ;; WHEN: Thu Aug 31 12:04:01 EDT 2023 167 | ;; MSG SIZE rcvd: 55 168 | 169 | -------------------------------------------------------------------------------- /testdata/github.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A github.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55511 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 516636 IN NS a.root-servers.net. 15 | . 516636 IN NS b.root-servers.net. 16 | . 516636 IN NS c.root-servers.net. 17 | . 516636 IN NS d.root-servers.net. 18 | . 516636 IN NS e.root-servers.net. 19 | . 516636 IN NS f.root-servers.net. 20 | . 516636 IN NS g.root-servers.net. 21 | . 516636 IN NS h.root-servers.net. 22 | . 516636 IN NS i.root-servers.net. 23 | . 516636 IN NS j.root-servers.net. 24 | . 516636 IN NS k.root-servers.net. 25 | . 516636 IN NS l.root-servers.net. 26 | . 516636 IN NS m.root-servers.net. 27 | . 516636 IN RRSIG NS 8 0 518400 20230913130000 20230831120000 11019 . OLBV/JPi7VlovCQuxwGYBeAmOFfh4Qc0sV1d7kpbpFCNF5doOeVhY8DR dA5gr9dIpyZvBvIbpxtS8KNGL4dvmIwMpU640B7F4wv5pkM6lU/RNHZa AYqaK0QITIJKJdYnQk3h0+wcmnoZyFIhUYOBBy8k3TPXf45AzkyI/rBb GIU49OHCGZAz2nAtj/ETw9w5lyt8JmzInkyDqQ41t8Z6L948ADCsvO/a YnOKMeiPV4Zhljy5GNwdKrs1dzmScdZ8dm6qmwk6Mpou7+7JBi7C1r7z faamXu736lS5KauKUUZ44oyNuceMnahoO37qmUNtAcMC4BH+wYFsdQNe e3JveQ== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 516636 IN A 198.41.0.4 31 | a.root-servers.net. 516636 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 516636 IN A 199.9.14.201 33 | b.root-servers.net. 516636 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 516636 IN A 192.33.4.12 35 | c.root-servers.net. 516636 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 516636 IN A 199.7.91.13 37 | d.root-servers.net. 516636 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 516636 IN A 192.203.230.10 39 | e.root-servers.net. 516636 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 516636 IN A 192.5.5.241 41 | f.root-servers.net. 516636 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 516636 IN A 192.112.36.4 43 | g.root-servers.net. 516636 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 516636 IN A 198.97.190.53 45 | h.root-servers.net. 516636 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 516636 IN A 192.36.148.17 47 | i.root-servers.net. 516636 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 516636 IN A 192.58.128.30 49 | j.root-servers.net. 516636 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 516636 IN A 193.0.14.129 51 | k.root-servers.net. 516636 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 516636 IN A 199.7.83.42 53 | l.root-servers.net. 516636 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 516636 IN A 202.12.27.33 55 | m.root-servers.net. 516636 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 20 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 12:02:45 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17762 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1472 68 | ;; QUESTION SECTION: 69 | ;github.com. IN A 70 | 71 | ;; AUTHORITY SECTION: 72 | com. 172800 IN NS e.gtld-servers.net. 73 | com. 172800 IN NS b.gtld-servers.net. 74 | com. 172800 IN NS a.gtld-servers.net. 75 | com. 172800 IN NS d.gtld-servers.net. 76 | com. 172800 IN NS i.gtld-servers.net. 77 | com. 172800 IN NS f.gtld-servers.net. 78 | com. 172800 IN NS j.gtld-servers.net. 79 | com. 172800 IN NS k.gtld-servers.net. 80 | com. 172800 IN NS c.gtld-servers.net. 81 | com. 172800 IN NS g.gtld-servers.net. 82 | com. 172800 IN NS h.gtld-servers.net. 83 | com. 172800 IN NS l.gtld-servers.net. 84 | com. 172800 IN NS m.gtld-servers.net. 85 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 86 | com. 86400 IN RRSIG DS 8 1 86400 20230913130000 20230831120000 11019 . WEysarPyDRpInVdiVOqRuMRdwfFAy9OIWUBA+T2ogNdmYK9Lsax7zKZC n2h4Y4VTjIyN7YXh6uuCrWZf0Zcq/YOzib6PwWmTqzXTiNyEm/kKSP9f J1rC/BJWe0sBxvmInqG7hqOAvBzPohA2f03p8feO1ZfpGQduMHtGvOvr IMJ8VrWUaxqcqntV2AYeIVSPUAnEboiCCfS8eUgMQGV7TCcC8s1X/zXT FjU6Qw6bs98QV+KEoQbYnCFlGF0CyKyB506hXeywjFVVIFbabITHeQ4q C4CU+EId9g5o6XHvevTuazoXJixh1EaWs0/Om+Lh2NX7Z/K6xVJ3kzsE J0Twuw== 87 | 88 | ;; ADDITIONAL SECTION: 89 | e.gtld-servers.net. 172800 IN A 192.12.94.30 90 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 91 | b.gtld-servers.net. 172800 IN A 192.33.14.30 92 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 93 | a.gtld-servers.net. 172800 IN A 192.5.6.30 94 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 95 | d.gtld-servers.net. 172800 IN A 192.31.80.30 96 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 97 | i.gtld-servers.net. 172800 IN A 192.43.172.30 98 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 99 | f.gtld-servers.net. 172800 IN A 192.35.51.30 100 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 101 | j.gtld-servers.net. 172800 IN A 192.48.79.30 102 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 103 | k.gtld-servers.net. 172800 IN A 192.52.178.30 104 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 105 | c.gtld-servers.net. 172800 IN A 192.26.92.30 106 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 107 | g.gtld-servers.net. 172800 IN A 192.42.93.30 108 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 109 | h.gtld-servers.net. 172800 IN A 192.54.112.30 110 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 111 | l.gtld-servers.net. 172800 IN A 192.41.162.30 112 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 113 | m.gtld-servers.net. 172800 IN A 192.55.83.30 114 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 115 | 116 | ;; Query time: 12 msec 117 | ;; SERVER: 192.5.5.241#53(f.root-servers.net) (UDP) 118 | ;; WHEN: Thu Aug 31 12:02:45 EDT 2023 119 | ;; MSG SIZE rcvd: 1170 120 | 121 | ;; Got answer: 122 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61160 123 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 12, ADDITIONAL: 2 124 | 125 | ;; OPT PSEUDOSECTION: 126 | ; EDNS: version: 0, flags: do; udp: 4096 127 | ;; QUESTION SECTION: 128 | ;github.com. IN A 129 | 130 | ;; AUTHORITY SECTION: 131 | github.com. 172800 IN NS ns-520.awsdns-01.net. 132 | github.com. 172800 IN NS ns-421.awsdns-52.com. 133 | github.com. 172800 IN NS ns-1707.awsdns-21.co.uk. 134 | github.com. 172800 IN NS ns-1283.awsdns-32.org. 135 | github.com. 172800 IN NS dns1.p08.nsone.net. 136 | github.com. 172800 IN NS dns2.p08.nsone.net. 137 | github.com. 172800 IN NS dns3.p08.nsone.net. 138 | github.com. 172800 IN NS dns4.p08.nsone.net. 139 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 140 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 141 | 4KB4DFS71LEP8G8P8VT4CCUSQNL4CNCS.com. 86400 IN NSEC3 1 1 0 - 4KB4PTQQ5CTA7POCTGM7RUFC8B1RKTEU NS DS RRSIG 142 | 4KB4DFS71LEP8G8P8VT4CCUSQNL4CNCS.com. 86400 IN RRSIG NSEC3 8 2 86400 20230904045825 20230828034825 4459 com. BXuaqjYx8Q4NQZJPtnBTXsXdBF5bWOFO2Y8EV4OTTFb7+++mJdg4AqwW MjJWFVpDXJhjQdsk+AVvcjX5npLkFLrZgSgUVoguGOViyurzIg2ePSrx 6T17xxEW/+K2+qUFLVikR59d2XWelafw5uAwpPQIRln026iTvrqINogT 4yc1TvWYuc1HAp3Q12+8osus/PuI3byByHFkXhT8V/eiuA== 143 | 144 | ;; ADDITIONAL SECTION: 145 | ns-421.awsdns-52.com. 172800 IN A 205.251.193.165 146 | 147 | ;; Query time: 110 msec 148 | ;; SERVER: 192.33.14.30#53(b.gtld-servers.net) (UDP) 149 | ;; WHEN: Thu Aug 31 12:02:45 EDT 2023 150 | ;; MSG SIZE rcvd: 827 151 | 152 | ;; Got answer: 153 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4011 154 | ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 155 | 156 | ;; OPT PSEUDOSECTION: 157 | ; EDNS: version: 0, flags: do; udp: 1232 158 | ;; QUESTION SECTION: 159 | ;github.com. IN A 160 | 161 | ;; ANSWER SECTION: 162 | github.com. 60 IN A 140.82.114.4 163 | 164 | ;; Query time: 21 msec 165 | ;; SERVER: 198.51.45.72#53(dns4.p08.nsone.net) (UDP) 166 | ;; WHEN: Thu Aug 31 12:02:45 EDT 2023 167 | ;; MSG SIZE rcvd: 55 168 | 169 | -------------------------------------------------------------------------------- /testdata/nonexistent.example.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A nonexistent.example.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34042 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 512398 IN NS a.root-servers.net. 15 | . 512398 IN NS b.root-servers.net. 16 | . 512398 IN NS c.root-servers.net. 17 | . 512398 IN NS d.root-servers.net. 18 | . 512398 IN NS e.root-servers.net. 19 | . 512398 IN NS f.root-servers.net. 20 | . 512398 IN NS g.root-servers.net. 21 | . 512398 IN NS h.root-servers.net. 22 | . 512398 IN NS i.root-servers.net. 23 | . 512398 IN NS j.root-servers.net. 24 | . 512398 IN NS k.root-servers.net. 25 | . 512398 IN NS l.root-servers.net. 26 | . 512398 IN NS m.root-servers.net. 27 | . 512398 IN RRSIG NS 8 0 518400 20230913050000 20230831040000 11019 . sTegTb4O1m5gsG6/bNYMthI0KmGTq0sqyKzys6J9GjN05eew+r+hommx jkUk2k0SL8gFMvEOTCmObUw94Ln6qHK5FbyThvQFvxzF7TMBc+YIVEAU 9qYKNNcB+kXOdkrSYVUjFFKfIWbczm/4XhvAv8GkZqbNKEJwkgyKi9bH ippRdD67TNBWoaij+Q8XvlwnHXP3xfiptcTuxtsx8zSlBzVvKMb2GvlL W/Uf6QR+eL5QstjrqOv6TCMPz5UBtEQbuPBiZWArdsERT/3WH8Qir6Rq sFGpVbXijVDFykKxR3Cjby5zB/iQGlAdxFUY2uwJvvVu1dR/WE/G2IoG OUsTMw== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 512398 IN A 198.41.0.4 31 | a.root-servers.net. 512398 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 512398 IN A 199.9.14.201 33 | b.root-servers.net. 512398 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 512398 IN A 192.33.4.12 35 | c.root-servers.net. 512398 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 512398 IN A 199.7.91.13 37 | d.root-servers.net. 512398 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 512398 IN A 192.203.230.10 39 | e.root-servers.net. 512398 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 512398 IN A 192.5.5.241 41 | f.root-servers.net. 512398 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 512398 IN A 192.112.36.4 43 | g.root-servers.net. 512398 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 512398 IN A 198.97.190.53 45 | h.root-servers.net. 512398 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 512398 IN A 192.36.148.17 47 | i.root-servers.net. 512398 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 512398 IN A 192.58.128.30 49 | j.root-servers.net. 512398 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 512398 IN A 193.0.14.129 51 | k.root-servers.net. 512398 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 512398 IN A 199.7.83.42 53 | l.root-servers.net. 512398 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 512398 IN A 202.12.27.33 55 | m.root-servers.net. 512398 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 14 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 09:58:03 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30991 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1232 68 | ;; QUESTION SECTION: 69 | ;nonexistent.example.com. IN A 70 | 71 | ;; AUTHORITY SECTION: 72 | com. 172800 IN NS a.gtld-servers.net. 73 | com. 172800 IN NS b.gtld-servers.net. 74 | com. 172800 IN NS c.gtld-servers.net. 75 | com. 172800 IN NS d.gtld-servers.net. 76 | com. 172800 IN NS e.gtld-servers.net. 77 | com. 172800 IN NS f.gtld-servers.net. 78 | com. 172800 IN NS g.gtld-servers.net. 79 | com. 172800 IN NS h.gtld-servers.net. 80 | com. 172800 IN NS i.gtld-servers.net. 81 | com. 172800 IN NS j.gtld-servers.net. 82 | com. 172800 IN NS k.gtld-servers.net. 83 | com. 172800 IN NS l.gtld-servers.net. 84 | com. 172800 IN NS m.gtld-servers.net. 85 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 86 | com. 86400 IN RRSIG DS 8 1 86400 20230913130000 20230831120000 11019 . WEysarPyDRpInVdiVOqRuMRdwfFAy9OIWUBA+T2ogNdmYK9Lsax7zKZC n2h4Y4VTjIyN7YXh6uuCrWZf0Zcq/YOzib6PwWmTqzXTiNyEm/kKSP9f J1rC/BJWe0sBxvmInqG7hqOAvBzPohA2f03p8feO1ZfpGQduMHtGvOvr IMJ8VrWUaxqcqntV2AYeIVSPUAnEboiCCfS8eUgMQGV7TCcC8s1X/zXT FjU6Qw6bs98QV+KEoQbYnCFlGF0CyKyB506hXeywjFVVIFbabITHeQ4q C4CU+EId9g5o6XHvevTuazoXJixh1EaWs0/Om+Lh2NX7Z/K6xVJ3kzsE J0Twuw== 87 | 88 | ;; ADDITIONAL SECTION: 89 | a.gtld-servers.net. 172800 IN A 192.5.6.30 90 | b.gtld-servers.net. 172800 IN A 192.33.14.30 91 | c.gtld-servers.net. 172800 IN A 192.26.92.30 92 | d.gtld-servers.net. 172800 IN A 192.31.80.30 93 | e.gtld-servers.net. 172800 IN A 192.12.94.30 94 | f.gtld-servers.net. 172800 IN A 192.35.51.30 95 | g.gtld-servers.net. 172800 IN A 192.42.93.30 96 | h.gtld-servers.net. 172800 IN A 192.54.112.30 97 | i.gtld-servers.net. 172800 IN A 192.43.172.30 98 | j.gtld-servers.net. 172800 IN A 192.48.79.30 99 | k.gtld-servers.net. 172800 IN A 192.52.178.30 100 | l.gtld-servers.net. 172800 IN A 192.41.162.30 101 | m.gtld-servers.net. 172800 IN A 192.55.83.30 102 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 103 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 104 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 105 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 106 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 107 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 108 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 109 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 110 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 111 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 112 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 113 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 114 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 115 | 116 | ;; Query time: 61 msec 117 | ;; SERVER: 198.97.190.53#53(h.root-servers.net) (UDP) 118 | ;; WHEN: Thu Aug 31 09:58:03 EDT 2023 119 | ;; MSG SIZE rcvd: 1183 120 | 121 | ;; Got answer: 122 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45450 123 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1 124 | 125 | ;; OPT PSEUDOSECTION: 126 | ; EDNS: version: 0, flags: do; udp: 4096 127 | ;; QUESTION SECTION: 128 | ;nonexistent.example.com. IN A 129 | 130 | ;; AUTHORITY SECTION: 131 | example.com. 172800 IN NS a.iana-servers.net. 132 | example.com. 172800 IN NS b.iana-servers.net. 133 | example.com. 86400 IN DS 370 13 2 BE74359954660069D5C63D200C39F5603827D7DD02B56F120EE9F3A8 6764247C 134 | example.com. 86400 IN RRSIG DS 8 2 86400 20230906062331 20230830051331 4459 com. GMHHwISDn8Yh8+8Y/aTXu9XkZCobOWJ94nPPPYTvRvpUDJfMHV8k2aSO 9lW6xBjeaWtl9MVBRUKIh6CgLH+hZ/V0UHAROh6mt6jKa/3W35OqcULN 8aRsGujntVlByyD3/1Kxki0S8x+wbbymShuqmXC0KQy7Wl0mkimOCwZD +IDk1UhC5zjZnQjFKmJ4SVLb7ayOsbsoQoufx3BNk2kFig== 135 | 136 | ;; Query time: 92 msec 137 | ;; SERVER: 192.5.6.30#53(a.gtld-servers.net) (UDP) 138 | ;; WHEN: Thu Aug 31 09:58:03 EDT 2023 139 | ;; MSG SIZE rcvd: 343 140 | 141 | ;; Got answer: 142 | ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 17947 143 | ;; flags: qr aa; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 1 144 | 145 | ;; OPT PSEUDOSECTION: 146 | ; EDNS: version: 0, flags: do; udp: 4096 147 | ;; QUESTION SECTION: 148 | ;nonexistent.example.com. IN A 149 | 150 | ;; AUTHORITY SECTION: 151 | example.com. 3600 IN SOA ns.icann.org. noc.dns.icann.org. 2022091325 7200 3600 1209600 3600 152 | 85qv7p0n1gufkeddmu6dqdteqmi8rh35.example.com. 3600 IN NSEC3 1 0 5 CBC342D6EF20B86F I3CM89MQIN9NKNOS3USPQ0UPR5QQ0EBF A NS SOA MX TXT AAAA RRSIG DNSKEY NSEC3PARAM 153 | i3cm89mqin9nknos3uspq0upr5qq0ebf.example.com. 3600 IN NSEC3 1 0 5 CBC342D6EF20B86F 85QV7P0N1GUFKEDDMU6DQDTEQMI8RH35 A TXT AAAA RRSIG 154 | example.com. 3600 IN RRSIG SOA 13 2 3600 20230910054204 20230819201939 32385 example.com. U2f4XHmzIYBqM8DWgxoXRU5JGEUjJhD8Dma/NNTRpogaFllysII20JMg 82tSBDo4FDAmucg1fIBrVGNbSb26Hg== 155 | 85qv7p0n1gufkeddmu6dqdteqmi8rh35.example.com. 3600 IN RRSIG NSEC3 13 3 3600 20230909173348 20230819070125 2061 example.com. mb7ldFOnho/Q+s8zqsmvWvnDF6/ZYLuG9LeTOzN4aHCWK0FpnFUSZ+vJ Ahv3ZJrm0gUqTH+/RGgJoNk1E9diPg== 156 | i3cm89mqin9nknos3uspq0upr5qq0ebf.example.com. 3600 IN RRSIG NSEC3 13 3 3600 20230909022238 20230819070125 2061 example.com. TM1WtVKIKO8Pwtgh1zN1oEUM69UE6X+mvTvMyJhEaKaH0B8sVi+scEDc Qjbyw+6AvRl4NUJjyoGVypwolofg9w== 157 | 158 | ;; Query time: 28 msec 159 | ;; SERVER: 199.43.135.53#53(a.iana-servers.net) (UDP) 160 | ;; WHEN: Thu Aug 31 09:58:03 EDT 2023 161 | ;; MSG SIZE rcvd: 604 162 | 163 | -------------------------------------------------------------------------------- /testdata/www.github.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A www.github.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18018 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 516137 IN NS a.root-servers.net. 15 | . 516137 IN NS b.root-servers.net. 16 | . 516137 IN NS c.root-servers.net. 17 | . 516137 IN NS d.root-servers.net. 18 | . 516137 IN NS e.root-servers.net. 19 | . 516137 IN NS f.root-servers.net. 20 | . 516137 IN NS g.root-servers.net. 21 | . 516137 IN NS h.root-servers.net. 22 | . 516137 IN NS i.root-servers.net. 23 | . 516137 IN NS j.root-servers.net. 24 | . 516137 IN NS k.root-servers.net. 25 | . 516137 IN NS l.root-servers.net. 26 | . 516137 IN NS m.root-servers.net. 27 | . 516137 IN RRSIG NS 8 0 518400 20230913130000 20230831120000 11019 . OLBV/JPi7VlovCQuxwGYBeAmOFfh4Qc0sV1d7kpbpFCNF5doOeVhY8DR dA5gr9dIpyZvBvIbpxtS8KNGL4dvmIwMpU640B7F4wv5pkM6lU/RNHZa AYqaK0QITIJKJdYnQk3h0+wcmnoZyFIhUYOBBy8k3TPXf45AzkyI/rBb GIU49OHCGZAz2nAtj/ETw9w5lyt8JmzInkyDqQ41t8Z6L948ADCsvO/a YnOKMeiPV4Zhljy5GNwdKrs1dzmScdZ8dm6qmwk6Mpou7+7JBi7C1r7z faamXu736lS5KauKUUZ44oyNuceMnahoO37qmUNtAcMC4BH+wYFsdQNe e3JveQ== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 516137 IN A 198.41.0.4 31 | a.root-servers.net. 516137 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 516137 IN A 199.9.14.201 33 | b.root-servers.net. 516137 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 516137 IN A 192.33.4.12 35 | c.root-servers.net. 516137 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 516137 IN A 199.7.91.13 37 | d.root-servers.net. 516137 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 516137 IN A 192.203.230.10 39 | e.root-servers.net. 516137 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 516137 IN A 192.5.5.241 41 | f.root-servers.net. 516137 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 516137 IN A 192.112.36.4 43 | g.root-servers.net. 516137 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 516137 IN A 198.97.190.53 45 | h.root-servers.net. 516137 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 516137 IN A 192.36.148.17 47 | i.root-servers.net. 516137 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 516137 IN A 192.58.128.30 49 | j.root-servers.net. 516137 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 516137 IN A 193.0.14.129 51 | k.root-servers.net. 516137 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 516137 IN A 199.7.83.42 53 | l.root-servers.net. 516137 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 516137 IN A 202.12.27.33 55 | m.root-servers.net. 516137 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 20 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 12:04:00 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28310 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1232 68 | ; COOKIE: 6dcd76002ac3f9ed0100000064f0b9f026041915e387ba14 (good) 69 | ;; QUESTION SECTION: 70 | ;www.github.com. IN A 71 | 72 | ;; AUTHORITY SECTION: 73 | com. 172800 IN NS h.gtld-servers.net. 74 | com. 172800 IN NS i.gtld-servers.net. 75 | com. 172800 IN NS k.gtld-servers.net. 76 | com. 172800 IN NS e.gtld-servers.net. 77 | com. 172800 IN NS f.gtld-servers.net. 78 | com. 172800 IN NS b.gtld-servers.net. 79 | com. 172800 IN NS g.gtld-servers.net. 80 | com. 172800 IN NS d.gtld-servers.net. 81 | com. 172800 IN NS j.gtld-servers.net. 82 | com. 172800 IN NS m.gtld-servers.net. 83 | com. 172800 IN NS l.gtld-servers.net. 84 | com. 172800 IN NS a.gtld-servers.net. 85 | com. 172800 IN NS c.gtld-servers.net. 86 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 87 | com. 86400 IN RRSIG DS 8 1 86400 20230913130000 20230831120000 11019 . WEysarPyDRpInVdiVOqRuMRdwfFAy9OIWUBA+T2ogNdmYK9Lsax7zKZC n2h4Y4VTjIyN7YXh6uuCrWZf0Zcq/YOzib6PwWmTqzXTiNyEm/kKSP9f J1rC/BJWe0sBxvmInqG7hqOAvBzPohA2f03p8feO1ZfpGQduMHtGvOvr IMJ8VrWUaxqcqntV2AYeIVSPUAnEboiCCfS8eUgMQGV7TCcC8s1X/zXT FjU6Qw6bs98QV+KEoQbYnCFlGF0CyKyB506hXeywjFVVIFbabITHeQ4q C4CU+EId9g5o6XHvevTuazoXJixh1EaWs0/Om+Lh2NX7Z/K6xVJ3kzsE J0Twuw== 88 | 89 | ;; ADDITIONAL SECTION: 90 | m.gtld-servers.net. 172800 IN A 192.55.83.30 91 | l.gtld-servers.net. 172800 IN A 192.41.162.30 92 | k.gtld-servers.net. 172800 IN A 192.52.178.30 93 | j.gtld-servers.net. 172800 IN A 192.48.79.30 94 | i.gtld-servers.net. 172800 IN A 192.43.172.30 95 | h.gtld-servers.net. 172800 IN A 192.54.112.30 96 | g.gtld-servers.net. 172800 IN A 192.42.93.30 97 | f.gtld-servers.net. 172800 IN A 192.35.51.30 98 | e.gtld-servers.net. 172800 IN A 192.12.94.30 99 | d.gtld-servers.net. 172800 IN A 192.31.80.30 100 | c.gtld-servers.net. 172800 IN A 192.26.92.30 101 | b.gtld-servers.net. 172800 IN A 192.33.14.30 102 | a.gtld-servers.net. 172800 IN A 192.5.6.30 103 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 104 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 105 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 106 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 107 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 108 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 109 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 110 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 111 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 112 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 113 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 114 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 115 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 116 | 117 | ;; Query time: 21 msec 118 | ;; SERVER: 192.33.4.12#53(c.root-servers.net) (UDP) 119 | ;; WHEN: Thu Aug 31 12:04:00 EDT 2023 120 | ;; MSG SIZE rcvd: 1205 121 | 122 | ;; Got answer: 123 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39392 124 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 12, ADDITIONAL: 2 125 | 126 | ;; OPT PSEUDOSECTION: 127 | ; EDNS: version: 0, flags: do; udp: 4096 128 | ;; QUESTION SECTION: 129 | ;www.github.com. IN A 130 | 131 | ;; AUTHORITY SECTION: 132 | github.com. 172800 IN NS ns-520.awsdns-01.net. 133 | github.com. 172800 IN NS ns-421.awsdns-52.com. 134 | github.com. 172800 IN NS ns-1707.awsdns-21.co.uk. 135 | github.com. 172800 IN NS ns-1283.awsdns-32.org. 136 | github.com. 172800 IN NS dns1.p08.nsone.net. 137 | github.com. 172800 IN NS dns2.p08.nsone.net. 138 | github.com. 172800 IN NS dns3.p08.nsone.net. 139 | github.com. 172800 IN NS dns4.p08.nsone.net. 140 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 141 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 142 | 4KB4DFS71LEP8G8P8VT4CCUSQNL4CNCS.com. 86400 IN NSEC3 1 1 0 - 4KB4PTQQ5CTA7POCTGM7RUFC8B1RKTEU NS DS RRSIG 143 | 4KB4DFS71LEP8G8P8VT4CCUSQNL4CNCS.com. 86400 IN RRSIG NSEC3 8 2 86400 20230904045825 20230828034825 4459 com. BXuaqjYx8Q4NQZJPtnBTXsXdBF5bWOFO2Y8EV4OTTFb7+++mJdg4AqwW MjJWFVpDXJhjQdsk+AVvcjX5npLkFLrZgSgUVoguGOViyurzIg2ePSrx 6T17xxEW/+K2+qUFLVikR59d2XWelafw5uAwpPQIRln026iTvrqINogT 4yc1TvWYuc1HAp3Q12+8osus/PuI3byByHFkXhT8V/eiuA== 144 | 145 | ;; ADDITIONAL SECTION: 146 | ns-421.awsdns-52.com. 172800 IN A 205.251.193.165 147 | 148 | ;; Query time: 30 msec 149 | ;; SERVER: 192.41.162.30#53(l.gtld-servers.net) (UDP) 150 | ;; WHEN: Thu Aug 31 12:04:00 EDT 2023 151 | ;; MSG SIZE rcvd: 831 152 | 153 | ;; Got answer: 154 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50573 155 | ;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 156 | 157 | ;; OPT PSEUDOSECTION: 158 | ; EDNS: version: 0, flags: do; udp: 1232 159 | ;; QUESTION SECTION: 160 | ;www.github.com. IN A 161 | 162 | ;; ANSWER SECTION: 163 | www.github.com. 3600 IN CNAME github.com. 164 | github.com. 60 IN A 140.82.113.3 165 | 166 | ;; Query time: 22 msec 167 | ;; SERVER: 198.51.44.72#53(dns3.p08.nsone.net) (UDP) 168 | ;; WHEN: Thu Aug 31 12:04:00 EDT 2023 169 | ;; MSG SIZE rcvd: 73 170 | 171 | -------------------------------------------------------------------------------- /testdata/bad-cname.ring269.messwithdns.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A bad-cname.ring269.messwithdns.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42583 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 512067 IN NS a.root-servers.net. 15 | . 512067 IN NS b.root-servers.net. 16 | . 512067 IN NS c.root-servers.net. 17 | . 512067 IN NS d.root-servers.net. 18 | . 512067 IN NS e.root-servers.net. 19 | . 512067 IN NS f.root-servers.net. 20 | . 512067 IN NS g.root-servers.net. 21 | . 512067 IN NS h.root-servers.net. 22 | . 512067 IN NS i.root-servers.net. 23 | . 512067 IN NS j.root-servers.net. 24 | . 512067 IN NS k.root-servers.net. 25 | . 512067 IN NS l.root-servers.net. 26 | . 512067 IN NS m.root-servers.net. 27 | . 512067 IN RRSIG NS 8 0 518400 20230913050000 20230831040000 11019 . sTegTb4O1m5gsG6/bNYMthI0KmGTq0sqyKzys6J9GjN05eew+r+hommx jkUk2k0SL8gFMvEOTCmObUw94Ln6qHK5FbyThvQFvxzF7TMBc+YIVEAU 9qYKNNcB+kXOdkrSYVUjFFKfIWbczm/4XhvAv8GkZqbNKEJwkgyKi9bH ippRdD67TNBWoaij+Q8XvlwnHXP3xfiptcTuxtsx8zSlBzVvKMb2GvlL W/Uf6QR+eL5QstjrqOv6TCMPz5UBtEQbuPBiZWArdsERT/3WH8Qir6Rq sFGpVbXijVDFykKxR3Cjby5zB/iQGlAdxFUY2uwJvvVu1dR/WE/G2IoG OUsTMw== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 512067 IN A 198.41.0.4 31 | a.root-servers.net. 512067 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 512067 IN A 199.9.14.201 33 | b.root-servers.net. 512067 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 512067 IN A 192.33.4.12 35 | c.root-servers.net. 512067 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 512067 IN A 199.7.91.13 37 | d.root-servers.net. 512067 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 512067 IN A 192.203.230.10 39 | e.root-servers.net. 512067 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 512067 IN A 192.5.5.241 41 | f.root-servers.net. 512067 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 512067 IN A 192.112.36.4 43 | g.root-servers.net. 512067 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 512067 IN A 198.97.190.53 45 | h.root-servers.net. 512067 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 512067 IN A 192.36.148.17 47 | i.root-servers.net. 512067 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 512067 IN A 192.58.128.30 49 | j.root-servers.net. 512067 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 512067 IN A 193.0.14.129 51 | k.root-servers.net. 512067 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 512067 IN A 199.7.83.42 53 | l.root-servers.net. 512067 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 512067 IN A 202.12.27.33 55 | m.root-servers.net. 512067 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 43 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 07:49:30 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13820 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1450 68 | ;; QUESTION SECTION: 69 | ;bad-cname.ring269.messwithdns.com. IN A 70 | 71 | ;; AUTHORITY SECTION: 72 | com. 172800 IN NS a.gtld-servers.net. 73 | com. 172800 IN NS b.gtld-servers.net. 74 | com. 172800 IN NS c.gtld-servers.net. 75 | com. 172800 IN NS d.gtld-servers.net. 76 | com. 172800 IN NS e.gtld-servers.net. 77 | com. 172800 IN NS f.gtld-servers.net. 78 | com. 172800 IN NS g.gtld-servers.net. 79 | com. 172800 IN NS h.gtld-servers.net. 80 | com. 172800 IN NS i.gtld-servers.net. 81 | com. 172800 IN NS j.gtld-servers.net. 82 | com. 172800 IN NS k.gtld-servers.net. 83 | com. 172800 IN NS l.gtld-servers.net. 84 | com. 172800 IN NS m.gtld-servers.net. 85 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 86 | com. 86400 IN RRSIG DS 8 1 86400 20230913050000 20230831040000 11019 . SDSqlwjZKrqNVP2SV+cRQEaiBBNvx8tIP8+tbNmNGyi9LqcDEKCWB5J8 3qfhueg/Wg31In3vFA7InAoeCciGeBXegT+iNdPNRt+/L2oXk5WYteQI YpQ9TvjilFBmvbfrfoJUxCe4yQsN7cMsvOB17e9OpWAdZxTdjra7qT+I GkHCzIhWJJ0y1LlpqGOSwPff2N3QABYzndPE5K/8Jn0kQaXS4yPSKN/G 6uGag6wrdb3e6wcLwg0iOe0B7cjBODKJF1OfnfIjdjd59w8uQfK8Zs9z 4etaabDHVcYrLCtVZeRU3uZ8jDYhw7O6EqjBQYgUZkEMe5TDIML7M+CT eP70VQ== 87 | 88 | ;; ADDITIONAL SECTION: 89 | a.gtld-servers.net. 172800 IN A 192.5.6.30 90 | b.gtld-servers.net. 172800 IN A 192.33.14.30 91 | c.gtld-servers.net. 172800 IN A 192.26.92.30 92 | d.gtld-servers.net. 172800 IN A 192.31.80.30 93 | e.gtld-servers.net. 172800 IN A 192.12.94.30 94 | f.gtld-servers.net. 172800 IN A 192.35.51.30 95 | g.gtld-servers.net. 172800 IN A 192.42.93.30 96 | h.gtld-servers.net. 172800 IN A 192.54.112.30 97 | i.gtld-servers.net. 172800 IN A 192.43.172.30 98 | j.gtld-servers.net. 172800 IN A 192.48.79.30 99 | k.gtld-servers.net. 172800 IN A 192.52.178.30 100 | l.gtld-servers.net. 172800 IN A 192.41.162.30 101 | m.gtld-servers.net. 172800 IN A 192.55.83.30 102 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 103 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 104 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 105 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 106 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 107 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 108 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 109 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 110 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 111 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 112 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 113 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 114 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 115 | 116 | ;; Query time: 16 msec 117 | ;; SERVER: 199.7.91.13#53(d.root-servers.net) (UDP) 118 | ;; WHEN: Thu Aug 31 07:49:30 EDT 2023 119 | ;; MSG SIZE rcvd: 1193 120 | 121 | ;; Got answer: 122 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9061 123 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 5 124 | 125 | ;; OPT PSEUDOSECTION: 126 | ; EDNS: version: 0, flags: do; udp: 4096 127 | ;; QUESTION SECTION: 128 | ;bad-cname.ring269.messwithdns.com. IN A 129 | 130 | ;; AUTHORITY SECTION: 131 | messwithdns.com. 172800 IN NS mess-with-dns1.wizardzines.com. 132 | messwithdns.com. 172800 IN NS mess-with-dns2.wizardzines.com. 133 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 134 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 135 | NA6D7RVNOPPPES6U4N6CFLNOUTV62LIK.com. 86400 IN NSEC3 1 1 0 - NA6DATUIVJS42OFIHSKREAEC1L5KNACA NS DS RRSIG 136 | NA6D7RVNOPPPES6U4N6CFLNOUTV62LIK.com. 86400 IN RRSIG NSEC3 8 2 86400 20230905062536 20230829051536 4459 com. EqMXw6nYfuhGjFGb5T4mDsYTCwwI66qwBWvpFC9MJRrn6IXRiAJxGWjD 8+Kux6phKcUhGWCsHgvv9/B+seewMyHo80Ljqy7r7pRMGRH9UGie1+YE Xqz6A6blMN1Pe1Wp0+d/mZBAvZRx/NLvLrbhOTNXaY2q8kegfFgVdgLW aAok/QX8W0hh4v8ykU38Jj3CVJ4I94yIcqvT1/2knXbzpg== 137 | 138 | ;; ADDITIONAL SECTION: 139 | mess-with-dns1.wizardzines.com. 172800 IN A 213.188.214.237 140 | mess-with-dns1.wizardzines.com. 172800 IN AAAA 2a09:8280:1::a:b31 141 | mess-with-dns2.wizardzines.com. 172800 IN A 213.188.214.254 142 | mess-with-dns2.wizardzines.com. 172800 IN AAAA 2a09:8280:1::a:b31 143 | 144 | ;; Query time: 33 msec 145 | ;; SERVER: 192.55.83.30#53(m.gtld-servers.net) (UDP) 146 | ;; WHEN: Thu Aug 31 07:49:30 EDT 2023 147 | ;; MSG SIZE rcvd: 769 148 | 149 | ;; Got answer: 150 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25623 151 | ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 152 | 153 | ;; QUESTION SECTION: 154 | ;bad-cname.ring269.messwithdns.com. IN A 155 | 156 | ;; ANSWER SECTION: 157 | bad-cname.ring269.messwithdns.com. 300 IN CNAME examplefffffff.com. 158 | 159 | ;; AUTHORITY SECTION: 160 | messwithdns.com. 3600 IN SOA mess-with-dns1.wizardzines.com. julia.wizardzines.com. 82975 3600 3600 7300 3600 161 | 162 | ;; Query time: 35 msec 163 | ;; SERVER: 213.188.214.254#53(mess-with-dns2.wizardzines.com) (UDP) 164 | ;; WHEN: Thu Aug 31 07:49:30 EDT 2023 165 | ;; MSG SIZE rcvd: 149 166 | 167 | -------------------------------------------------------------------------------- /testdata/ring269.messwithdns.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A ring269.messwithdns.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46267 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 515293 IN NS a.root-servers.net. 15 | . 515293 IN NS b.root-servers.net. 16 | . 515293 IN NS c.root-servers.net. 17 | . 515293 IN NS d.root-servers.net. 18 | . 515293 IN NS e.root-servers.net. 19 | . 515293 IN NS f.root-servers.net. 20 | . 515293 IN NS g.root-servers.net. 21 | . 515293 IN NS h.root-servers.net. 22 | . 515293 IN NS i.root-servers.net. 23 | . 515293 IN NS j.root-servers.net. 24 | . 515293 IN NS k.root-servers.net. 25 | . 515293 IN NS l.root-servers.net. 26 | . 515293 IN NS m.root-servers.net. 27 | . 515293 IN RRSIG NS 8 0 518400 20230913050000 20230831040000 11019 . sTegTb4O1m5gsG6/bNYMthI0KmGTq0sqyKzys6J9GjN05eew+r+hommx jkUk2k0SL8gFMvEOTCmObUw94Ln6qHK5FbyThvQFvxzF7TMBc+YIVEAU 9qYKNNcB+kXOdkrSYVUjFFKfIWbczm/4XhvAv8GkZqbNKEJwkgyKi9bH ippRdD67TNBWoaij+Q8XvlwnHXP3xfiptcTuxtsx8zSlBzVvKMb2GvlL W/Uf6QR+eL5QstjrqOv6TCMPz5UBtEQbuPBiZWArdsERT/3WH8Qir6Rq sFGpVbXijVDFykKxR3Cjby5zB/iQGlAdxFUY2uwJvvVu1dR/WE/G2IoG OUsTMw== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 515293 IN A 198.41.0.4 31 | a.root-servers.net. 515293 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 515293 IN A 199.9.14.201 33 | b.root-servers.net. 515293 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 515293 IN A 192.33.4.12 35 | c.root-servers.net. 515293 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 515293 IN A 199.7.91.13 37 | d.root-servers.net. 515293 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 515293 IN A 192.203.230.10 39 | e.root-servers.net. 515293 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 515293 IN A 192.5.5.241 41 | f.root-servers.net. 515293 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 515293 IN A 192.112.36.4 43 | g.root-servers.net. 515293 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 515293 IN A 198.97.190.53 45 | h.root-servers.net. 515293 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 515293 IN A 192.36.148.17 47 | i.root-servers.net. 515293 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 515293 IN A 192.58.128.30 49 | j.root-servers.net. 515293 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 515293 IN A 193.0.14.129 51 | k.root-servers.net. 515293 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 515293 IN A 199.7.83.42 53 | l.root-servers.net. 515293 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 515293 IN A 202.12.27.33 55 | m.root-servers.net. 515293 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 84 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 07:12:06 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64343 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1232 68 | ; COOKIE: ca6edca85e2488340100000064f075863fac60a14e885b49 (good) 69 | ;; QUESTION SECTION: 70 | ;ring269.messwithdns.com. IN A 71 | 72 | ;; AUTHORITY SECTION: 73 | com. 172800 IN NS e.gtld-servers.net. 74 | com. 172800 IN NS m.gtld-servers.net. 75 | com. 172800 IN NS i.gtld-servers.net. 76 | com. 172800 IN NS a.gtld-servers.net. 77 | com. 172800 IN NS j.gtld-servers.net. 78 | com. 172800 IN NS b.gtld-servers.net. 79 | com. 172800 IN NS c.gtld-servers.net. 80 | com. 172800 IN NS f.gtld-servers.net. 81 | com. 172800 IN NS d.gtld-servers.net. 82 | com. 172800 IN NS h.gtld-servers.net. 83 | com. 172800 IN NS g.gtld-servers.net. 84 | com. 172800 IN NS k.gtld-servers.net. 85 | com. 172800 IN NS l.gtld-servers.net. 86 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 87 | com. 86400 IN RRSIG DS 8 1 86400 20230913050000 20230831040000 11019 . SDSqlwjZKrqNVP2SV+cRQEaiBBNvx8tIP8+tbNmNGyi9LqcDEKCWB5J8 3qfhueg/Wg31In3vFA7InAoeCciGeBXegT+iNdPNRt+/L2oXk5WYteQI YpQ9TvjilFBmvbfrfoJUxCe4yQsN7cMsvOB17e9OpWAdZxTdjra7qT+I GkHCzIhWJJ0y1LlpqGOSwPff2N3QABYzndPE5K/8Jn0kQaXS4yPSKN/G 6uGag6wrdb3e6wcLwg0iOe0B7cjBODKJF1OfnfIjdjd59w8uQfK8Zs9z 4etaabDHVcYrLCtVZeRU3uZ8jDYhw7O6EqjBQYgUZkEMe5TDIML7M+CT eP70VQ== 88 | 89 | ;; ADDITIONAL SECTION: 90 | m.gtld-servers.net. 172800 IN A 192.55.83.30 91 | l.gtld-servers.net. 172800 IN A 192.41.162.30 92 | k.gtld-servers.net. 172800 IN A 192.52.178.30 93 | j.gtld-servers.net. 172800 IN A 192.48.79.30 94 | i.gtld-servers.net. 172800 IN A 192.43.172.30 95 | h.gtld-servers.net. 172800 IN A 192.54.112.30 96 | g.gtld-servers.net. 172800 IN A 192.42.93.30 97 | f.gtld-servers.net. 172800 IN A 192.35.51.30 98 | e.gtld-servers.net. 172800 IN A 192.12.94.30 99 | d.gtld-servers.net. 172800 IN A 192.31.80.30 100 | c.gtld-servers.net. 172800 IN A 192.26.92.30 101 | b.gtld-servers.net. 172800 IN A 192.33.14.30 102 | a.gtld-servers.net. 172800 IN A 192.5.6.30 103 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 104 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 105 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 106 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 107 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 108 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 109 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 110 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 111 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 112 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 113 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 114 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 115 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 116 | 117 | ;; Query time: 28 msec 118 | ;; SERVER: 199.9.14.201#53(b.root-servers.net) (UDP) 119 | ;; WHEN: Thu Aug 31 07:12:06 EDT 2023 120 | ;; MSG SIZE rcvd: 1214 121 | 122 | ;; Got answer: 123 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10241 124 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 5 125 | 126 | ;; OPT PSEUDOSECTION: 127 | ; EDNS: version: 0, flags: do; udp: 4096 128 | ;; QUESTION SECTION: 129 | ;ring269.messwithdns.com. IN A 130 | 131 | ;; AUTHORITY SECTION: 132 | messwithdns.com. 172800 IN NS mess-with-dns1.wizardzines.com. 133 | messwithdns.com. 172800 IN NS mess-with-dns2.wizardzines.com. 134 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 135 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 136 | NA6D7RVNOPPPES6U4N6CFLNOUTV62LIK.com. 86400 IN NSEC3 1 1 0 - NA6DATUIVJS42OFIHSKREAEC1L5KNACA NS DS RRSIG 137 | NA6D7RVNOPPPES6U4N6CFLNOUTV62LIK.com. 86400 IN RRSIG NSEC3 8 2 86400 20230905062536 20230829051536 4459 com. EqMXw6nYfuhGjFGb5T4mDsYTCwwI66qwBWvpFC9MJRrn6IXRiAJxGWjD 8+Kux6phKcUhGWCsHgvv9/B+seewMyHo80Ljqy7r7pRMGRH9UGie1+YE Xqz6A6blMN1Pe1Wp0+d/mZBAvZRx/NLvLrbhOTNXaY2q8kegfFgVdgLW aAok/QX8W0hh4v8ykU38Jj3CVJ4I94yIcqvT1/2knXbzpg== 138 | 139 | ;; ADDITIONAL SECTION: 140 | mess-with-dns1.wizardzines.com. 172800 IN A 213.188.214.237 141 | mess-with-dns1.wizardzines.com. 172800 IN AAAA 2a09:8280:1::a:b31 142 | mess-with-dns2.wizardzines.com. 172800 IN A 213.188.214.254 143 | mess-with-dns2.wizardzines.com. 172800 IN AAAA 2a09:8280:1::a:b31 144 | 145 | ;; Query time: 96 msec 146 | ;; SERVER: 192.31.80.30#53(d.gtld-servers.net) (UDP) 147 | ;; WHEN: Thu Aug 31 07:12:06 EDT 2023 148 | ;; MSG SIZE rcvd: 759 149 | 150 | ;; expected opt record in response 151 | ;; Got answer: 152 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42562 153 | ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 154 | 155 | ;; QUESTION SECTION: 156 | ;ring269.messwithdns.com. IN A 157 | 158 | ;; ANSWER SECTION: 159 | ring269.messwithdns.com. 300 IN A 5.6.7.8 160 | 161 | ;; AUTHORITY SECTION: 162 | messwithdns.com. 3600 IN SOA mess-with-dns1.wizardzines.com. julia.wizardzines.com. 82973 3600 3600 7300 3600 163 | 164 | ;; Query time: 34 msec 165 | ;; SERVER: 213.188.214.237#53(mess-with-dns1.wizardzines.com) (UDP) 166 | ;; WHEN: Thu Aug 31 07:12:06 EDT 2023 167 | ;; MSG SIZE rcvd: 126 168 | 169 | -------------------------------------------------------------------------------- /testdata/bad-ip.ring269.messwithdns.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A bad-ip.ring269.messwithdns.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12897 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 511371 IN NS a.root-servers.net. 15 | . 511371 IN NS b.root-servers.net. 16 | . 511371 IN NS c.root-servers.net. 17 | . 511371 IN NS d.root-servers.net. 18 | . 511371 IN NS e.root-servers.net. 19 | . 511371 IN NS f.root-servers.net. 20 | . 511371 IN NS g.root-servers.net. 21 | . 511371 IN NS h.root-servers.net. 22 | . 511371 IN NS i.root-servers.net. 23 | . 511371 IN NS j.root-servers.net. 24 | . 511371 IN NS k.root-servers.net. 25 | . 511371 IN NS l.root-servers.net. 26 | . 511371 IN NS m.root-servers.net. 27 | . 511371 IN RRSIG NS 8 0 518400 20230913050000 20230831040000 11019 . sTegTb4O1m5gsG6/bNYMthI0KmGTq0sqyKzys6J9GjN05eew+r+hommx jkUk2k0SL8gFMvEOTCmObUw94Ln6qHK5FbyThvQFvxzF7TMBc+YIVEAU 9qYKNNcB+kXOdkrSYVUjFFKfIWbczm/4XhvAv8GkZqbNKEJwkgyKi9bH ippRdD67TNBWoaij+Q8XvlwnHXP3xfiptcTuxtsx8zSlBzVvKMb2GvlL W/Uf6QR+eL5QstjrqOv6TCMPz5UBtEQbuPBiZWArdsERT/3WH8Qir6Rq sFGpVbXijVDFykKxR3Cjby5zB/iQGlAdxFUY2uwJvvVu1dR/WE/G2IoG OUsTMw== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 511371 IN A 198.41.0.4 31 | a.root-servers.net. 511371 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 511371 IN A 199.9.14.201 33 | b.root-servers.net. 511371 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 511371 IN A 192.33.4.12 35 | c.root-servers.net. 511371 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 511371 IN A 199.7.91.13 37 | d.root-servers.net. 511371 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 511371 IN A 192.203.230.10 39 | e.root-servers.net. 511371 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 511371 IN A 192.5.5.241 41 | f.root-servers.net. 511371 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 511371 IN A 192.112.36.4 43 | g.root-servers.net. 511371 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 511371 IN A 198.97.190.53 45 | h.root-servers.net. 511371 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 511371 IN A 192.36.148.17 47 | i.root-servers.net. 511371 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 511371 IN A 192.58.128.30 49 | j.root-servers.net. 511371 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 511371 IN A 193.0.14.129 51 | k.root-servers.net. 511371 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 511371 IN A 199.7.83.42 53 | l.root-servers.net. 511371 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 511371 IN A 202.12.27.33 55 | m.root-servers.net. 511371 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 52 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 11:19:54 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35334 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1232 68 | ; COOKIE: 4e6921129b2138390100000064f0af9ae753e36b81af1a25 (good) 69 | ;; QUESTION SECTION: 70 | ;bad-ip.ring269.messwithdns.com. IN A 71 | 72 | ;; AUTHORITY SECTION: 73 | com. 172800 IN NS i.gtld-servers.net. 74 | com. 172800 IN NS k.gtld-servers.net. 75 | com. 172800 IN NS a.gtld-servers.net. 76 | com. 172800 IN NS e.gtld-servers.net. 77 | com. 172800 IN NS d.gtld-servers.net. 78 | com. 172800 IN NS b.gtld-servers.net. 79 | com. 172800 IN NS l.gtld-servers.net. 80 | com. 172800 IN NS f.gtld-servers.net. 81 | com. 172800 IN NS j.gtld-servers.net. 82 | com. 172800 IN NS h.gtld-servers.net. 83 | com. 172800 IN NS c.gtld-servers.net. 84 | com. 172800 IN NS m.gtld-servers.net. 85 | com. 172800 IN NS g.gtld-servers.net. 86 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 87 | com. 86400 IN RRSIG DS 8 1 86400 20230913130000 20230831120000 11019 . WEysarPyDRpInVdiVOqRuMRdwfFAy9OIWUBA+T2ogNdmYK9Lsax7zKZC n2h4Y4VTjIyN7YXh6uuCrWZf0Zcq/YOzib6PwWmTqzXTiNyEm/kKSP9f J1rC/BJWe0sBxvmInqG7hqOAvBzPohA2f03p8feO1ZfpGQduMHtGvOvr IMJ8VrWUaxqcqntV2AYeIVSPUAnEboiCCfS8eUgMQGV7TCcC8s1X/zXT FjU6Qw6bs98QV+KEoQbYnCFlGF0CyKyB506hXeywjFVVIFbabITHeQ4q C4CU+EId9g5o6XHvevTuazoXJixh1EaWs0/Om+Lh2NX7Z/K6xVJ3kzsE J0Twuw== 88 | 89 | ;; ADDITIONAL SECTION: 90 | m.gtld-servers.net. 172800 IN A 192.55.83.30 91 | l.gtld-servers.net. 172800 IN A 192.41.162.30 92 | k.gtld-servers.net. 172800 IN A 192.52.178.30 93 | j.gtld-servers.net. 172800 IN A 192.48.79.30 94 | i.gtld-servers.net. 172800 IN A 192.43.172.30 95 | h.gtld-servers.net. 172800 IN A 192.54.112.30 96 | g.gtld-servers.net. 172800 IN A 192.42.93.30 97 | f.gtld-servers.net. 172800 IN A 192.35.51.30 98 | e.gtld-servers.net. 172800 IN A 192.12.94.30 99 | d.gtld-servers.net. 172800 IN A 192.31.80.30 100 | c.gtld-servers.net. 172800 IN A 192.26.92.30 101 | b.gtld-servers.net. 172800 IN A 192.33.14.30 102 | a.gtld-servers.net. 172800 IN A 192.5.6.30 103 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 104 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 105 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 106 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 107 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 108 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 109 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 110 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 111 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 112 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 113 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 114 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 115 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 116 | 117 | ;; Query time: 27 msec 118 | ;; SERVER: 199.9.14.201#53(b.root-servers.net) (UDP) 119 | ;; WHEN: Thu Aug 31 11:19:54 EDT 2023 120 | ;; MSG SIZE rcvd: 1221 121 | 122 | ;; Got answer: 123 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38279 124 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 5 125 | 126 | ;; OPT PSEUDOSECTION: 127 | ; EDNS: version: 0, flags: do; udp: 4096 128 | ;; QUESTION SECTION: 129 | ;bad-ip.ring269.messwithdns.com. IN A 130 | 131 | ;; AUTHORITY SECTION: 132 | messwithdns.com. 172800 IN NS mess-with-dns1.wizardzines.com. 133 | messwithdns.com. 172800 IN NS mess-with-dns2.wizardzines.com. 134 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 135 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 136 | NA6D7RVNOPPPES6U4N6CFLNOUTV62LIK.com. 86400 IN NSEC3 1 1 0 - NA6DATUIVJS42OFIHSKREAEC1L5KNACA NS DS RRSIG 137 | NA6D7RVNOPPPES6U4N6CFLNOUTV62LIK.com. 86400 IN RRSIG NSEC3 8 2 86400 20230905062536 20230829051536 4459 com. EqMXw6nYfuhGjFGb5T4mDsYTCwwI66qwBWvpFC9MJRrn6IXRiAJxGWjD 8+Kux6phKcUhGWCsHgvv9/B+seewMyHo80Ljqy7r7pRMGRH9UGie1+YE Xqz6A6blMN1Pe1Wp0+d/mZBAvZRx/NLvLrbhOTNXaY2q8kegfFgVdgLW aAok/QX8W0hh4v8ykU38Jj3CVJ4I94yIcqvT1/2knXbzpg== 138 | 139 | ;; ADDITIONAL SECTION: 140 | mess-with-dns1.wizardzines.com. 172800 IN A 213.188.214.237 141 | mess-with-dns1.wizardzines.com. 172800 IN AAAA 2a09:8280:1::a:b31 142 | mess-with-dns2.wizardzines.com. 172800 IN A 213.188.214.254 143 | mess-with-dns2.wizardzines.com. 172800 IN AAAA 2a09:8280:1::a:b31 144 | 145 | ;; Query time: 103 msec 146 | ;; SERVER: 192.31.80.30#53(d.gtld-servers.net) (UDP) 147 | ;; WHEN: Thu Aug 31 11:19:54 EDT 2023 148 | ;; MSG SIZE rcvd: 766 149 | 150 | ;; expected opt record in response 151 | ;; Got answer: 152 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49269 153 | ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 154 | 155 | ;; QUESTION SECTION: 156 | ;bad-ip.ring269.messwithdns.com. IN A 157 | 158 | ;; ANSWER SECTION: 159 | bad-ip.ring269.messwithdns.com. 300 IN A 203.0.113.0 160 | 161 | ;; AUTHORITY SECTION: 162 | messwithdns.com. 3600 IN SOA mess-with-dns1.wizardzines.com. julia.wizardzines.com. 83012 3600 3600 7300 3600 163 | 164 | ;; Query time: 36 msec 165 | ;; SERVER: 213.188.214.254#53(mess-with-dns2.wizardzines.com) (UDP) 166 | ;; WHEN: Thu Aug 31 11:19:54 EDT 2023 167 | ;; MSG SIZE rcvd: 133 168 | 169 | -------------------------------------------------------------------------------- /testdata/neg-cache.ring269.messwithdns.com_A_trace.dig: -------------------------------------------------------------------------------- 1 | 2 | ; <<>> DiG 9.18.16 <<>> +trace +all A neg-cache.ring269.messwithdns.com 3 | ;; global options: +cmd 4 | ;; Got answer: 5 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13004 6 | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 27 7 | 8 | ;; OPT PSEUDOSECTION: 9 | ; EDNS: version: 0, flags: do; udp: 1232 10 | ;; QUESTION SECTION: 11 | ;. IN NS 12 | 13 | ;; ANSWER SECTION: 14 | . 516107 IN NS a.root-servers.net. 15 | . 516107 IN NS b.root-servers.net. 16 | . 516107 IN NS c.root-servers.net. 17 | . 516107 IN NS d.root-servers.net. 18 | . 516107 IN NS e.root-servers.net. 19 | . 516107 IN NS f.root-servers.net. 20 | . 516107 IN NS g.root-servers.net. 21 | . 516107 IN NS h.root-servers.net. 22 | . 516107 IN NS i.root-servers.net. 23 | . 516107 IN NS j.root-servers.net. 24 | . 516107 IN NS k.root-servers.net. 25 | . 516107 IN NS l.root-servers.net. 26 | . 516107 IN NS m.root-servers.net. 27 | . 516107 IN RRSIG NS 8 0 518400 20230913050000 20230831040000 11019 . sTegTb4O1m5gsG6/bNYMthI0KmGTq0sqyKzys6J9GjN05eew+r+hommx jkUk2k0SL8gFMvEOTCmObUw94Ln6qHK5FbyThvQFvxzF7TMBc+YIVEAU 9qYKNNcB+kXOdkrSYVUjFFKfIWbczm/4XhvAv8GkZqbNKEJwkgyKi9bH ippRdD67TNBWoaij+Q8XvlwnHXP3xfiptcTuxtsx8zSlBzVvKMb2GvlL W/Uf6QR+eL5QstjrqOv6TCMPz5UBtEQbuPBiZWArdsERT/3WH8Qir6Rq sFGpVbXijVDFykKxR3Cjby5zB/iQGlAdxFUY2uwJvvVu1dR/WE/G2IoG OUsTMw== 28 | 29 | ;; ADDITIONAL SECTION: 30 | a.root-servers.net. 516107 IN A 198.41.0.4 31 | a.root-servers.net. 516107 IN AAAA 2001:503:ba3e::2:30 32 | b.root-servers.net. 516107 IN A 199.9.14.201 33 | b.root-servers.net. 516107 IN AAAA 2001:500:200::b 34 | c.root-servers.net. 516107 IN A 192.33.4.12 35 | c.root-servers.net. 516107 IN AAAA 2001:500:2::c 36 | d.root-servers.net. 516107 IN A 199.7.91.13 37 | d.root-servers.net. 516107 IN AAAA 2001:500:2d::d 38 | e.root-servers.net. 516107 IN A 192.203.230.10 39 | e.root-servers.net. 516107 IN AAAA 2001:500:a8::e 40 | f.root-servers.net. 516107 IN A 192.5.5.241 41 | f.root-servers.net. 516107 IN AAAA 2001:500:2f::f 42 | g.root-servers.net. 516107 IN A 192.112.36.4 43 | g.root-servers.net. 516107 IN AAAA 2001:500:12::d0d 44 | h.root-servers.net. 516107 IN A 198.97.190.53 45 | h.root-servers.net. 516107 IN AAAA 2001:500:1::53 46 | i.root-servers.net. 516107 IN A 192.36.148.17 47 | i.root-servers.net. 516107 IN AAAA 2001:7fe::53 48 | j.root-servers.net. 516107 IN A 192.58.128.30 49 | j.root-servers.net. 516107 IN AAAA 2001:503:c27::2:30 50 | k.root-servers.net. 516107 IN A 193.0.14.129 51 | k.root-servers.net. 516107 IN AAAA 2001:7fd::1 52 | l.root-servers.net. 516107 IN A 199.7.83.42 53 | l.root-servers.net. 516107 IN AAAA 2001:500:9f::42 54 | m.root-servers.net. 516107 IN A 202.12.27.33 55 | m.root-servers.net. 516107 IN AAAA 2001:dc3::35 56 | 57 | ;; Query time: 29 msec 58 | ;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP) 59 | ;; WHEN: Thu Aug 31 08:01:33 EDT 2023 60 | ;; MSG SIZE rcvd: 1097 61 | 62 | ;; Got answer: 63 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9936 64 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 15, ADDITIONAL: 27 65 | 66 | ;; OPT PSEUDOSECTION: 67 | ; EDNS: version: 0, flags: do; udp: 1232 68 | ; COOKIE: cedc86d9ce7f9d030100000064f0811d91edc452bc440328 (good) 69 | ;; QUESTION SECTION: 70 | ;neg-cache.ring269.messwithdns.com. IN A 71 | 72 | ;; AUTHORITY SECTION: 73 | com. 172800 IN NS e.gtld-servers.net. 74 | com. 172800 IN NS m.gtld-servers.net. 75 | com. 172800 IN NS b.gtld-servers.net. 76 | com. 172800 IN NS k.gtld-servers.net. 77 | com. 172800 IN NS g.gtld-servers.net. 78 | com. 172800 IN NS i.gtld-servers.net. 79 | com. 172800 IN NS h.gtld-servers.net. 80 | com. 172800 IN NS c.gtld-servers.net. 81 | com. 172800 IN NS d.gtld-servers.net. 82 | com. 172800 IN NS a.gtld-servers.net. 83 | com. 172800 IN NS j.gtld-servers.net. 84 | com. 172800 IN NS f.gtld-servers.net. 85 | com. 172800 IN NS l.gtld-servers.net. 86 | com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 87 | com. 86400 IN RRSIG DS 8 1 86400 20230913050000 20230831040000 11019 . SDSqlwjZKrqNVP2SV+cRQEaiBBNvx8tIP8+tbNmNGyi9LqcDEKCWB5J8 3qfhueg/Wg31In3vFA7InAoeCciGeBXegT+iNdPNRt+/L2oXk5WYteQI YpQ9TvjilFBmvbfrfoJUxCe4yQsN7cMsvOB17e9OpWAdZxTdjra7qT+I GkHCzIhWJJ0y1LlpqGOSwPff2N3QABYzndPE5K/8Jn0kQaXS4yPSKN/G 6uGag6wrdb3e6wcLwg0iOe0B7cjBODKJF1OfnfIjdjd59w8uQfK8Zs9z 4etaabDHVcYrLCtVZeRU3uZ8jDYhw7O6EqjBQYgUZkEMe5TDIML7M+CT eP70VQ== 88 | 89 | ;; ADDITIONAL SECTION: 90 | m.gtld-servers.net. 172800 IN A 192.55.83.30 91 | l.gtld-servers.net. 172800 IN A 192.41.162.30 92 | k.gtld-servers.net. 172800 IN A 192.52.178.30 93 | j.gtld-servers.net. 172800 IN A 192.48.79.30 94 | i.gtld-servers.net. 172800 IN A 192.43.172.30 95 | h.gtld-servers.net. 172800 IN A 192.54.112.30 96 | g.gtld-servers.net. 172800 IN A 192.42.93.30 97 | f.gtld-servers.net. 172800 IN A 192.35.51.30 98 | e.gtld-servers.net. 172800 IN A 192.12.94.30 99 | d.gtld-servers.net. 172800 IN A 192.31.80.30 100 | c.gtld-servers.net. 172800 IN A 192.26.92.30 101 | b.gtld-servers.net. 172800 IN A 192.33.14.30 102 | a.gtld-servers.net. 172800 IN A 192.5.6.30 103 | m.gtld-servers.net. 172800 IN AAAA 2001:501:b1f9::30 104 | l.gtld-servers.net. 172800 IN AAAA 2001:500:d937::30 105 | k.gtld-servers.net. 172800 IN AAAA 2001:503:d2d::30 106 | j.gtld-servers.net. 172800 IN AAAA 2001:502:7094::30 107 | i.gtld-servers.net. 172800 IN AAAA 2001:503:39c1::30 108 | h.gtld-servers.net. 172800 IN AAAA 2001:502:8cc::30 109 | g.gtld-servers.net. 172800 IN AAAA 2001:503:eea3::30 110 | f.gtld-servers.net. 172800 IN AAAA 2001:503:d414::30 111 | e.gtld-servers.net. 172800 IN AAAA 2001:502:1ca1::30 112 | d.gtld-servers.net. 172800 IN AAAA 2001:500:856e::30 113 | c.gtld-servers.net. 172800 IN AAAA 2001:503:83eb::30 114 | b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30 115 | a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30 116 | 117 | ;; Query time: 30 msec 118 | ;; SERVER: 199.9.14.201#53(b.root-servers.net) (UDP) 119 | ;; WHEN: Thu Aug 31 08:01:33 EDT 2023 120 | ;; MSG SIZE rcvd: 1224 121 | 122 | ;; Got answer: 123 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34755 124 | ;; flags: qr; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 5 125 | 126 | ;; OPT PSEUDOSECTION: 127 | ; EDNS: version: 0, flags: do; udp: 4096 128 | ;; QUESTION SECTION: 129 | ;neg-cache.ring269.messwithdns.com. IN A 130 | 131 | ;; AUTHORITY SECTION: 132 | messwithdns.com. 172800 IN NS mess-with-dns1.wizardzines.com. 133 | messwithdns.com. 172800 IN NS mess-with-dns2.wizardzines.com. 134 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q2D6NI4I7EQH8NA30NS61O48UL8G5 NS SOA RRSIG DNSKEY NSEC3PARAM 135 | CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20230907042432 20230831031432 4459 com. kfAa2AgL3x3C+IosF42yh93sqnQ7+rZxcAopsjOaXsD870wdt6cEDNeB e/3ssjbBsk0tn6mV095Q1LF1ca8c0rpH/fySsq251qNcNiMl6Pd8CUrj mDbXcxX0w8H+4yaARxywy4FDdcwRPtJcHcEQK6PElT0le0lPsQ/DekdS EpBdYJ196p6aN4KFDTuCs00wonokUDdxdImdbYZeVON0PQ== 136 | NA6D7RVNOPPPES6U4N6CFLNOUTV62LIK.com. 86400 IN NSEC3 1 1 0 - NA6DATUIVJS42OFIHSKREAEC1L5KNACA NS DS RRSIG 137 | NA6D7RVNOPPPES6U4N6CFLNOUTV62LIK.com. 86400 IN RRSIG NSEC3 8 2 86400 20230905062536 20230829051536 4459 com. EqMXw6nYfuhGjFGb5T4mDsYTCwwI66qwBWvpFC9MJRrn6IXRiAJxGWjD 8+Kux6phKcUhGWCsHgvv9/B+seewMyHo80Ljqy7r7pRMGRH9UGie1+YE Xqz6A6blMN1Pe1Wp0+d/mZBAvZRx/NLvLrbhOTNXaY2q8kegfFgVdgLW aAok/QX8W0hh4v8ykU38Jj3CVJ4I94yIcqvT1/2knXbzpg== 138 | 139 | ;; ADDITIONAL SECTION: 140 | mess-with-dns1.wizardzines.com. 172800 IN A 213.188.214.237 141 | mess-with-dns1.wizardzines.com. 172800 IN AAAA 2a09:8280:1::a:b31 142 | mess-with-dns2.wizardzines.com. 172800 IN A 213.188.214.254 143 | mess-with-dns2.wizardzines.com. 172800 IN AAAA 2a09:8280:1::a:b31 144 | 145 | ;; Query time: 93 msec 146 | ;; SERVER: 192.31.80.30#53(d.gtld-servers.net) (UDP) 147 | ;; WHEN: Thu Aug 31 08:01:33 EDT 2023 148 | ;; MSG SIZE rcvd: 769 149 | 150 | ;; expected opt record in response 151 | ;; Got answer: 152 | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27146 153 | ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 154 | 155 | ;; QUESTION SECTION: 156 | ;neg-cache.ring269.messwithdns.com. IN A 157 | 158 | ;; ANSWER SECTION: 159 | neg-cache.ring269.messwithdns.com. 300 IN A 1.2.3.4 160 | 161 | ;; AUTHORITY SECTION: 162 | messwithdns.com. 3600 IN SOA mess-with-dns1.wizardzines.com. julia.wizardzines.com. 82985 3600 3600 7300 3600 163 | 164 | ;; Query time: 35 msec 165 | ;; SERVER: 213.188.214.237#53(mess-with-dns1.wizardzines.com) (UDP) 166 | ;; WHEN: Thu Aug 31 08:01:33 EDT 2023 167 | ;; MSG SIZE rcvd: 136 168 | 169 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= 2 | github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 3 | github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= 4 | github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= 5 | github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= 6 | github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= 7 | github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= 8 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 9 | github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= 10 | github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 11 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= 12 | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 13 | github.com/hexops/autogold v0.8.1 h1:wvyd/bAJ+Dy+DcE09BoLk6r4Fa5R5W+O+GUzmR985WM= 14 | github.com/hexops/autogold v0.8.1/go.mod h1:97HLDXyG23akzAoRYJh/2OBs3kd80eHyKPvZw0S5ZBY= 15 | github.com/hexops/autogold/v2 v2.2.1 h1:JPUXuZQGkcQMv7eeDXuNMovjfoRYaa0yVcm+F3voaGY= 16 | github.com/hexops/autogold/v2 v2.2.1/go.mod h1:IJwxtUfj1BGLm0YsR/k+dIxYi6xbeLjqGke2bzcOTMI= 17 | github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= 18 | github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= 19 | github.com/hexops/valast v1.4.4 h1:rETyycw+/L2ZVJHHNxEBgh8KUn+87WugH9MxcEv9PGs= 20 | github.com/hexops/valast v1.4.4/go.mod h1:Jcy1pNH7LNraVaAZDLyv21hHg2WBv9Nf9FL6fGxU7o4= 21 | github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= 22 | github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 23 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 24 | github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= 25 | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= 26 | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 27 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 28 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 29 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= 30 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= 31 | github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= 32 | github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= 33 | github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= 34 | github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= 35 | github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= 36 | github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 37 | github.com/nightlyone/lockfile v1.0.0 h1:RHep2cFKK4PonZJDdEl4GmkabuhbsRMgk/k3uAmxBiA= 38 | github.com/nightlyone/lockfile v1.0.0/go.mod h1:rywoIealpdNse2r832aiD9jRk8ErCatROs6LzC841CI= 39 | github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= 40 | github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= 41 | github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= 42 | github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= 43 | github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= 44 | github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 45 | github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= 46 | github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= 47 | github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= 48 | github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 49 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 50 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 51 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 52 | golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= 53 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 54 | golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 55 | golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 56 | golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 57 | golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= 58 | golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 59 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 60 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 61 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 62 | golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= 63 | golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= 64 | golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= 65 | golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 66 | golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= 67 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 68 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 69 | golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 70 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 71 | golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= 72 | golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= 73 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 74 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 75 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 76 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 77 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 78 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 79 | golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 80 | golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 81 | golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 82 | golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 83 | golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 84 | golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 85 | golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= 86 | golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 87 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 88 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 89 | golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= 90 | golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 91 | golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= 92 | golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= 93 | golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= 94 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 95 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 96 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 97 | golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 98 | golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 99 | golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 100 | golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= 101 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 102 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 103 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 104 | golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= 105 | golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= 106 | golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= 107 | golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= 108 | golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= 109 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 110 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 111 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 112 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 113 | gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= 114 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 115 | mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= 116 | mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E= 117 | mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js= 118 | -------------------------------------------------------------------------------- /parsing_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/hexops/autogold/v2" 7 | ) 8 | 9 | // autogold.Expect(nil).Equal(t, got) 10 | 11 | func TestParseBasic(t *testing.T) { 12 | got := parseDigOutput(readFile(t, "testdata/dig_example_com.txt")) 13 | 14 | autogold.Expect(DNSResponse{ 15 | Status: "NOERROR", ServerIP: "192.168.1.1:53", 16 | ServerName: "192.168.1.1", 17 | Question: Question{ 18 | Name: "example.com.", 19 | Type: "A", 20 | Class: "IN", 21 | }, 22 | Answers: []Record{{ 23 | Name: "example.com.", 24 | TTL: 75789, 25 | Class: "IN", 26 | Type: "A", 27 | Data: "93.184.216.34", 28 | }}, 29 | Authorities: []Record{}, 30 | Additionals: []Record{}, 31 | }).Equal(t, got) 32 | } 33 | 34 | func TestParseBasicV6(t *testing.T) { 35 | got := parseDigOutput(readFile(t, "testdata/dig_example_com_v6.txt")) 36 | 37 | autogold.Expect(DNSResponse{ 38 | Status: "NOERROR", ServerIP: "2001:4860:4860::8888:53", 39 | ServerName: "2001:4860:4860::8888", 40 | Question: Question{ 41 | Name: "example.com.", 42 | Type: "AAAA", 43 | Class: "IN", 44 | }, 45 | Answers: []Record{{ 46 | Name: "example.com.", 47 | TTL: 21370, 48 | Class: "IN", 49 | Type: "AAAA", 50 | Data: "2606:2800:220:1:248:1893:25c8:1946", 51 | }}, 52 | Authorities: []Record{}, 53 | Additionals: []Record{}, 54 | }).Equal(t, got) 55 | } 56 | 57 | func TestParseRootNameserver(t *testing.T) { 58 | got := parseDigOutput(readFile(t, "testdata/dig_example_com_authority.txt")) 59 | 60 | autogold.Expect(DNSResponse{ 61 | Status: "NOERROR", ServerIP: "198.41.0.4:53", 62 | ServerName: "a.root-servers.net", 63 | Question: Question{ 64 | Name: "example.com.", 65 | Type: "A", 66 | Class: "IN", 67 | }, 68 | Answers: []Record{}, 69 | Authorities: []Record{ 70 | { 71 | Name: "com.", 72 | TTL: 172800, 73 | Class: "IN", 74 | Type: "NS", 75 | Data: "a.gtld-servers.net.", 76 | }, 77 | { 78 | Name: "com.", 79 | TTL: 172800, 80 | Class: "IN", 81 | Type: "NS", 82 | Data: "b.gtld-servers.net.", 83 | }, 84 | { 85 | Name: "com.", 86 | TTL: 172800, 87 | Class: "IN", 88 | Type: "NS", 89 | Data: "c.gtld-servers.net.", 90 | }, 91 | { 92 | Name: "com.", 93 | TTL: 172800, 94 | Class: "IN", 95 | Type: "NS", 96 | Data: "d.gtld-servers.net.", 97 | }, 98 | { 99 | Name: "com.", 100 | TTL: 172800, 101 | Class: "IN", 102 | Type: "NS", 103 | Data: "e.gtld-servers.net.", 104 | }, 105 | { 106 | Name: "com.", 107 | TTL: 172800, 108 | Class: "IN", 109 | Type: "NS", 110 | Data: "f.gtld-servers.net.", 111 | }, 112 | { 113 | Name: "com.", 114 | TTL: 172800, 115 | Class: "IN", 116 | Type: "NS", 117 | Data: "g.gtld-servers.net.", 118 | }, 119 | { 120 | Name: "com.", 121 | TTL: 172800, 122 | Class: "IN", 123 | Type: "NS", 124 | Data: "h.gtld-servers.net.", 125 | }, 126 | { 127 | Name: "com.", 128 | TTL: 172800, 129 | Class: "IN", 130 | Type: "NS", 131 | Data: "i.gtld-servers.net.", 132 | }, 133 | { 134 | Name: "com.", 135 | TTL: 172800, 136 | Class: "IN", 137 | Type: "NS", 138 | Data: "j.gtld-servers.net.", 139 | }, 140 | { 141 | Name: "com.", 142 | TTL: 172800, 143 | Class: "IN", 144 | Type: "NS", 145 | Data: "k.gtld-servers.net.", 146 | }, 147 | { 148 | Name: "com.", 149 | TTL: 172800, 150 | Class: "IN", 151 | Type: "NS", 152 | Data: "l.gtld-servers.net.", 153 | }, 154 | { 155 | Name: "com.", 156 | TTL: 172800, 157 | Class: "IN", 158 | Type: "NS", 159 | Data: "m.gtld-servers.net.", 160 | }, 161 | }, 162 | Additionals: []Record{ 163 | { 164 | Name: "a.gtld-servers.net.", 165 | TTL: 172800, 166 | Class: "IN", 167 | Type: "A", 168 | Data: "192.5.6.30", 169 | }, 170 | { 171 | Name: "b.gtld-servers.net.", 172 | TTL: 172800, 173 | Class: "IN", 174 | Type: "A", 175 | Data: "192.33.14.30", 176 | }, 177 | { 178 | Name: "c.gtld-servers.net.", 179 | TTL: 172800, 180 | Class: "IN", 181 | Type: "A", 182 | Data: "192.26.92.30", 183 | }, 184 | { 185 | Name: "d.gtld-servers.net.", 186 | TTL: 172800, 187 | Class: "IN", 188 | Type: "A", 189 | Data: "192.31.80.30", 190 | }, 191 | { 192 | Name: "e.gtld-servers.net.", 193 | TTL: 172800, 194 | Class: "IN", 195 | Type: "A", 196 | Data: "192.12.94.30", 197 | }, 198 | { 199 | Name: "f.gtld-servers.net.", 200 | TTL: 172800, 201 | Class: "IN", 202 | Type: "A", 203 | Data: "192.35.51.30", 204 | }, 205 | { 206 | Name: "g.gtld-servers.net.", 207 | TTL: 172800, 208 | Class: "IN", 209 | Type: "A", 210 | Data: "192.42.93.30", 211 | }, 212 | { 213 | Name: "h.gtld-servers.net.", 214 | TTL: 172800, 215 | Class: "IN", 216 | Type: "A", 217 | Data: "192.54.112.30", 218 | }, 219 | { 220 | Name: "i.gtld-servers.net.", 221 | TTL: 172800, 222 | Class: "IN", 223 | Type: "A", 224 | Data: "192.43.172.30", 225 | }, 226 | { 227 | Name: "j.gtld-servers.net.", 228 | TTL: 172800, 229 | Class: "IN", 230 | Type: "A", 231 | Data: "192.48.79.30", 232 | }, 233 | { 234 | Name: "k.gtld-servers.net.", 235 | TTL: 172800, 236 | Class: "IN", 237 | Type: "A", 238 | Data: "192.52.178.30", 239 | }, 240 | { 241 | Name: "l.gtld-servers.net.", 242 | TTL: 172800, 243 | Class: "IN", 244 | Type: "A", 245 | Data: "192.41.162.30", 246 | }, 247 | { 248 | Name: "m.gtld-servers.net.", 249 | TTL: 172800, 250 | Class: "IN", 251 | Type: "A", 252 | Data: "192.55.83.30", 253 | }, 254 | { 255 | Name: "a.gtld-servers.net.", 256 | TTL: 172800, 257 | Class: "IN", 258 | Type: "AAAA", 259 | Data: "2001:503:a83e::2:30", 260 | }, 261 | { 262 | Name: "b.gtld-servers.net.", 263 | TTL: 172800, 264 | Class: "IN", 265 | Type: "AAAA", 266 | Data: "2001:503:231d::2:30", 267 | }, 268 | { 269 | Name: "c.gtld-servers.net.", 270 | TTL: 172800, 271 | Class: "IN", 272 | Type: "AAAA", 273 | Data: "2001:503:83eb::30", 274 | }, 275 | { 276 | Name: "d.gtld-servers.net.", 277 | TTL: 172800, 278 | Class: "IN", 279 | Type: "AAAA", 280 | Data: "2001:500:856e::30", 281 | }, 282 | { 283 | Name: "e.gtld-servers.net.", 284 | TTL: 172800, 285 | Class: "IN", 286 | Type: "AAAA", 287 | Data: "2001:502:1ca1::30", 288 | }, 289 | { 290 | Name: "f.gtld-servers.net.", 291 | TTL: 172800, 292 | Class: "IN", 293 | Type: "AAAA", 294 | Data: "2001:503:d414::30", 295 | }, 296 | { 297 | Name: "g.gtld-servers.net.", 298 | TTL: 172800, 299 | Class: "IN", 300 | Type: "AAAA", 301 | Data: "2001:503:eea3::30", 302 | }, 303 | { 304 | Name: "h.gtld-servers.net.", 305 | TTL: 172800, 306 | Class: "IN", 307 | Type: "AAAA", 308 | Data: "2001:502:8cc::30", 309 | }, 310 | { 311 | Name: "i.gtld-servers.net.", 312 | TTL: 172800, 313 | Class: "IN", 314 | Type: "AAAA", 315 | Data: "2001:503:39c1::30", 316 | }, 317 | { 318 | Name: "j.gtld-servers.net.", 319 | TTL: 172800, 320 | Class: "IN", 321 | Type: "AAAA", 322 | Data: "2001:502:7094::30", 323 | }, 324 | { 325 | Name: "k.gtld-servers.net.", 326 | TTL: 172800, 327 | Class: "IN", 328 | Type: "AAAA", 329 | Data: "2001:503:d2d::30", 330 | }, 331 | { 332 | Name: "l.gtld-servers.net.", 333 | TTL: 172800, 334 | Class: "IN", 335 | Type: "AAAA", 336 | Data: "2001:500:d937::30", 337 | }, 338 | { 339 | Name: "m.gtld-servers.net.", 340 | TTL: 172800, 341 | Class: "IN", 342 | Type: "AAAA", 343 | Data: "2001:501:b1f9::30", 344 | }, 345 | }, 346 | }).Equal(t, got) 347 | } 348 | 349 | func TestTrace(t *testing.T) { 350 | got := parseDigTraceOutput(readFile(t, "testdata/dig_trace_example_com.txt")) 351 | autogold.Expect([]DNSResponse{ 352 | { 353 | Status: "NOERROR", 354 | ServerIP: "192.168.1.1:53", 355 | ServerName: "192.168.1.1", 356 | Question: Question{ 357 | Name: ".", 358 | Type: "NS", 359 | Class: "IN", 360 | }, 361 | Answers: []Record{ 362 | { 363 | Name: ".", 364 | TTL: 517950, 365 | Class: "IN", 366 | Type: "NS", 367 | Data: "a.root-servers.net.", 368 | }, 369 | { 370 | Name: ".", 371 | TTL: 517950, 372 | Class: "IN", 373 | Type: "NS", 374 | Data: "b.root-servers.net.", 375 | }, 376 | { 377 | Name: ".", 378 | TTL: 517950, 379 | Class: "IN", 380 | Type: "NS", 381 | Data: "c.root-servers.net.", 382 | }, 383 | { 384 | Name: ".", 385 | TTL: 517950, 386 | Class: "IN", 387 | Type: "NS", 388 | Data: "d.root-servers.net.", 389 | }, 390 | { 391 | Name: ".", 392 | TTL: 517950, 393 | Class: "IN", 394 | Type: "NS", 395 | Data: "e.root-servers.net.", 396 | }, 397 | { 398 | Name: ".", 399 | TTL: 517950, 400 | Class: "IN", 401 | Type: "NS", 402 | Data: "f.root-servers.net.", 403 | }, 404 | { 405 | Name: ".", 406 | TTL: 517950, 407 | Class: "IN", 408 | Type: "NS", 409 | Data: "g.root-servers.net.", 410 | }, 411 | { 412 | Name: ".", 413 | TTL: 517950, 414 | Class: "IN", 415 | Type: "NS", 416 | Data: "h.root-servers.net.", 417 | }, 418 | { 419 | Name: ".", 420 | TTL: 517950, 421 | Class: "IN", 422 | Type: "NS", 423 | Data: "i.root-servers.net.", 424 | }, 425 | { 426 | Name: ".", 427 | TTL: 517950, 428 | Class: "IN", 429 | Type: "NS", 430 | Data: "j.root-servers.net.", 431 | }, 432 | { 433 | Name: ".", 434 | TTL: 517950, 435 | Class: "IN", 436 | Type: "NS", 437 | Data: "k.root-servers.net.", 438 | }, 439 | { 440 | Name: ".", 441 | TTL: 517950, 442 | Class: "IN", 443 | Type: "NS", 444 | Data: "l.root-servers.net.", 445 | }, 446 | { 447 | Name: ".", 448 | TTL: 517950, 449 | Class: "IN", 450 | Type: "NS", 451 | Data: "m.root-servers.net.", 452 | }, 453 | { 454 | Name: ".", 455 | TTL: 517950, 456 | Class: "IN", 457 | Type: "RRSIG", 458 | Data: "NS 8 0 518400 20230912210000 20230830200000 11019 . iKKR8LMlixZs53amGnK69lRbb91ttySCHMWjIOzbI3eYCOL4f5ZnyJuY yzo1VWA/TlMCM4NJzScyvIVJS5jaz2oKEUDLzm7v9xoFhYMbBL7y7fc+ 8ByPRZ5rYOcRjhimlToRnAPxh8iXG5xsAmlCJ8+vy00eL7l3Sn8bsQaf x7cvq5ZVYpUZ1jf8S1VhJjHrw8iTNYZHPqmoL7DrzszkKSTrZD5Bmzzt I9qVbpWV69F5cyr/uGo1DhH5Sscz0TVGPBAErFW+EfdO/D491T3Bv1bE MR7+m5TwuQTOs6u4vztRyz+GxvMweSl6xoLxhJ75J+D4snnNZPr+EGGz thIwOQ==", 459 | }, 460 | }, 461 | Authorities: []Record{}, 462 | Additionals: []Record{ 463 | { 464 | Name: "a.root-servers.net.", 465 | TTL: 517950, 466 | Class: "IN", 467 | Type: "A", 468 | Data: "198.41.0.4", 469 | }, 470 | { 471 | Name: "a.root-servers.net.", 472 | TTL: 517950, 473 | Class: "IN", 474 | Type: "AAAA", 475 | Data: "2001:503:ba3e::2:30", 476 | }, 477 | { 478 | Name: "b.root-servers.net.", 479 | TTL: 517950, 480 | Class: "IN", 481 | Type: "A", 482 | Data: "199.9.14.201", 483 | }, 484 | { 485 | Name: "b.root-servers.net.", 486 | TTL: 517950, 487 | Class: "IN", 488 | Type: "AAAA", 489 | Data: "2001:500:200::b", 490 | }, 491 | { 492 | Name: "c.root-servers.net.", 493 | TTL: 517950, 494 | Class: "IN", 495 | Type: "A", 496 | Data: "192.33.4.12", 497 | }, 498 | { 499 | Name: "c.root-servers.net.", 500 | TTL: 517950, 501 | Class: "IN", 502 | Type: "AAAA", 503 | Data: "2001:500:2::c", 504 | }, 505 | { 506 | Name: "d.root-servers.net.", 507 | TTL: 517950, 508 | Class: "IN", 509 | Type: "A", 510 | Data: "199.7.91.13", 511 | }, 512 | { 513 | Name: "d.root-servers.net.", 514 | TTL: 517950, 515 | Class: "IN", 516 | Type: "AAAA", 517 | Data: "2001:500:2d::d", 518 | }, 519 | { 520 | Name: "e.root-servers.net.", 521 | TTL: 517950, 522 | Class: "IN", 523 | Type: "A", 524 | Data: "192.203.230.10", 525 | }, 526 | { 527 | Name: "e.root-servers.net.", 528 | TTL: 517950, 529 | Class: "IN", 530 | Type: "AAAA", 531 | Data: "2001:500:a8::e", 532 | }, 533 | { 534 | Name: "f.root-servers.net.", 535 | TTL: 517950, 536 | Class: "IN", 537 | Type: "A", 538 | Data: "192.5.5.241", 539 | }, 540 | { 541 | Name: "f.root-servers.net.", 542 | TTL: 517950, 543 | Class: "IN", 544 | Type: "AAAA", 545 | Data: "2001:500:2f::f", 546 | }, 547 | { 548 | Name: "g.root-servers.net.", 549 | TTL: 517950, 550 | Class: "IN", 551 | Type: "A", 552 | Data: "192.112.36.4", 553 | }, 554 | { 555 | Name: "g.root-servers.net.", 556 | TTL: 517950, 557 | Class: "IN", 558 | Type: "AAAA", 559 | Data: "2001:500:12::d0d", 560 | }, 561 | { 562 | Name: "h.root-servers.net.", 563 | TTL: 517950, 564 | Class: "IN", 565 | Type: "A", 566 | Data: "198.97.190.53", 567 | }, 568 | { 569 | Name: "h.root-servers.net.", 570 | TTL: 517950, 571 | Class: "IN", 572 | Type: "AAAA", 573 | Data: "2001:500:1::53", 574 | }, 575 | { 576 | Name: "i.root-servers.net.", 577 | TTL: 517950, 578 | Class: "IN", 579 | Type: "A", 580 | Data: "192.36.148.17", 581 | }, 582 | { 583 | Name: "i.root-servers.net.", 584 | TTL: 517950, 585 | Class: "IN", 586 | Type: "AAAA", 587 | Data: "2001:7fe::53", 588 | }, 589 | { 590 | Name: "j.root-servers.net.", 591 | TTL: 517950, 592 | Class: "IN", 593 | Type: "A", 594 | Data: "192.58.128.30", 595 | }, 596 | { 597 | Name: "j.root-servers.net.", 598 | TTL: 517950, 599 | Class: "IN", 600 | Type: "AAAA", 601 | Data: "2001:503:c27::2:30", 602 | }, 603 | { 604 | Name: "k.root-servers.net.", 605 | TTL: 517950, 606 | Class: "IN", 607 | Type: "A", 608 | Data: "193.0.14.129", 609 | }, 610 | { 611 | Name: "k.root-servers.net.", 612 | TTL: 517950, 613 | Class: "IN", 614 | Type: "AAAA", 615 | Data: "2001:7fd::1", 616 | }, 617 | { 618 | Name: "l.root-servers.net.", 619 | TTL: 517950, 620 | Class: "IN", 621 | Type: "A", 622 | Data: "199.7.83.42", 623 | }, 624 | { 625 | Name: "l.root-servers.net.", 626 | TTL: 517950, 627 | Class: "IN", 628 | Type: "AAAA", 629 | Data: "2001:500:9f::42", 630 | }, 631 | { 632 | Name: "m.root-servers.net.", 633 | TTL: 517950, 634 | Class: "IN", 635 | Type: "A", 636 | Data: "202.12.27.33", 637 | }, 638 | { 639 | Name: "m.root-servers.net.", 640 | TTL: 517950, 641 | Class: "IN", 642 | Type: "AAAA", 643 | Data: "2001:dc3::35", 644 | }, 645 | }, 646 | }, 647 | { 648 | Status: "NOERROR", 649 | ServerIP: "199.7.83.42:53", 650 | ServerName: "l.root-servers.net", 651 | Question: Question{ 652 | Name: "example.com.", 653 | Type: "A", 654 | Class: "IN", 655 | }, 656 | Answers: []Record{}, 657 | Authorities: []Record{ 658 | { 659 | Name: "com.", 660 | TTL: 172800, 661 | Class: "IN", 662 | Type: "NS", 663 | Data: "a.gtld-servers.net.", 664 | }, 665 | { 666 | Name: "com.", 667 | TTL: 172800, 668 | Class: "IN", 669 | Type: "NS", 670 | Data: "b.gtld-servers.net.", 671 | }, 672 | { 673 | Name: "com.", 674 | TTL: 172800, 675 | Class: "IN", 676 | Type: "NS", 677 | Data: "c.gtld-servers.net.", 678 | }, 679 | { 680 | Name: "com.", 681 | TTL: 172800, 682 | Class: "IN", 683 | Type: "NS", 684 | Data: "d.gtld-servers.net.", 685 | }, 686 | { 687 | Name: "com.", 688 | TTL: 172800, 689 | Class: "IN", 690 | Type: "NS", 691 | Data: "e.gtld-servers.net.", 692 | }, 693 | { 694 | Name: "com.", 695 | TTL: 172800, 696 | Class: "IN", 697 | Type: "NS", 698 | Data: "f.gtld-servers.net.", 699 | }, 700 | { 701 | Name: "com.", 702 | TTL: 172800, 703 | Class: "IN", 704 | Type: "NS", 705 | Data: "g.gtld-servers.net.", 706 | }, 707 | { 708 | Name: "com.", 709 | TTL: 172800, 710 | Class: "IN", 711 | Type: "NS", 712 | Data: "h.gtld-servers.net.", 713 | }, 714 | { 715 | Name: "com.", 716 | TTL: 172800, 717 | Class: "IN", 718 | Type: "NS", 719 | Data: "i.gtld-servers.net.", 720 | }, 721 | { 722 | Name: "com.", 723 | TTL: 172800, 724 | Class: "IN", 725 | Type: "NS", 726 | Data: "j.gtld-servers.net.", 727 | }, 728 | { 729 | Name: "com.", 730 | TTL: 172800, 731 | Class: "IN", 732 | Type: "NS", 733 | Data: "k.gtld-servers.net.", 734 | }, 735 | { 736 | Name: "com.", 737 | TTL: 172800, 738 | Class: "IN", 739 | Type: "NS", 740 | Data: "l.gtld-servers.net.", 741 | }, 742 | { 743 | Name: "com.", 744 | TTL: 172800, 745 | Class: "IN", 746 | Type: "NS", 747 | Data: "m.gtld-servers.net.", 748 | }, 749 | { 750 | Name: "com.", 751 | TTL: 86400, 752 | Class: "IN", 753 | Type: "DS", 754 | Data: "30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766", 755 | }, 756 | { 757 | Name: "com.", 758 | TTL: 86400, 759 | Class: "IN", 760 | Type: "RRSIG", 761 | Data: "DS 8 1 86400 20230912210000 20230830200000 11019 . b0f9IhTkzzSIFp5ioeI5YJbcH3/hAdM1kOxkOF3Tl9f69Pytjw2OdA2S NVkS9Ul1SlZYapCa+OJiyHbDjiV1Ub/kqk6yzg6E1JwVQObfHH9j8zvx SmLzCMLuTVGCFZKNyRa0K6axO+x+ZYpwzul6IVzKREsQC9JdUogygyrO ZymGxDMvSj6d9UXT+g2xVGwfuncFklYAdrtM+z5xYIy0XXQbpsZ6Dqsv T1LR/GKAwGGjNXE2RICg8prz92t36G4WUO/AJuf8FoYGFReK3Vhh4G1H 6AXxSN7tYG2fSJ74qPe95xIV7O5JqULVKdKtCYDo3o71+AziVpAbNS4Z vOEbog==", 762 | }, 763 | }, 764 | Additionals: []Record{ 765 | { 766 | Name: "a.gtld-servers.net.", 767 | TTL: 172800, 768 | Class: "IN", 769 | Type: "A", 770 | Data: "192.5.6.30", 771 | }, 772 | { 773 | Name: "a.gtld-servers.net.", 774 | TTL: 172800, 775 | Class: "IN", 776 | Type: "AAAA", 777 | Data: "2001:503:a83e::2:30", 778 | }, 779 | { 780 | Name: "b.gtld-servers.net.", 781 | TTL: 172800, 782 | Class: "IN", 783 | Type: "A", 784 | Data: "192.33.14.30", 785 | }, 786 | { 787 | Name: "b.gtld-servers.net.", 788 | TTL: 172800, 789 | Class: "IN", 790 | Type: "AAAA", 791 | Data: "2001:503:231d::2:30", 792 | }, 793 | { 794 | Name: "c.gtld-servers.net.", 795 | TTL: 172800, 796 | Class: "IN", 797 | Type: "A", 798 | Data: "192.26.92.30", 799 | }, 800 | { 801 | Name: "c.gtld-servers.net.", 802 | TTL: 172800, 803 | Class: "IN", 804 | Type: "AAAA", 805 | Data: "2001:503:83eb::30", 806 | }, 807 | { 808 | Name: "d.gtld-servers.net.", 809 | TTL: 172800, 810 | Class: "IN", 811 | Type: "A", 812 | Data: "192.31.80.30", 813 | }, 814 | { 815 | Name: "d.gtld-servers.net.", 816 | TTL: 172800, 817 | Class: "IN", 818 | Type: "AAAA", 819 | Data: "2001:500:856e::30", 820 | }, 821 | { 822 | Name: "e.gtld-servers.net.", 823 | TTL: 172800, 824 | Class: "IN", 825 | Type: "A", 826 | Data: "192.12.94.30", 827 | }, 828 | { 829 | Name: "e.gtld-servers.net.", 830 | TTL: 172800, 831 | Class: "IN", 832 | Type: "AAAA", 833 | Data: "2001:502:1ca1::30", 834 | }, 835 | { 836 | Name: "f.gtld-servers.net.", 837 | TTL: 172800, 838 | Class: "IN", 839 | Type: "A", 840 | Data: "192.35.51.30", 841 | }, 842 | { 843 | Name: "f.gtld-servers.net.", 844 | TTL: 172800, 845 | Class: "IN", 846 | Type: "AAAA", 847 | Data: "2001:503:d414::30", 848 | }, 849 | { 850 | Name: "g.gtld-servers.net.", 851 | TTL: 172800, 852 | Class: "IN", 853 | Type: "A", 854 | Data: "192.42.93.30", 855 | }, 856 | { 857 | Name: "g.gtld-servers.net.", 858 | TTL: 172800, 859 | Class: "IN", 860 | Type: "AAAA", 861 | Data: "2001:503:eea3::30", 862 | }, 863 | { 864 | Name: "h.gtld-servers.net.", 865 | TTL: 172800, 866 | Class: "IN", 867 | Type: "A", 868 | Data: "192.54.112.30", 869 | }, 870 | { 871 | Name: "h.gtld-servers.net.", 872 | TTL: 172800, 873 | Class: "IN", 874 | Type: "AAAA", 875 | Data: "2001:502:8cc::30", 876 | }, 877 | { 878 | Name: "i.gtld-servers.net.", 879 | TTL: 172800, 880 | Class: "IN", 881 | Type: "A", 882 | Data: "192.43.172.30", 883 | }, 884 | { 885 | Name: "i.gtld-servers.net.", 886 | TTL: 172800, 887 | Class: "IN", 888 | Type: "AAAA", 889 | Data: "2001:503:39c1::30", 890 | }, 891 | { 892 | Name: "j.gtld-servers.net.", 893 | TTL: 172800, 894 | Class: "IN", 895 | Type: "A", 896 | Data: "192.48.79.30", 897 | }, 898 | { 899 | Name: "j.gtld-servers.net.", 900 | TTL: 172800, 901 | Class: "IN", 902 | Type: "AAAA", 903 | Data: "2001:502:7094::30", 904 | }, 905 | { 906 | Name: "k.gtld-servers.net.", 907 | TTL: 172800, 908 | Class: "IN", 909 | Type: "A", 910 | Data: "192.52.178.30", 911 | }, 912 | { 913 | Name: "k.gtld-servers.net.", 914 | TTL: 172800, 915 | Class: "IN", 916 | Type: "AAAA", 917 | Data: "2001:503:d2d::30", 918 | }, 919 | { 920 | Name: "l.gtld-servers.net.", 921 | TTL: 172800, 922 | Class: "IN", 923 | Type: "A", 924 | Data: "192.41.162.30", 925 | }, 926 | { 927 | Name: "l.gtld-servers.net.", 928 | TTL: 172800, 929 | Class: "IN", 930 | Type: "AAAA", 931 | Data: "2001:500:d937::30", 932 | }, 933 | { 934 | Name: "m.gtld-servers.net.", 935 | TTL: 172800, 936 | Class: "IN", 937 | Type: "A", 938 | Data: "192.55.83.30", 939 | }, 940 | { 941 | Name: "m.gtld-servers.net.", 942 | TTL: 172800, 943 | Class: "IN", 944 | Type: "AAAA", 945 | Data: "2001:501:b1f9::30", 946 | }, 947 | }, 948 | }, 949 | { 950 | Status: "NOERROR", 951 | ServerIP: "192.35.51.30:53", 952 | ServerName: "f.gtld-servers.net", 953 | Question: Question{ 954 | Name: "example.com.", 955 | Type: "A", 956 | Class: "IN", 957 | }, 958 | Answers: []Record{}, 959 | Authorities: []Record{ 960 | { 961 | Name: "example.com.", 962 | TTL: 172800, 963 | Class: "IN", 964 | Type: "NS", 965 | Data: "a.iana-servers.net.", 966 | }, 967 | { 968 | Name: "example.com.", 969 | TTL: 172800, 970 | Class: "IN", 971 | Type: "NS", 972 | Data: "b.iana-servers.net.", 973 | }, 974 | { 975 | Name: "example.com.", 976 | TTL: 86400, 977 | Class: "IN", 978 | Type: "DS", 979 | Data: "370 13 2 BE74359954660069D5C63D200C39F5603827D7DD02B56F120EE9F3A8 6764247C", 980 | }, 981 | { 982 | Name: "example.com.", 983 | TTL: 86400, 984 | Class: "IN", 985 | Type: "RRSIG", 986 | Data: "DS 8 2 86400 20230906062331 20230830051331 4459 com. GMHHwISDn8Yh8+8Y/aTXu9XkZCobOWJ94nPPPYTvRvpUDJfMHV8k2aSO 9lW6xBjeaWtl9MVBRUKIh6CgLH+hZ/V0UHAROh6mt6jKa/3W35OqcULN 8aRsGujntVlByyD3/1Kxki0S8x+wbbymShuqmXC0KQy7Wl0mkimOCwZD +IDk1UhC5zjZnQjFKmJ4SVLb7ayOsbsoQoufx3BNk2kFig==", 987 | }, 988 | }, 989 | Additionals: []Record{}, 990 | }, 991 | { 992 | Status: "NOERROR", 993 | ServerIP: "199.43.133.53:53", 994 | ServerName: "b.iana-servers.net", 995 | Question: Question{ 996 | Name: "example.com.", 997 | Type: "A", 998 | Class: "IN", 999 | }, 1000 | Answers: []Record{ 1001 | { 1002 | Name: "example.com.", 1003 | TTL: 86400, 1004 | Class: "IN", 1005 | Type: "A", 1006 | Data: "93.184.216.34", 1007 | }, 1008 | { 1009 | Name: "example.com.", 1010 | TTL: 86400, 1011 | Class: "IN", 1012 | Type: "RRSIG", 1013 | Data: "A 13 2 86400 20230909025252 20230819070125 2061 example.com. 8adF5DxheCltQ61A6m5kHUfzgsuhY3zPscP9YDB16sDn2bk6Rw7Fz+gI MiixWE2SkLFl7LWN5cLN7B/aGBGUlw==", 1014 | }, 1015 | }, 1016 | Authorities: []Record{ 1017 | { 1018 | Name: "example.com.", 1019 | TTL: 86400, 1020 | Class: "IN", 1021 | Type: "NS", 1022 | Data: "a.iana-servers.net.", 1023 | }, 1024 | { 1025 | Name: "example.com.", 1026 | TTL: 86400, 1027 | Class: "IN", 1028 | Type: "NS", 1029 | Data: "b.iana-servers.net.", 1030 | }, 1031 | { 1032 | Name: "example.com.", 1033 | TTL: 86400, 1034 | Class: "IN", 1035 | Type: "RRSIG", 1036 | Data: "NS 13 2 86400 20230909053651 20230819070125 2061 example.com. BbDbIs5CLfsfydzBZOcDqZfwRo/YyDZKeKTs3C6RzGgcC5RpBaXYk7Oh XTZ3OjM3y7YDJVNtuPGcB8Ti7WlMZg==", 1037 | }, 1038 | }, 1039 | Additionals: []Record{}, 1040 | }, 1041 | }).Equal(t, got) 1042 | } 1043 | --------------------------------------------------------------------------------