Не удается отправить DNS-запрос UDP на IPv6 DNS? - PullRequest
0 голосов
/ 26 ноября 2018

Для проекта я пишу простой инструмент для отправки DNS-запросов и обработки ответов.Я использую C # UdpClient для отправки пакета.Прямо сейчас я могу отправить на любой сервер IPv4 просто отлично, но когда я пытаюсь указать DNS IPv6 (2001: 4860: 4860: 0: 0: 0: 0: 8888 или 2001: 4860: 4860: 0: 0: 0: 0: 8844) Я получаю ошибки.

Мой код:

try {
    var ip = "[dns ip]";
    var DNSServer = IPAddress.Parse(ip);
    var endpoint = new IPEndPoint(DNSServer, 53);

    byte[] packet = new byte[UDP_LENGTH];
    var index = createRequest(type, hostname, packet);

    client.Send(packet, index, endpoint);

    var result = client.Receive(ref endpoint);
    ParseResponse(result);

} 
catch(Exception e){
    Console.WriteLine(e.ToString());
    Environment.Exit(0);
}

Если ip == 8.8.8.8 или любой другой IPv4-адрес, все это работает так, как задумано.Если ip == 2001:4860:4860::8844 или любой другой IPv6, я получаю:

System.Net.Sockets.SocketException (10051): A socket operation was attempted to an unreachable network
    at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, String callerName)
    at System.Net.Sockets.Socket.SendTo(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint remoteEP)
    at System.Net.Sockets.UdpClient.Send(Byte[] dgram, Int32 bytes, IPEndPoint endPoint)
    at Program.queryDNS(IPAddress DNSServer, DnsType type, String hostname) in C:\...\Program.cs:line 66

1 Ответ

0 голосов
/ 26 ноября 2018

Была предпринята попытка операции с сокетом в недоступной сети

Вероятно, у вас нет подключения IPv6 к сети, к которой вы пытаетесь подключиться.Это может быть потому, что у вас нет IPv6 в локальной сети, у вас нет шлюза IPv6, что у вас нет публичного IPv6-адреса на маршрутизаторе ....Другие инструменты, такие как dig, должны показывать то же поведение при вызове на той же машине, то есть они не связаны с вашим кодом.

...