我正在尝试使用HTTP CONNECT方法来获取DNS请求以通过我公司的代理进行隧道传输。
我用来发出DNS请求的library支持在dns.Client
的实例上设置自定义net.Dialer
。我发现another library声称可以作为net.Dialer
的替代品,Dialer
支持使用HTTP CONNECT方法通过代理启动TCP连接。
但是,我不知道如何使它与这两个库一起使用。
我尝试设置dns.Client
的{{1}}字段,但是它抱怨类型不兼容:
client := &dns.Client{
Net: "tcp",
Timeout: time.Duration(forwarder.Timeout) * time.Second,
}
if forwarder.Proxy != nil {
client.Dialer = http_dialer.New(forwarder.Proxy, http_dialer.WithDialer(client.Dialer))
}
收益:
cannot use http_dialer.New(forwarder.Proxy, http_dialer.WithDialer(client.Dialer)) (type *http_dialer.HttpTunnel) as type *net.Dialer in assignment
因此,我尝试投射它:
client := &dns.Client{
Net: "tcp",
Timeout: time.Duration(forwarder.Timeout) * time.Second,
}
if forwarder.Proxy != nil {
client.Dialer = net.Dialer(*http_dialer.New(forwarder.Proxy, http_dialer.WithDialer(client.Dialer)))
}
但这会产生:
cannot convert *http_dialer.New(forwarder.Proxy, http_dialer.WithDialer(client.Dialer)) (type http_dialer.HttpTunnel) to type net.Dialer
最后,我尝试将Dial
返回的dns.Client.Dialer
中的Dial
的{{1}}函数设置为http_dialer.HttpTunnel
函数:
http_dialer#New
但这产生了:
client := &dns.Client{
Net: "tcp",
Timeout: time.Duration(forwarder.Timeout) * time.Second,
}
if forwarder.Proxy != nil {
client.Dialer.Dial = http_dialer.New(forwarder.Proxy, http_dialer.WithDialer(client.Dialer)).Dial
}
那我该如何设置DNS客户端的cannot assign to client.Dialer.Dial
?