当“nslookup”工作正常时,为什么“ping”无法解析名称?

ski*_*ppy 167 networking windows dns

在我的 Windows XP 工作站上,我可以在 DNS 中找到我想要连接的机器nslookup

nslookup wolfman
Server: dns.company.com
Address: 192.168.1.38

Name: wolfman.company.com
Address: 192.168.1.178
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试连接到那台机器时,我收到一条错误消息,告诉我找不到该机器(即,无法在 DNS 中查找):

C:\> ping wolfman
Ping request could not find host wolfman. Please check the name and try again.
Run Code Online (Sandbox Code Playgroud)

如果我直接使用 IP 地址,我可以连接:

C:\> ping 192.168.1.178

Pinging 192.168.1.178 with 32 bytes of data:

Reply from 192.168.1.178: bytes=32 time=41ms TTL=126
Reply from 192.168.1.178: bytes=32 time=41ms TTL=126
Reply from 192.168.1.178: bytes=32 time=44ms TTL=126
Reply from 192.168.1.178: bytes=32 time=38ms TTL=126
Run Code Online (Sandbox Code Playgroud)

我可以通过在我的hosts文件中添加一个条目来解决这个问题,但我宁愿找出发生这种情况的原因。问题是暂时的,一天中的大部分时间我都可以很好地连接到机器。

这怎么可能?

ETA:为简洁起见,我省略了这一点,但有人要求:

C:\> ping wolfman.company.com
Ping request could not find host wolfman.company.com. Please check the name and try again.
Run Code Online (Sandbox Code Playgroud)

ETA:其他应用程序得到相同的结果。我只是尝试 ping 来简化。telnet 无法连接,Cygwin 应用程序打印“未知主机 wolfman”消息。

更新:使用wireshark,我发现我的工作站没有尝试DNS 查找。它只是报告“找不到主机”错误消息。

har*_*ymc 117

我相信 nslookup 在 DNS 端口上打开 winsock 连接并发出查询,而 ping 使用 DNS 客户端服务。您可以尝试停止此服务,看看这是否有所作为。

一些将重新初始化各种网络状态的命令:

将 WINSOCK 条目重置为安装默认值:将netsh winsock reset catalog
TCP/IP 堆栈重置为安装默认值:netsh int ip reset reset.log
刷新 DNS 解析器缓存:ipconfig /flushdns
更新 DNS 客户端注册并刷新 DHCP 租用:ipconfig /registerdns
刷新路由表:(route /f这将删除所有网关,直到您重新启动!)

  • 我禁用了 DNS 客户端服务,问题似乎消失了!目前还不确定是不是侥幸。当我重新启动服务时,问题没有出现。 (11认同)
  • 有时只是停止并重新启动服务即可解决 DNS 问题(不要问我为什么)。问题是这会持续多久。一些倒霉的人需要一次又一次地重复。 (6认同)
  • 谨慎使用“route /f”!它简直毁了我的生活!!! (2认同)

小智 33

尝试使用主机名后跟一个点来 ping。所以而不是ping wolfman使用ping wolfman.

这应该可以让您解决问题,而无需对主机文件等进行解决。

  • 任何建议为什么这是有效的以及如何使用本地名称而不使用尾随点? (5认同)
  • 好的,这有效......为什么? (2认同)
  • @Ruberoid 请参阅 [我的回答](https://superuser.com/a/1257512/157461) 了解如何自动执行此操作。 (2认同)

Fre*_*und 20

尝试添加.到该连接的 DNS 后缀。即,转到:

  1. 以太网状态
  2. 单击属性
  3. 互联网协议第 4 版
  4. 单击属性
  5. 单击高级
  6. 附加这些 DNS 就足够了(按顺序)
  7. 添加.为后缀。

以下屏幕截图说明了相同的步骤:

这应该可以ping wolfman工作。

解释

nslookup wolfman(name server lookup: wolfman) 将主机名 ( ) 发送wolfman到 DNS(域名系统)以获取对应的 IP 地址。这是nslookup命令的唯一目的。这已经有效了,所以我们已经验证了 DNS 有效并且wolfman确实对应于一个 IP 地址。

相比之下,ping wolfman需要做两件事:

  1. 获取主机名 ( wolfman) 对应的 IP 。
  2. 将数据包发送到 IP 并侦听响应

在 Windows(甚至是 Windows 10 等最新版本)上,第一步很容易失败。为了向后兼容,Windows 支持各种主机名解析方法(主机文件、DNS、NetBIOS/WINS、LMHOST 文件)。

不幸的是,Windows 的ping命令似乎并不总是尝试 DNS 查找。我不知道触发这种行为的具体条件。

幸运的是,我们可以强制 Windows 使用FQDN(完全限定域名)进行 DNS 查找。在实践中,我们通过.在主机名后缀一个点来做到这一点:wolfman.。尝试ping wolfman.并验证它是否有效。

最后一步是强制 Windows 附加这个点本身。我已经在这个答案的开头展示了如何做到这一点。


小智 19

尝试ipconfig /displaydns寻找狼人。如果它被缓存为“名称不存在”(可能是因为之前的间歇性查找失败),您可以使用ipconfig /flushdns.

nslookup 不使用缓存,而是直接查询 DNS 服务器。


Bry*_*yan 13

nslookup 在 Windows 上解析名称/IP 地址时,其工作方式与其他命令不同。

Windows上正常解析方法如下:

  1. 客户端检查查询的名称是否是它自己的名称。
  2. 然后,客户端搜索本地主机文件、本地计算机上存储的 IP 地址和名称列表。
  3. 查询域名系统 (DNS) 服务器。
  4. 如果名称仍未解析,则使用 NetBIOS 名称解析序列作为备份。可以通过配置客户端的 NetBIOS 节点类型来更改此顺序。

nslookup另一方面用于测试域名服务器。

  • 是否有任何设置可以将 NetBIOS 查询在该列表中向上移动?我有一种直觉,即 NetBIOS 查找以某种方式参与其中,但是由于 DNS 查询肯定在工作,如果上面的序列是不可变的,我看不出它是如何到达那一步的。 (4认同)

Mic*_*and 9

我一直在努力解决类似的问题,并尝试了@harrymc 建议的解决方案。我发现最终似乎(至少在某种程度上)在 microsoft technet 论坛上起作用nslookup 起作用,但在独立的 Win7 PC 上没有其他任何东西有 DNS

这是报价:

...尝试使用下面的命令来刷新和重置客户端解析器缓存以进行测试。

ipconfig /flushdns

ipconfig /注册DNS

请参阅以下链接了解更多详情。 http://jefferyland.wordpress.com/2011/07/28/quick-review-of-flushdns-registerdns-and-dns-queries/

所以基本上我缺少的是 ipconfig /registerdns

  • @harrymc 的原始答案现在反映了缺少的“/registerdns”命令 (2认同)

小智 8

就在今天,我们遇到了同样的问题,但解决方案不同。所以我想,我会添加它以供参考,因为这是最热门的搜索结果。

  • 问题ping不会解析主机名,但nslookup可以。(在 2 个不同的 Windows Server 2012 R2 主机上观察到。)
  • 原因:(对于每台主机)主机连接了多个网卡并且配置了多个默认网关
  • 解决方案:(对于每台主机)从所有网卡的配置中删除默认网关,只有一个,因此仅保留一个默认网关


小智 6

我在 Windows 2012R2 (=8.1) 系统上遇到了同样的问题,并尝试了上述所有建议,但没有一个能解决它:
- Ping 完全限定名称有效。
- ping 不合格的名称没有。
- 两者都在其他几个系统上工作,这些系统具有相同的操作系统和显然相同的配置。
- 所有必要的后缀搜索字符串都在那里。
(请注意,一些建议的修复程序,例如多标签查询的解决方法,显然无关紧要,因为不合格的名称只有一部分。)

然后我注意到我试图 ping 的目标系统没有 IPv6 地址。所以我尝试了“ping -4 unqualified_name ”和宾果游戏!这有效。
因此,出于某种原因,仅在此系统上,ping 仅尝试解析非限定名称->IPv6 地址,而不尝试解析非限定名称->IPv4。
对我来说,解决方法是完全禁用 IPv6,因为我根本不需要它。但是我真的很想找到一种更温和的方法来告诉 ping(或者大概是 DNS 客户端服务)尝试解析 IPv4 和 IPv6 地址。


Mik*_*hik 5

也许 wolfman.company.com 列在 C:\Windows\system32\drivers\etc\hosts 中?

nslookup 绕过该文件并始终询问 DNS,而 ping 和其他工具首先在“主机”文件中查找,然后在 DNS 中查找。