@@ -28,68 +28,68 @@ func reverseLookupDomains(addr netip.Addr) (domains []string) {
28
28
// Fallbacks to obtain an external public IP address using DNS.
29
29
30
30
// getAkaNS returns one random authoritative nameserver for akamai.net.
31
- func getAkaNS () (nameserver * string , err error ) {
31
+ func getAkaNS () (nameserver string , err error ) {
32
32
// try default resolver
33
33
resolver := net.Resolver {}
34
34
ctx := context .TODO ()
35
35
nameservers , err := resolver .LookupNS (ctx , akamaiDomain )
36
36
if err == nil {
37
- return & nameservers [rand .Intn (len (nameservers ))].Host , err
37
+ return nameservers [rand .Intn (len (nameservers ))].Host , err
38
38
}
39
39
40
40
m := new (dns.Msg )
41
41
m .SetQuestion (akamaiDomain , dns .TypeNS )
42
42
// try Quad9
43
43
in , err := dns .Exchange (m , quad9DNSResolver )
44
44
if err != nil {
45
- return nil , err
45
+ return "" , err
46
46
}
47
47
if len (in .Answer ) < 1 {
48
48
err = errors .New ("getAkaNS: No DNS RR answer" )
49
- return nil , err
49
+ return "" , err
50
50
}
51
51
if ns , ok := in .Answer [rand .Intn (len (in .Answer ))].(* dns.NS ); ok {
52
- return & ns .Ns , nil
52
+ return ns .Ns , nil
53
53
}
54
- return nil , errors .New ("getAkaNS: Invalid NS record" )
54
+ return "" , errors .New ("getAkaNS: Invalid NS record" )
55
55
}
56
56
57
57
// getExternalIP returns the external IP used for DNS resolution of the executing host using nameserver.
58
- func getExternalIPbyNS (nameserver * string ) (addr * netip.Addr , err error ) {
59
- if nameserver == nil {
58
+ func getExternalIP (nameserver string ) (addr netip.Addr , err error ) {
59
+ if nameserver == "" {
60
60
// Default external authoritative nameserver
61
- nameserver = & akamaiNameserver
61
+ nameserver = akamaiNameserver
62
62
}
63
63
m := new (dns.Msg )
64
64
// The akamai.net nameservers reply to queries for the name `whoami`
65
65
// with the IP address of the host sending the query.
66
66
m .SetQuestion ("whoami.akamai.net." , dns .TypeA )
67
- in , err := dns .Exchange (m , net .JoinHostPort (* nameserver , "53" ))
67
+ in , err := dns .Exchange (m , net .JoinHostPort (nameserver , "53" ))
68
68
if err != nil {
69
- return nil , err
69
+ return netip. Addr {} , err
70
70
}
71
71
if len (in .Answer ) < 1 {
72
72
err = errors .New ("getExternalIP: No DNS RR answer" )
73
- return nil , err
73
+ return netip. Addr {} , err
74
74
}
75
75
if a , ok := in .Answer [0 ].(* dns.A ); ok {
76
76
if addr , ok := netip .AddrFromSlice (a .A ); ok {
77
- return & addr , nil
77
+ return addr , nil
78
78
}
79
- return nil , & net.AddrError {Err : "invalid IP address" , Addr : a .A .String ()}
79
+ return netip. Addr {} , & net.AddrError {Err : "invalid IP address" , Addr : a .A .String ()}
80
80
}
81
- return nil , errors .New ("getExternalIP: Invalid A record" )
81
+ return netip. Addr {} , errors .New ("getExternalIP: Invalid A record" )
82
82
}
83
83
84
84
// queryExternalIP returns the external IP used for DNS resolution of the executing host.
85
- func queryExternalIP () (addr * netip.Addr , err error ) {
85
+ func queryExternalIP () (addr netip.Addr , err error ) {
86
86
// Try with default NS
87
- addr , err = getExternalIPbyNS ( nil )
87
+ addr , err = getExternalIP ( "" )
88
88
if err != nil {
89
89
// try with looking up alternative NS
90
90
ns , err := getAkaNS ()
91
91
if err == nil {
92
- addr , err = getExternalIPbyNS (ns )
92
+ addr , err = getExternalIP (ns )
93
93
}
94
94
}
95
95
return
0 commit comments