Указание DNS-сервера для поиска в Go - PullRequest
1 голос
/ 24 января 2020

Есть ли способ указать, какой DNS-сервер использовать для поиска имени?

Глядя на https://golang.org/pkg/net/#LookupHost кажется, он будет использовать только локальный преобразователь

LookupHost looks up the given host using the local resolver. It returns a slice 
of that host's addresses.

Также ранее по этой ссылке

 It can use a pure Go resolver that sends DNS requests directly to 
 the servers listed in /etc/resolv.conf,

Как можно выполнить поиск на произвольных серверах, как это можно сделать с помощью dig?

dig @8.8.8.8 google.com

1 Ответ

3 голосов
/ 24 января 2020

Ответ от / u / ga- c on reddit

Если я читаю, делайте c правильно (возможно, нет) .. .

Создайте себе локальный Resolver, используя пользовательский номеронабиратель, используя DNS-адрес, который вы хотите использовать (https://golang.org/pkg/net/#Resolver), затем используйте функцию LookupAddr этого 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])
}

Это похоже на работу - на моем брандмауэре это показывает, что моя машина открывает соединения с Google, а не локальный контроллер домена

...