【问题标题】:Cannot send UDP DNS request to IPv6 DNS?无法向 IPv6 DNS 发送 UDP DNS 请求?
【发布时间】:2019-04-27 17:34:55
【问题描述】:

对于一个项目,我正在编写一个类似 dig 的简单工具,用于发送 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

【问题讨论】:

    标签: c# .net sockets dns udp


    【解决方案1】:

    尝试对无法访问的网络进行套接字操作

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 1970-01-01
      相关资源
      最近更新 更多