C# Dns.GetHostEntry是否可以返回地址列表为空的iPhoneEntry?
我只是想知道是否存在这样一种情况:主机名可以成功解析,但返回的hostEntry.AddressList是空的 目前我正在做这样的事情: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
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会引发异常,但我不确定这一点。这里有三种可能的情况:
- 条件永远不会达到
- 这是一种极不可能发生的情况,我认为这根本不可能发生
- 异常被抛出,您永远无法到达那里
因此,不,我认为这永远不会发生。不,你不会看到一个空的地址列表:即使你查询一个确实存在但没有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”。目前我不知道为什么会发生这种情况……我也在努力解决地址列表间歇性为空的问题,所以情况并非总是如此。