1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package resolver
import (
_ "embed"
"github.com/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.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",
}
}
|