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

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

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

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

Name: wolfman.company.com
Address: 192.168.1.178

但是,当我尝试连接到该机器时,出现错误,提示我找不到该机器(即无法在 DNS 中查找):

C:\> ping wolfman
Ping request could not find host wolfman. Please check the name and try again.

如果我直接使用 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

我可以通过在文件中添加条目来解决这个问题hosts,但我更想找出为什么会发生这种情况。这个问题是暂时的,一天中的大部分时间我都可以正常连接到机器。

这怎么可能?

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

C:\> ping wolfman.company.com
Ping request could not find host wolfman.company.com. Please check the name and try again.

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

更新:使用 wireshark,我发现我的工作站并未尝试进行 DNS 查找。它只是报告“无法找到主机”错误消息。

答案1

我相信 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
注意:这将删除所有路线和网关直到您重新启动!)

答案2

尝试使用主机名加点进行 ping。因此,不要ping wolfman使用ping wolfman.

这应该可以帮助您解决问题,而无需使用 hosts 文件等进行解决方法。

答案3

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

  1. 以太网状态
  2. 单击“属性”
  3. Internet 协议版本 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 支持各种主机名解析方法(hosts 文件、DNS、NetBIOS/WINS、LMHOST 文件)。

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

幸运的是,我们可以通过使用完整限定域名 (FQDN)(完全限定域名)。实际上,我们通过.在主机名后添加一个点来实现此目的:wolfman.。尝试ping wolfman.并验证它是否有效。

最后一步是强制 Windows 自己附加这个点。我已经在本答案的开头展示了如何执行此操作。

答案4

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

Windows 上的正常解决方法如下:

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

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

相关内容