我想要获取有关指定主机名的DNS别名的信息。 我用过:
IPHostEntry hostEntry = Dns.GetHostEntry("hostname")
不幸的是,如MSDN中所述:
返回的IPHostEntry实例的Aliases属性未由此方法填充,并且始终为空。
我计划以这样的方式获取DNS别名:
获取注册表SYSTEM\CurrentControlSet\Services\Tcpip\Parameter
中DNS服务器的ipAddresses。
使用DNS WMI提供程序在DNS服务器中获取CNAME记录。但在这种情况下,需要访问DNS服务器的权限。
我的计划是否正确? 是否有其他方法可以在未经DNS服务器许可的情况下获取CNAME记录?
答案 0 :(得分:0)
在codeplex上有一些你可能想要查看的开源.net dns库。 DnDns和DNS 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