C# Dns.GetHostEntry是否可以返回地址列表为空的iPhoneEntry?

C# Dns.GetHostEntry是否可以返回地址列表为空的iPhoneEntry?,c#,dns,C#,Dns,我只是想知道是否存在这样一种情况:主机名可以成功解析,但返回的hostEntry.AddressList是空的 目前我正在做这样的事情: IPHostEntry hostEntry = Dns.GetHostEntry("some.hostname.tld"); if (hostEntry.AddressList.Count() < 1) { // can that ever happen? throw new ArgumentException("hostName has no

我只是想知道是否存在这样一种情况:主机名可以成功解析,但返回的hostEntry.AddressList是空的

目前我正在做这样的事情:

IPHostEntry hostEntry = Dns.GetHostEntry("some.hostname.tld");
if (hostEntry.AddressList.Count() < 1)
{
  // can that ever happen?
  throw new ArgumentException("hostName has no assigned IP-Address");
}
TcpClient client = new TcpClient(hostEntry.AddressList[0], 1234);
IPHostEntry-hostEntry=Dns.GetHostEntry(“some.hostname.tld”);
if(hostEntry.AddressList.Count()<1)
{
//那会发生吗?
抛出新的ArgumentException(“主机名没有指定的IP地址”);
}
TcpClient client=新的TcpClient(hostEntry.AddressList[0],1234);

我的假设是,如果找不到主机名或地址列表为非空,则Dns.GetHostEntry会引发异常,但我不确定这一点。

这里有三种可能的情况:

  • 主机名存在(DNS有A记录)并解析为IP地址

    • 条件永远不会达到
  • 主机名存在(DNS知道域),但不存在A记录

    • 这是一种极不可能发生的情况,我认为这根本不可能发生
  • 主机名不存在

    • 异常被抛出,您永远无法到达那里

  • 因此,不,我认为这永远不会发生。

    不,你不会看到一个空的地址列表:即使你查询一个确实存在但没有a或AAAA(IPv6)记录的DNS标签,也会抛出一个SocketException(“没有这样的主机”)

    您可以通过查看.NET参考源版本中DNS.cs中的函数
    InternalGetHostByName(字符串主机名,bool includeIPv6)
    来验证这一点。除了一些特定于平台的预防措施外,DNS查找是Winsock函数的简单包装

    Gethostbyname将失败,或返回地址列表。永远不会返回空的地址列表,因为在这种情况下,函数将使用WSANO_数据(“有效名称,没有请求类型的数据记录”)失败,这将转换为我们在.NET中已经看到的套接字异常

    编辑2012年5月,回复提示仍然返回空列表:请注意,此答案仅适用于Win32,WinCE等平台的行为可能会截然不同。如果您在Win32上看到“空列表”行为,并且您提出的请求是针对公开可用的DNS服务器的,请发布您的代码

    只是为了记录

    多亏了mdb,我看了一下:

    请求的名称有效,并且已在数据库中找到,但它确实有效 没有为解析的正确关联数据。通常的例子 对于这是主机名到地址转换尝试(使用gethostbyname或 WSAAsyncGetHostByName),它使用DNS(域名服务器)。MX记录 返回,但没有指示主机本身存在的记录,但未返回 直接可达


    这基本上回答了我的问题:)

    答案是是的。 GetHostEntry方法向DNS服务器查询与IP地址关联的IP地址和别名

    如果本地计算机未安装IPv6,则会从GetHostEntry方法的结果中筛选IPv6地址。因此,如果地址参数可用,则只有IPv6结果才有可能返回空的iPhoneEntry实例。


    返回的IPHostEntry实例的Alias属性不使用此方法填充,并且将始终为空。

    DNS标签(“主机名”)存在,但不存在A记录的情况实际上非常常见:考虑MX记录。严格来说,情况并非如此。现在,我正在努力解决一个问题,返回的IPHostEntry包含一个空地址列表和一个主机名为“26l2233b1-04”。目前我不知道为什么会发生这种情况……我也在努力解决地址列表间歇性为空的问题,所以情况并非总是如此。