IPHostEntry - 需要强制使其返回来自另一个域的完全限定域名主机名

3
我创建了一个函数,在同一域内运行得非常完美。 它可以接收一个名字,比如“Win7-Alpha”,并在使用“Alpha.ca”域时返回“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”域上尝试同样的操作,它只返回“Win7-Alpha”。如果传递IPv4地址,则能够解析该地址,但再次只返回“Win7-Alpha”……我不只想要“Win7-Alpha”,我想要完全限定域名!在Beta.ca DNS上,我可以看到我想要的完全限定域名,那么为什么它不给我呢?

DNS on Beta.ca

1个回答

1
看起来微软的编码实践非常值得质疑。据我所知,Windows无法从另一个域中获取FQDN名称,但您可以设置DNS后缀列表,以强制查询带有域后缀的名称。这似乎迫使Windows搜索与FQDN匹配的条目(即使只使用主机名也可以做到这一点)。不同之处在于当它返回IP地址和使用的名称时,它使用的名称是您指定的列表中创建的FQDN。
我已经验证过了,一旦我拥有了该列表的机器,我就能够使用我的功能将来自另一个域的主机名解析为正确的FQDN。
在机器本身上
  1. 点击开始
  2. 搜索“网络和共享中心”
  3. 单击“更改适配器设置”
  4. 对于每个适配器,右键单击并选择属性
  5. 单击Internet 协议版本 6 (TCP/IPv6)或Internet 协议版本 4 (TCP/IPv4)
  6. 单击“属性”按钮
  7. 单击“高级...”按钮
  8. 单击DNS选项卡
  9. 选择选项“追加这些 DNS 后缀(按顺序)”
  10. 单击“添加...”并添加您所在的域
  11. 重复单击“添加...”并添加可能需要完全限定域名(FQDN)的每个域。
  12. 再次确保列表顶部是此计算机所在的域
  13. 在高级 TCP/IP 设置窗口上单击“确定”
  14. 在Internet 协议属性窗口上单击“确定”
  15. 在适配器属性窗口上单击“关闭”或“确定”
  16. 尝试通过不同域上的名称ping计算机,您应该看到返回的FQDN。
  17. 您还可以通过“ping -4 COMPUTERNAME”进行IPv4 ping
  18. 如果似乎无法正常工作:
    • 以管理员身份打开cmd.exe
    • ipconfig /flushdns
    • ipconfig /registerdns

或者使用组策略

  1. 使用足够的域/森林管理员凭据运行组策略管理器
  2. 选择要更改的策略。在本示例中,选择默认域策略
  3. 右键单击并选择“编辑”
  4. 导航到[计算机配置>策略>管理模板>网络>DNS客户端]
  5. 打开“DNS后缀搜索列表”
  6. 选择“启用”
  7. 在DNS后缀文本框中,输入逗号分隔的DNS后缀。例如,我们在Beta.ca域上,因此输入Beta.ca,Alpha.ca
  8. 单击“确定”或“应用”,然后关闭窗口
  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;

DNS Suffix present to create FQDN


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接