【问题标题】:Dns.GetHostEntry error conditions and resolution methodsDns.GetHostEntry 错误情况及解决方法
【发布时间】:2011-06-21 05:42:06
【问题描述】:

我有一个关于 Dns.GetHostEntry 的非常具体的问题:

服务使用 Dns.GetHostEntry 检索主机的所有 IP 地址,使用主机的名称。这一直很好。 在特定客户处,Dns.GetHostEntry 在查询特定主机时会抛出“no such host is known”错误。仅当尝试解析与安装服务的计算机位于不同域中的主机时才会出现此问题。该服务已经工作了很长一段时间,但最近停止工作,抛出“no such host is known”错误(遗憾的是,没有可用的堆栈跟踪)。 Nslookup 虽然有效,但没有问题。 有问题的服务是用 VB.NET 编写的,目标是 .NET Framwork 2.0。

.NET 3.0 (http://msdn.microsoft.com/en-us/library/ms143998(v=VS.85).aspx) 的 MSDN 条目中的 cmets 表明主机的反向 DNS 条目可能存在问题,但我无法在测试网络上重现该问题,即使所有已删除反向查找区域(其他 .NET 版本有更多 cmets,都有类似问题)。[编辑:] 即使故意添加错误的 PTR 记录也不会在我的测试机器上出现问题。

[EDIT2:] 导致错误的唯一原因是断开网络适配器,从而使 DNS 服务器不可用,即使由于缓存,前向解析仍然有效。

所以,我的问题是:

  1. GetHostEntry 在什么情况下会抛出此特定错误?
  2. 它使用哪些解析方法?如果我没记错的话,它使用非托管 WinSock 函数 getnameinfo (http://msdn.microsoft.com/en-us/library/ms738532(v=vs.85).aspx),“名称解析可以通过域名系统 (DNS)、本地主机文件、或其他命名机制”。
  3. 任何想法为什么这对于另一个域上的机器突然失败(但对于同一域上的机器没有)?

感谢和最好的问候, 寸83

【问题讨论】:

  • 修改 PTR 记录后是否在本地机器上“ipconfig /flushdns”并重新启动 DNS 服务器?您可能仍在使用缓存的结果
  • 是的,我刷新了缓存,我什至重新启动了 DNS 服务器服务和客户端服务,以确保没有缓存任何内容。

标签: .net vb.net active-directory dns resolve


【解决方案1】:

我个人总是使用Dns.GetHostAddresses。它总是给我一个可靠的结果。

关于Dns.GetHostEntry为什么会给你指定的错误,我认为这是因为DnsGetHostEntry会在返回IP地址之前尝试进行反向DNS查找。如果反向 DNS 查找失败,它会告诉你“没有这样的主机是已知的”。

据我所知,Dns.GetHostAddresses 只是返回 IP 地址。

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多