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。
在机器上
- 点击开始
- 搜索 "Network and Sharing Center"
- 点击"Change adapter settings"
- 对于每个适配器,右键单击它并选择 select 属性
- 单击 Internet 协议版本 6 (TCP/IPv6) 或 Internet 协议版本 4 (TCP/IPv4)
- 单击 "Properties" 按钮
- 单击 "Advanced..." 按钮
- 单击 DNS 选项卡
- Select 选项 "Append these DNS suffixes (in order)"
- 单击 "Add..." 并首先添加您所在的域
- 重复单击 "Add..." 并添加您可能需要来自的 FQDN 的每个域。
- 再次确保列表顶部是本机所在的域
- 在高级 TCP/IP 设置上单击确定 Window
- 在 Internet 协议属性上单击确定 Window
- 单击“适配器属性”上的 "Close" 或 "OK" Window
- 尝试在不同域中按名称 ping 一台计算机,您应该会看到 FQDN returned。
- 您还可以通过 "ping -4 COMPUTERNAME"
进行 IPv4 ping
- 如果它似乎没有工作:
- 以管理员身份打开 cmd.exe
- ipconfig /flushdns
- ipconfig /registerdns
或使用组策略
- 运行 组策略管理足够 Domain/Forest
管理员凭据
- Select 您要更改什么政策。在此示例中,默认域策略
- 右键单击并选择编辑
- 向下导航至 [计算机配置 > 策略 > 管理模板 > 网络 > DNS 客户端]
- 打开"DNS Suffix Search List"
- Select "Enable"
- 在 DNS 后缀文本框中,输入逗号分隔的 DNS 后缀。前任。我们在 Beta.ca 域中,因此我们键入 Beta.ca、Alpha.ca
- 单击“确定”或“应用”,然后关闭 Windows
- 如果您需要尽快将政策应用于机器,您可以在机器上打开 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;
我创建了一个在同一域内完美运行的函数。
当在 "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。
在机器上
- 点击开始
- 搜索 "Network and Sharing Center"
- 点击"Change adapter settings"
- 对于每个适配器,右键单击它并选择 select 属性
- 单击 Internet 协议版本 6 (TCP/IPv6) 或 Internet 协议版本 4 (TCP/IPv4)
- 单击 "Properties" 按钮
- 单击 "Advanced..." 按钮
- 单击 DNS 选项卡
- Select 选项 "Append these DNS suffixes (in order)"
- 单击 "Add..." 并首先添加您所在的域
- 重复单击 "Add..." 并添加您可能需要来自的 FQDN 的每个域。
- 再次确保列表顶部是本机所在的域
- 在高级 TCP/IP 设置上单击确定 Window
- 在 Internet 协议属性上单击确定 Window
- 单击“适配器属性”上的 "Close" 或 "OK" Window
- 尝试在不同域中按名称 ping 一台计算机,您应该会看到 FQDN returned。
- 您还可以通过 "ping -4 COMPUTERNAME" 进行 IPv4 ping
- 如果它似乎没有工作:
- 以管理员身份打开 cmd.exe
- ipconfig /flushdns
- ipconfig /registerdns
或使用组策略
- 运行 组策略管理足够 Domain/Forest 管理员凭据
- Select 您要更改什么政策。在此示例中,默认域策略
- 右键单击并选择编辑
- 向下导航至 [计算机配置 > 策略 > 管理模板 > 网络 > DNS 客户端]
- 打开"DNS Suffix Search List"
- Select "Enable"
- 在 DNS 后缀文本框中,输入逗号分隔的 DNS 后缀。前任。我们在 Beta.ca 域中,因此我们键入 Beta.ca、Alpha.ca
- 单击“确定”或“应用”,然后关闭 Windows
- 如果您需要尽快将政策应用于机器,您可以在机器上打开 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;