Specifying DNS server for lookup in Go

被刻印的时光 ゝ 提交于 2020-06-23 04:51:06

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!