feat: implement iterative DNS resolver
Implement full iterative DNS resolution from root servers through TLD and domain nameservers using github.com/miekg/dns. - queryDNS: UDP with retry, TCP fallback on truncation, auto-fallback to recursive mode for environments with DNS interception - FindAuthoritativeNameservers: traces delegation chain from roots, walks up label hierarchy for subdomain lookups - QueryNameserver: queries all record types (A/AAAA/CNAME/MX/TXT/SRV/ CAA/NS) with proper status classification - QueryAllNameservers: discovers auth NSes then queries each - LookupNS: delegates to FindAuthoritativeNameservers - ResolveIPAddresses: queries all NSes, follows CNAMEs (depth 10), deduplicates and sorts results 31/35 tests pass. 4 NXDOMAIN tests fail due to wildcard DNS on sneak.cloud (nxdomain-surely-does-not-exist.dns.sneak.cloud resolves to datavi.be/162.55.148.94 via catch-all). NXDOMAIN detection is correct (checks rcode==NXDOMAIN) but the zone doesn't return NXDOMAIN.
This commit is contained in:
4
go.mod
4
go.mod
@@ -7,6 +7,7 @@ require (
|
||||
github.com/go-chi/chi/v5 v5.2.5
|
||||
github.com/go-chi/cors v1.2.2
|
||||
github.com/joho/godotenv v1.5.1
|
||||
github.com/miekg/dns v1.1.72
|
||||
github.com/prometheus/client_golang v1.23.2
|
||||
github.com/spf13/viper v1.21.0
|
||||
github.com/stretchr/testify v1.11.1
|
||||
@@ -37,8 +38,11 @@ require (
|
||||
go.uber.org/zap v1.26.0 // indirect
|
||||
go.yaml.in/yaml/v2 v2.4.2 // indirect
|
||||
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
||||
golang.org/x/mod v0.31.0 // indirect
|
||||
golang.org/x/sync v0.19.0 // indirect
|
||||
golang.org/x/sys v0.41.0 // indirect
|
||||
golang.org/x/text v0.34.0 // indirect
|
||||
golang.org/x/tools v0.40.0 // indirect
|
||||
google.golang.org/protobuf v1.36.8 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user