Я пытаюсь получить DNS-запросы для туннелирования через прокси моей компании, используя метод HTTP CONNECT.
Библиотека , которую я использую для DNS-запросов, поддерживает настройку пользовательского net.Dialer
для экземпляра dns.Client
.Я обнаружил другую библиотеку , которая утверждает, что выступает в качестве замены для замены net.Dialer
, которая поддерживает инициирование TCP-соединений через прокси-сервер с использованием метода HTTP CONNECT.
Однако я не могу понять, как заставить это работать с этими двумя библиотеками.
Я попытался установить поле Dialer
для dns.Client
, но жалуется на несовместимостьтипы:
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
в 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
}
Но это дало:
cannot assign to client.Dialer.Dial
Итак, как мне установить Dialer
моего DNS-клиента?