package resolver import ( _ "embed" "codeberg.org/miekg/dns" "strings" ) //go:embed named.root var rootHintsData []byte func loadRootServers() []string { var addrs []string seen := make(map[string]bool) zp := dns.NewZoneParser(strings.NewReader(string(rootHintsData)), "", "") for { rr, ok := zp.Next() if !ok { break } a, ok := rr.(*dns.A) if !ok { continue } ip := a.A.Addr.String() if !seen[ip] { seen[ip] = true addrs = append(addrs, ip) } } if err := zp.Err(); err != nil || len(addrs) == 0 { return hardcodedRoots() } return addrs } func hardcodedRoots() []string { return []string{ "198.41.0.4", "170.247.170.2", "192.33.4.12", "199.7.91.13", "192.203.230.10", "192.5.5.241", "192.112.36.4", "198.97.190.53", "192.36.148.17", "192.58.128.30", "193.0.14.129", "199.7.83.42", "202.12.27.33", } }