在我的 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 后缀。例如,转到:
- 以太网状态
- 单击“属性”
- Internet 协议版本 4
- 单击“属性”
- 单击“高级”
- 附加这些 DNS 后缀(按顺序)
- 添加
.
为后缀。
以下屏幕截图显示了相同的步骤:
这应该可以发挥ping wolfman
作用。
解释
nslookup wolfman
(name server lookup: wolfman) 将主机名 ( wolfman
) 发送到 DNS(域名系统)以获取相应的 IP 地址。这是该nslookup
命令的唯一目的。这已经起作用了,所以我们已经验证了 DNS 可以正常工作,并且wolfman
确实与 IP 地址相对应。
相比之下,ping wolfman
需要做两件事:
wolfman
获取主机名( )对应的IP 。- 向 IP 发送数据包并监听响应
在 Windows 上(即使是 Windows 10 等较新版本),第一步很容易失败。为了向后兼容,Windows 支持各种主机名解析方法(hosts 文件、DNS、NetBIOS/WINS、LMHOST 文件)。
不幸的是,Windows 命令似乎ping
并不总是尝试 DNS 查找。我不知道触发此行为的具体条件。
幸运的是,我们可以通过使用完整限定域名 (FQDN)(完全限定域名)。实际上,我们通过.
在主机名后添加一个点来实现此目的:wolfman.
。尝试ping wolfman.
并验证它是否有效。
最后一步是强制 Windows 自己附加这个点。我已经在本答案的开头展示了如何执行此操作。
答案4
nslookup
在 Windows 上解析名称/IP 地址时,其工作方式与其他命令不同。
这Windows 上的正常解决方法如下:
- 客户端检查查询的名称是否是它自己的。
- 然后,客户端搜索本地 Hosts 文件、存储在本地计算机上的 IP 地址和名称列表。
- 查询域名系统 (DNS) 服务器。
- 如果名称仍未解析,则使用 NetBIOS 名称解析顺序作为备份。可以通过配置客户端的 NetBIOS 节点类型来更改此顺序。
nslookup
另一方面用于测试域名服务器。