【问题标题】:How to get DNS aliases of specified host name?如何获取指定主机名的 DNS 别名?
【发布时间】:2011-07-06 18:16:45
【问题描述】:

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

IPHostEntry hostEntry = Dns.GetHostEntry("hostname")

不幸的是,正如 MSDN 中提到的那样:

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

我打算这样获取 DNS 别名:

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

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

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

【问题讨论】:

    标签: c# .net dns wmi


    【解决方案1】:

    没有准确回答您的问题,但正如您所指出的,别名不是由 GetHostEntry 填充的 - 方法 Dns.GetHostByName 和 Dns.Resolve sort-of 填充别名

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

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

    您应该注意,根据 Microsoft,这些方法都已过时,就像 Dns 类中的大多数方法一样。

    另见 stackoverflow 帖子

    【讨论】:

      【解决方案2】:

      关于 DNS 查找项目值得注意的是,它有一个名为 DnsProvider 的辅助类,它提供了从系统获取 DNS 服务器的“正确”方式,而无需使用注册表。

      http://dnslookup.codeplex.com/wikipage?title=Usage&referringTitle=Documentation 了解更多信息。

      【讨论】:

        【解决方案3】:

        codeplex 上有一些开源 .net dns 库,您可能想看看。 DnDnsDNS Lookup 都显示为活动状态,并且都支持 CNAME 查找。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2012-09-28
            • 2016-11-21
            • 2013-08-17
            • 2015-07-08
            • 1970-01-01
            • 2011-06-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多