如何获取指定主机名的DNS别名?

时间:2011-03-01 19:13:19

标签: c# .net dns wmi

我想要获取有关指定主机名的DNS别名的信息。 我用过:

IPHostEntry hostEntry = Dns.GetHostEntry("hostname")

不幸的是,如MSDN中所述:

  

返回的IPHostEntry实例的Aliases属性未由此方法填充,并且始终为空。

我计划以这样的方式获取DNS别名:

  1. 获取注册表SYSTEM\CurrentControlSet\Services\Tcpip\Parameter中DNS服务器的ipAddresses。

  2. 使用DNS WMI提供程序在DNS服务器中获取CNAME记录。但在这种情况下,需要访问DNS服务器的权限。

  3. 我的计划是否正确? 是否有其他方法可以在未经DNS服务器许可的情况下获取CNAME记录?

4 个答案:

答案 0 :(得分:0)

在codeplex上有一些你可能想要查看的开源.net dns库。 DnDnsDNS Lookup都显示为有效,并且都支持CNAME查找。

答案 1 :(得分:0)

值得注意的是DNS Lookup项目是否有一个名为DnsProvider的辅助类,它提供了从系统获取DNS服务器而不使用注册表的“正确”方法。

请参阅 http://dnslookup.codeplex.com/wikipage?title=Usage&referringTitle=Documentation 有关这方面的更多信息。

答案 2 :(得分:0)

没有完全回答你的问题,但是你注意到别名没有填充 GetHostEntry - 方法Dns.GetHostByName和Dns.Resolve做 sort-of 填充的别名

它提供了你可能称之为愚蠢的不完整的别名列表 - 据我所知,它只会在查找名称时添加别名,并且该名称是别名。

所以基本上如果返回的主机名与你输入的主机名不同,那么你输入的内容就是别名。返回的Alias值 具有完全限定名称。所以这似乎只是获取别名的完全限定名称的一种方法。

您应该注意到,根据Microsoft,这些方法都已过时,Dns类中的大多数方法也是如此。

另请参阅stackoverflow帖子

答案 3 :(得分:0)

您可以使用Dns.Resolve获取别名。 使用#pragma warning disable 0618禁用已弃用功能的警告。 如果Ipv6Element.Enabled属性设置为false(这是默认值),这将起作用。

https://msdn.microsoft.com/en-us/library/system.net.dns.resolve(v=vs.110).aspx