Установить функцию набора номера дозвона - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь получить 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-клиента?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...