2012-10-29 19:11:22 +0000 2012-10-29 19:11:22 +0000
146
146

为什么在'nslookup'正常工作的情况下,'ping'无法解析一个名字?

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

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.

无法在DNS中查找到):

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

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

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

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

怎么会这样呢?

ETA:为了简洁起见,我把这句话留了出来,但被问到了:

&001

ETA:其他的应用也会得到同样的结果。telnet无法连接,Cygwin应用程序打印出 “未知主机wolfman "消息。

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

答案 (22)

107
107
107
2012-11-20 08:40:31 +0000

我认为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 (需要重新启动)

33
33
33
2014-05-05 01:08:15 +0000

试着用hostname后面的点来ping。所以用ping wolfman来代替ping wolfman.

应该可以让你解决,而不需要用hosts文件等做变通。

17
17
17
2012-11-19 21:57:53 +0000

试试ipconfig /displaydns,寻找wolfman。如果缓存中显示为 “name does not exist"(可能是因为之前的间歇性查找失败),可以用ipconfig /flushdns刷新缓存,

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

14
14
14
2017-10-09 11:51:27 +0000

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

  1. 以太网状态
  2. 点击属性
  3. Internet协议版本4
  4. 点击属性 5.点击高级
  5. 将这些DNS后缀(按顺序) 7.添加.作为后缀。

同样的步骤如下截图所示:

这应该可以让ping wolfman正常工作了。

解析

nslookup wolfman(名称服务器查询: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(完全合格的域名)强制Windows进行DNS查询。在实际操作中,我们可以通过在主机名后缀一个.点来实现:wolfman.。试试ping wolfman.,验证一下是否有效。

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

13
13
13
2012-11-19 21:29:17 +0000

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

在Windows上的正常解析方法如下:

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

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

8
8
8
2014-09-22 08:32:08 +0000

我也遇到过类似的问题,也尝试了@harrymc建议的解决方案。我在microsoft technet论坛上找到了最终似乎(至少在某种程度上)可行的方法 nslookup可以正常工作,但在独立的Win7 PC上没有其他的DNS )

以下是引用的内容:

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

ipconfig /flushdns

ipconfig /registerdns

详情请参考下面的链接。http://jefferyland.wordpress.com/2011/07/28/quick-review-of-flushdns-registerdns-and-dns-queries/

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

6
6
6
2015-04-28 08:41:42 +0000

就在今天,我们遇到了同样的问题,但解决方法却不一样_。所以我想,我把它加进来作为参考,因为这是最上面的搜索结果。

  • 问题ping不能解析主机名,但nslookup可以。(在2个不同的Windows Server 2012 R2主机上观察到。)
  • **原因* : (每台主机) 主机连接了一个以上的网卡,并且有多个默认网关配置。(对每台主机) 从配置的所有网卡中删除默认网关,但仅有一个网卡,所以只有一个默认网关**。
5
5
5
2012-11-19 20:04:28 +0000

也许wolfman.company.com被列在C:\Windows\system32\drivers\etchosts?

5
5
5
2015-04-09 16:18:24 +0000

我在一个Windows 2012R2 (=8.1)系统上也遇到了同样的问题,我尝试了上面所有的建议,但没有一个能解决这个问题: - Pinging完全合格的名称有效。
- 所有必要的后缀搜索字符串都在那里。 (请注意,一些建议的修复方法,比如多标签查询的解决方法,显然是无关紧要的,因为非限定名称只有一个部分。)

然后我注意到我试图ping的目标系统没有IPv6地址。所以我试着用 “ping-4 unqualified\namename_",结果成功了。 不知道为什么,在这个系统上,ping只试图解决unqualified name->IPv6地址,而不是unqualified name->IPv4。但是我很想找到一个更温和的方法来告诉ping(或者说DNS客户端服务)尝试解析IPv4和IPv6地址。

3
3
3
2015-01-01 16:01:56 +0000

我想弄清楚为什么在一台win7电脑上我可以使用ping server,而另一台却不能解析server

原来我在使用工作VPN的时候,为了不使用FQDNs,我把一些设置(DNS后缀)弄乱了。我不得不去把我的本地server.lan添加到这些后缀中,以便让两台电脑的行为相同。点击Internet协议版本4,然后点击属性按钮。然后在这个新窗口中点击高级…按钮。转到DNS选项卡,这是我为我的工作添加DNS后缀的地方,但也需要一个DNS后缀来连接我的正常家庭连接。

2
2
2
2018-06-12 22:14:49 +0000

我也遇到了这个问题。对我来说,最简单的解决方法是在主机名的末尾添加一个.。然而,这是相当烦人的。大多数网络并不要求这样做。

我在看了Frederik Aalund的建议作为一个可能的解决方案,并注意到他们建议从默认的 “附加主域名和特定连接的DNS后缀 "选项中切换。这让我觉得可能是我的网络配置有一点错误。

查看我的DD-WRT设置,"LAN域 "没有设置。将其设置为一个任意字符串似乎已经为我的网络上的所有客户端解决了这个问题,而不需要在每台机器上进行特殊配置,这正是我想要的解决方案 :)

1
1
1
2014-11-03 14:58:09 +0000

对我来说,似乎是windows客户端内的一些dns-caching-system出了问题。Windows 7和8.1都受此影响………..对Windows XP就不多说了,ping不能解析名称。但是自从我在***所有的客户端接口上停用了IPv6*之后,问题就不再发生了。

1
1
1
2012-11-23 05:38:19 +0000

在文件中添加一个条目c:/windows/system32/drivers/etc/hosts可能会解决这个问题。

1
1
1
2014-03-21 17:23:50 +0000

我在从windows XP迁移到windows 7时遇到了这个问题,这个问题与Windows 7的多标签DNS查询问题有关。

1
1
1
2014-08-08 07:53:22 +0000

如果在mac os x上,可能是DNS缓存的问题:

转移缓存

sudo killall -HUP mDNSResponder
sudo dscacheutil -flushcache
1
1
1
2018-07-05 20:41:42 +0000

WINS在很多年前就已经消失了,但你可能还在你的接口上启用了Netbios,因此PING可能会使用netbios,而netbios可能不会给你任何结果。

只要禁用Netbios,PING就会把DNS作为第一优先级,并把接口上注册的DNS Surffic附加到你的主机名上。

0
0
0
2019-10-22 12:41:38 +0000

试着清除以下键的内容:

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\DnsClient\DnsPolicyConfig

,然后重新启动 “DNS缓存 "服务。检查它们的配置是否正确,甚至在你的场景中是否需要。它们有时会随着服务器上的路由和远程访问角色的某些设置而自动创建,这就是我们的问题的原因。 http://virot.eu/manually-remove-direct-access-from-a-client/

0
0
0
2015-04-09 09:43:47 +0000

我也遇到了同样的问题,原来是另一台机器有同样的IP地址,就是这个原因。

0
0
0
2019-02-13 16:57:39 +0000

在我的案例中,解决这个问题的方法是将我要ping的主机的域名添加到名为“DNS后缀搜索列表”的组策略选项中。打开gpedit.msc,导航到Computer Configuration -> Administrative Templates -> Network -> DNS Client > DNS Suffix Search List,设置为 “已启用",然后将域名添加到列表中(默认列表是空的)。

0
0
0
2019-04-06 06:54:19 +0000

这里的解决方案没有一个对我有效。对我有效的是用OpenVPN重新连接到我工作的vpn。

我相信这个问题与我的电脑在连接openVPN时断电有关。我唯一的办法就是用WireShark来解决这个问题。我注意到所有查询的目标IP都是我工作的内部网络上的IP。

0
0
0
2015-01-14 21:25:00 +0000

我刚刚遇到了这个问题,发现了一些很奇特的问题,并设法解决了这个问题。

例如,如果在你的DNS中,你有一个www.example.com - 10.0.0.0.0.20的记录,但你的客户端的hosts文件中,有一个10.0.0.20 somethingelse.com的条目,你将无法ping www.example.com

奇怪吧

-1
-1
-1
2012-11-22 12:34:05 +0000

ping使用的是ICMP协议,特别是 “回音请求 "和 "回音回复"。

很多网络为了防止攻击或基本的网络扫描,都会禁用ICMP工具。我发现很多你购买的路由器都有一个默认禁用ping等实用工具的设置。