无法向 IPv6 DNS 发送 UDP DNS 请求?

Cannot send UDP DNS request to IPv6 DNS?

对于一个项目,我正在编写一个简单的类似挖掘的工具来发送 DNS 请求和处理响应。我正在使用 C# UdpClient 发送数据包。现在我可以很好地发送到任何 IPv4 服务器,但是当我尝试指定 IPv6 DNS(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

A socket operation was attempted to an unreachable network

您可能没有到您尝试访问的网络的 IPv6 连接。这可能是因为您的本地网络中没有 IPv6,您没有 IPv6 网关,您的路由器上没有 public IPv6 地址...。其他工具(如 dig)在同一台机器上调用时应显示相同的行为,即它与您的代码无关。