@@ -47,53 +47,31 @@ var unroutableCIDR6 = []string{
47
47
"ff00::/8" ,
48
48
}
49
49
50
- // specialUseDomains are reserved for various purposes and do not have a central authority
51
- // for consistent resolution in different networks.
52
- // see: https://en.wikipedia.org/wiki/Special-use_domain_name#Reserved_domain_names
53
- // This list doesn't contain `.onion` addresses as they are consistently resolved everywhere.
54
- var specialUseDomains = []string {
55
- "6tisch.arpa" ,
56
- "10.in-addr.arpa" ,
57
- "16.172.in-addr.arpa" ,
58
- "17.172.in-addr.arpa" ,
59
- "18.172.in-addr.arpa" ,
60
- "19.172.in-addr.arpa" ,
61
- "20.172.in-addr.arpa" ,
62
- "21.172.in-addr.arpa" ,
63
- "22.172.in-addr.arpa" ,
64
- "23.172.in-addr.arpa" ,
65
- "24.172.in-addr.arpa" ,
66
- "25.172.in-addr.arpa" ,
67
- "26.172.in-addr.arpa" ,
68
- "27.172.in-addr.arpa" ,
69
- "28.172.in-addr.arpa" ,
70
- "29.172.in-addr.arpa" ,
71
- "30.172.in-addr.arpa" ,
72
- "31.172.in-addr.arpa" ,
73
- "168.192.in-addr.arpa" ,
74
- "170.0.0.192.in-addr.arpa" ,
75
- "171.0.0.192.in-addr.arpa" ,
76
- "ipv4only.arpa" ,
77
- "254.169.in-addr.arpa" ,
78
- "8.e.f.ip6.arpa" ,
79
- "9.e.f.ip6.arpa" ,
80
- "a.e.f.ip6.arpa" ,
81
- "b.e.f.ip6.arpa" ,
82
- "home.arpa" ,
83
- "example" ,
84
- "example.com" ,
85
- "example.net" ,
86
- "example.org" ,
87
- "invalid" ,
88
- "intranet" ,
89
- "internal" ,
90
- "private" ,
91
- "corp" ,
92
- "home" ,
93
- "lan" ,
94
- "local" ,
95
- "localhost" ,
96
- "test" ,
50
+ // unResolvableDomains do not resolve to an IP address.
51
+ var unResolvableDomains = []string {
52
+ // Reverse DNS Lookup
53
+ ".in-addr.arpa" ,
54
+ ".ip6.arpa" ,
55
+
56
+ // RFC 6761: Users MAY assume that queries for "invalid" names will always return NXDOMAIN
57
+ // responses
58
+ ".invalid" ,
59
+ }
60
+
61
+ // privateUseDomains are reserved for private use and have no central authority for consistent
62
+ // address resolution
63
+ var privateUseDomains = []string {
64
+ // RFC 8375: Reserved for home networks
65
+ ".home.arpa" ,
66
+
67
+ // MDNS
68
+ ".local" ,
69
+
70
+ // RFC 6761: Users may assume that IPv4 and IPv6 address queries for localhost names will
71
+ // always resolve to the respective IP loopback address
72
+ ".localhost" ,
73
+ // RFC 6761: No central authority for .test names
74
+ ".test" ,
97
75
}
98
76
99
77
func init () {
@@ -132,8 +110,14 @@ func IsPublicAddr(a ma.Multiaddr) bool {
132
110
case ma .P_DNS , ma .P_DNS4 , ma .P_DNS6 , ma .P_DNSADDR :
133
111
dnsAddr := c .Value ()
134
112
isPublic = true
135
- for _ , sd := range specialUseDomains {
136
- if strings .HasSuffix (dnsAddr , sd ) {
113
+ for _ , ud := range unResolvableDomains {
114
+ if strings .HasSuffix (dnsAddr , ud ) {
115
+ isPublic = false
116
+ break
117
+ }
118
+ }
119
+ for _ , pd := range privateUseDomains {
120
+ if strings .HasSuffix (dnsAddr , pd ) {
137
121
isPublic = false
138
122
break
139
123
}
0 commit comments