设置拨号器的拨号功能

时间:2018-11-28 00:33:37

标签: go dns

我正在尝试使用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

0 个答案:

没有答案