Go 如何覆盖默认DNS
我一直在寻找一种方法,试图覆盖默认的DNS服务器的围棋程序有一段时间,但仍然没有成功 目前我认为可行的解决方案是:Go 如何覆盖默认DNS,go,dns,resolve,Go,Dns,Resolve,我一直在寻找一种方法,试图覆盖默认的DNS服务器的围棋程序有一段时间,但仍然没有成功 目前我认为可行的解决方案是: package main import ( "context" "fmt" "net" "time" ) func main() { DNS := "1.1.1.1" net.DefaultResolver = &net.Resolver{ PreferGo: true, Dial: fun
package main
import (
"context"
"fmt"
"net"
"time"
)
func main() {
DNS := "1.1.1.1"
net.DefaultResolver = &net.Resolver{
PreferGo: true,
Dial: func(ctx context.Context, network, address string) (net.Conn, error) {
d := net.Dialer{
Timeout: time.Millisecond * time.Duration(3000),
}
return d.DialContext(ctx, "udp", fmt.Sprintf("%s:53", DNS))
},
}
resp, err := net.LookupHost("tsdfsdf.com")
if err != nil {
fmt.Printf(err.Error())
}
fmt.Printf("%+v", resp)
}
但对此的反应是:
lookup tsdfsdf.com on 192.168.0.1:53: no such host[]
这是我在reslov.conf中设置的默认DNS服务器
我已尝试通过设置export GODEBUG=netdns=Go
长期的解决方案是能够覆盖HTTP客户机的默认解析器,而这些解析器又会被一些AWS SDK的东西使用
有没有人面对过这件事,或者知道我该如何应对
仅供参考,我知道“tsdfsdf.com”不是一个真正的域,我只是用它来抛出一个没有这样的主机错误,以查看它要求的DNS。该错误具有误导性,因为您忽略了address参数。错误消息是由拨号的呼叫者构造的(假定您正在连接到地址),您的硬编码地址不可能出现在其中。使用诸如tcpdump或Wireshark之类的工具,您将看到DNS查询转到CloudFlare。是的,使用Wireshark确实正确显示了这一点,我甚至没有想到。我在使用AWS Sdk时确实发现,我必须创建一个带有传输和拨号程序的自定义Http客户端,以便使用:)将发布我在下面使用的内容:)错误是误导性的,因为您忽略了address参数。错误消息是由拨号的呼叫者构造的(假定您正在连接到地址),您的硬编码地址不可能出现在其中。使用诸如tcpdump或Wireshark之类的工具,您将看到DNS查询转到CloudFlare。是的,使用Wireshark确实正确显示了这一点,我甚至没有想到。我在使用AWS Sdk时发现,我必须创建一个带有传输和拨号器的自定义Http客户端,以便它使用:)将发布我在下面使用的内容:)