问题
Is there a way to specify which DNS server to use for a name lookup?
Looking at https://golang.org/pkg/net/#LookupHost seems it will use only the local resolver
LookupHost looks up the given host using the local resolver. It returns a slice
of that host's addresses.
Also earlier on that link
It can use a pure Go resolver that sends DNS requests directly to
the servers listed in /etc/resolv.conf,
How could one do a lookup against arbitrary servers like one can do with dig?
dig @8.8.8.8 google.com
回答1:
Answer from /u/g-a-c on reddit
If I'm reading that doc right (maybe not)...
Create yourself a local Resolver, with a custom Dialer, using the DNS address you want to use (https://golang.org/pkg/net/#Resolver) then use the LookupAddr function of that Resolver?
edit:
package main
import (
"context"
"net"
"time"
)
func main() {
r := &net.Resolver{
PreferGo: true,
Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
d := net.Dialer{
Timeout: time.Millisecond * time.Duration(10000),
}
return d.DialContext(ctx, "udp", "8.8.8.8:53")
},
}
ip, _ := r.LookupHost(context.Background(), "www.google.com")
print(ip[0])
}
This seems to work - on my firewall this shows that my machine is opening connections to Google rather than a local domain controller
来源:https://stackoverflow.com/questions/59889882/specifying-dns-server-for-lookup-in-go