Для проекта я пишу простой инструмент для отправки 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