IPHostEntry - 需要强制它从另一个域到 return FQDN 主机名

IPHostEntry - Need to force it to return FQDN HostName from another domain

我创建了一个在同一域内完美运行的函数。
当在 "Alpha.ca" 域上使用时,它可以采用类似 "Win7-Alpha" 和 return "Win7-Alpha.Alpha.ca" 的名称。

public static string TryGetServerFQDN(string ServerName)
{
    string ServerFQDN = ServerName;
    if (!string.IsNullOrEmpty(ServerName))
    {
        IPHostEntry serverIPEntry = null;
        try
        {
            serverIPEntry = Dns.GetHostEntry(ServerName);
        }
        catch
        {
        }

        if (serverIPEntry != null && !string.IsNullOrEmpty(serverIPEntry.HostName))
        {
            ServerFQDN = serverIPEntry.HostName;
        }
    }
    return ServerFQDN;
}

但是,如果我在 "Beta.ca" 域上尝试同样的事情,它只会 returns "Win7-Alpha"。如果它被传递,它能够解析 IPv4 地址,但同样,它只有 returns "Win7-Alpha".... 我不想要 "Win7-Alpha",我想要 FQDN!

在 Beta.ca DNS 上,我可以看到我想要的 FQDN,为什么它不给我?

Microsoft 似乎做了一些非常有问题的编码做法。据我所知,Windows 不会为您提供来自另一个域的 FQDN 名称,但您可以设置一个 DNS 后缀列表,该列表将强制查询带有域后缀的名称。这似乎强制 Windows 搜索与 FQDN 匹配的条目(即使仅使用主机名也可以做到这一点)。不同之处在于,当它 return IP 地址和它使用的名称时,它使用的名称是它根据您指定的列表创建的 FQDN。

我已经验证,一旦我拥有带有列表的机器,我就能够使用我的函数,它将主机名从另一个域解析为正确的 FQDN。

在机器上

  1. 点击开始
  2. 搜索 "Network and Sharing Center"
  3. 点击"Change adapter settings"
  4. 对于每个适配器,右键单击它并选择 select 属性
  5. 单击 Internet 协议版本 6 (TCP/IPv6) 或 Internet 协议版本 4 (TCP/IPv4)
  6. 单击 "Properties" 按钮
  7. 单击 "Advanced..." 按钮
  8. 单击 DNS 选项卡
  9. Select 选项 "Append these DNS suffixes (in order)"
  10. 单击 "Add..." 并首先添加您所在的域
  11. 重复单击 "Add..." 并添加您可能需要来自的 FQDN 的每个域。
  12. 再次确保列表顶部是本机所在的域
  13. 在高级 TCP/IP 设置上单击确定 Window
  14. 在 Internet 协议属性上单击确定 Window
  15. 单击“适配器属性”上的 "Close" 或 "OK" Window
  16. 尝试在不同域中按名称 ping 一台计算机,您应该会看到 FQDN returned。
  17. 您还可以通过 "ping -4 COMPUTERNAME"
  18. 进行 IPv4 ping
  19. 如果它似乎没有工作:
    • 以管理员身份打开 cmd.exe
    • ipconfig /flushdns
    • ipconfig /registerdns

或使用组策略

  1. 运行 组策略管理足够 Domain/Forest 管理员凭据
  2. Select 您要更改什么政策。在此示例中,默认域策略
  3. 右键单击并选择编辑
  4. 向下导航至 [计算机配置 > 策略 > 管理模板 > 网络 > DNS 客户端]
  5. 打开"DNS Suffix Search List"
  6. Select "Enable"
  7. 在 DNS 后缀文本框中,输入逗号分隔的 DNS 后缀。前任。我们在 Beta.ca 域中,因此我们键入 Beta.ca、Alpha.ca
  8. 单击“确定”或“应用”,然后关闭 Windows
  9. 如果您需要尽快将政策应用于机器,您可以在机器上打开 cmd.exe 并键入 gpupdate /force

我个人认为 DNS 可以匹配来自另一个域的 IP 地址或主机名是非常愚蠢的......它找到了记录,但它不会给你返回它出现的记录的 FQDN要知道当您查看记录时,它似乎就在那里! ...但除非您对 DNS 后缀列表进行硬编码,然后获得 FQDN,然后使代码正常工作,否则您无法拥有它。确实表现很差!

//Once you add Alpha.ca to the DNS Suffix List on the machine running this code....
//This will now correctly return Win7-Alpha.Alpha.ca
Dns.GetHostEntry("Win7-Alpha").HostName;