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


138

在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.

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

预计到达时间:其他应用程序将获得相同的结果。我只是尝试ping来简化。telnet无法连接,Cygwin应用程序会显示“未知的主机狼人”消息。

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


您可以为添加默认的DNS后缀.company.com
billc.cn 2012年

@ billc.cn我已经有该DNS后缀。
skiphoppy 2012年

我认为正在发生的事情是ping不查找主机的FQDN,这与nslookup使用search domainDHCP提供的参数(或您为静态IP配置指定的任何参数)不同。通过执行@SLaks所说的并ping通主机的FQDN来确认这一点:)
jackweirdy 2012年


跑步时会发生什么ping -4 wolfman
Der Hochstapler 2012年

Answers:


101

我相信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 需要重新启动)


1
我敢打赌Active Directory可能处于活动状态,但我不知道如何测试。
skiphoppy 2012年

11
我禁用了DNS客户端服务,问题似乎消失了!不确定是否是fl幸。重新启动服务后问题没有再出现。
skiphoppy 2012年

6
有时,只是停止并重新启动服务即可解决DNS问题(不要问我为什么)。问题是这将持续多长时间。一些不幸的人需要一次又一次地重复。
harrymc

1
sfc / scannow,以防dns客户端服务系统文件被损坏?我也看到有些人是由病毒引起的类似问题。
乔恩·克洛斯凯

1
我在此答案中缺少的是ipconfig /registerdns(我在下面的答案中详述)
Mick Halsband 2015年

31

尝试使用主机名后跟一个点来ping。所以代替ping wolfman使用ping wolfman.

那应该可以让您解决问题,而不必对hosts文件等进行变通。


哇,这也对我有用。我的猜测是,有人期望未配置域名
user1190 '16

好,这行得通...为什么?
Daniel B.

3
任何建议,为什么这是行得通的,以及如何宁愿使用本地名称而不会在末尾加点?
Ruberoid

谢谢-这对我有用,但也知道为什么会有用
Frank Fu

2
@Ruberoid请参阅我的答案以了解如何自动执行此操作。
Frederik Aalund

17

尝试ipconfig /displaydns寻找狼人。如果将其缓存为“名称不存在”(可能是由于先前间歇性的失败查找),则可以使用刷新缓存ipconfig /flushdns

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


我试过了:没有缓存。而且清除缓存也不能解决问题。
skiphoppy 2012年

您可以发布的输出nslookup -all吗?被novc列出?
craig65535

13

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

  1. 以太网状态
  2. 单击属性
  3. 互联网协议版本4
  4. 单击属性
  5. 点击高级
  6. 附加这些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支持各种主机名解析方法(主机文件,DNS,NetBIOS / WINS,LMHO​​ST文件)。

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

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

最后一步是强制Windows自己附加该点。我已经在此答案的开头说明了如何执行此操作。


只是想说这是我正在使用的机器成功的因素。虽然看起来很愚蠢。不仅用于ping,还用于其他应用程序。我不确定您对什么时候尝试过的内容的解释是正确的(但是您承认自己不确定)。但值得一提的是,通过尝试使用手动添加的点后缀对域名执行ping操作,可以轻松诊断出此故障。
gwideman

这没有道理。您认为,“ Windows的ping命令并不总是尝试进行DNS查找,”而是建议更改DNS查找的执行方式以解决该问题?它似乎更可能是平执行DNS查找(S)而被错误地做他们,这就是为什么这个修复工程。
Twisty模仿者

@TwistyImpersonator我了解您的困惑。关键是,Windows将尝试几种主机名解析方法(如果给定的话),wolfman并且DNS查找(显然)不是上述方法中的最高优先级。现在,如果您wolfman.改为使用Windows,则Windows将优先于其他方法进行DNS查找,因为(显然)wolfman.FQDN需要进行DNS查找。
Frederik Aalund

因此,我认为您是在说,如果 ping能够在其正常查找工作流程中进行DNS查找,那将是可行的。但是,如果其他查找方法未返回答案,则ping 应该最终尝试DNS,这表明ping本身失败的原因是因为它在DNS返回答案之前尝试的另一种方法。该解释与ping无法找到主机的事实不符。
Twisty模仿者

@TwistyImpersonator“所以,我认为您是说ping是否可以在其正常查找工作流程中进行DNS查找,它会起作用”:是的。“但是,如果其他查找方法未返回答案,则ping应该最终尝试DNS,这表明ping本身失败的原因是因为它在DNS返回答案之前尝试的另一种方法”:显然不是。尝试几种方法后,ping可能只是放弃了。超时后ping可能会放弃。也许ping从来没有尝试过DNS查找,因为它认为主机名不像DNS。
Frederik Aalund

11

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

Windows上常规解析方法如下:

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

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


3
是否有任何设置可以使NetBIOS查询在该列表中上移?我直觉感觉到涉及到NetBIOS查找,但是由于DNS查询绝对有效,所以如果上面的序列是不可变的,那么我将看不到它将如何进行。
skiphoppy 2012年

8

我一直在努力解决类似的问题,并尝试了@harrymc建议的解决方案。我在Microsoft Technet论坛上发现了最终似乎(至少在某种程度上)可行的方法(nslookup可以运行,但没有其他功能可以在独立的Win7 PC上使用DNS

这是报价:

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

ipconfig / flushdns

ipconfig /注册域名

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

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


1
@harrymc的原始答案现在反映了缺少的/registerdns命令
Mick Halsband

我一直在Win10上玩这个问题的游戏,大约一年了。当我的笔记本电脑唤醒时,找不到任何公司服务器,但是像microsoft.com这样的外部站点都可以工作。更改WiFi网络(家庭/ VPN与办公室)时似乎会发生这种情况。flushdns有时但并非总是解决此问题。今天,我尝试了registerdns,并立即解决了问题。明天我将尝试添加。到名称的末尾(但内部服务器的FQDN ping操作已失败)。非常令人沮丧。最重要的是-如果我稍等片刻,问题将自行解决。
ripvlan

6

就在今天,我们遇到了同样的问题,但是解决方案却有所不同。因此,我想将其添加为参考,因为这是搜索量最高的结果。

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

啊,这对我有用。完善。
IAmTheSquidward,2016年

简短而简单
Frank Fu

5

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

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


好主意!但是我检查了一下,主机中未列出我看到此问题的所有计算机。
skiphoppy 2012年

5

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

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


2

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


这样可以解决该问题,但是不能解决他在该机器上的问题,但是不能帮助他在其他机器上。记住主机> DNS解析器> DNS服务器> NetBIOS名称。
花花公子

2

我试图弄清楚为什么在一台win 7的计算机上我可以使用能ping server正常工作的计算机,而另一台计算机却无法解决该问题server。但是,两者都可以Ping server.lan,我不太了解。

原来我搞砸了一些设置(DNS后缀),以便在使用工作VPN时不必使用FQDN。我必须将本地名称添加.lan到这些后缀中,以使两台计算机的行为相同。

转到控制面板>网络和Internet>网络连接,然后右键单击您的网络连接,然后单击属性。单击“ Internet协议版本4”,然后单击“属性”按钮。然后在此新窗口中单击“高级...”按钮。转到DNS选项卡,这是我为工作添加DNS后缀的地方,但对于正常的家庭连接也需要一个DNS后缀。

进阶TCP / IP设定


我在具有静态IP地址的服务器上遇到了类似情况。“附加这些DNS后缀”中的第一项为空白,而“此连接的DNS后缀”为空白。工作的其他服务器具有相同的空白“附加这些DNS后缀”,但填充了“此连接的DNS后缀”。
蒂姆·刘易斯

2

我也遇到了这个问题。对我来说,最简单的解决方法.是在主机名的末尾添加a 。但是,这很烦人。大多数网络都不需要这样做。我宁愿不必告诉网络上的其他所有人在需要访问相同资源时也要这样做。

我一直在看Frederik Aalund的建议作为可能的解决方案,并注意到他们建议从默认的“附加主要和连接特定的DNS后缀”选项切换。这让我觉得也许我的网络只是配置有误。

查看我的DD-WRT设置,“ LAN域”未设置。将其设置为任意字符串似乎可以解决我网络上所有客户端的问题,而无需在每台机器上进行特殊配置,这是我想要的解决方案!:)



1

如果在Mac OS X上,则可能是DNS缓存问题:

转储缓存

sudo killall -HUP mDNSResponder
sudo dscacheutil -flushcache

OP询问有关Windows XP的问题,并标记为Windows。
PL

也许对其他人有帮助。我将离开,答案已经存在了三年多了。为什么现在删除?
基督教徒

1

我选择此方法是因为去年困扰了我,也许我找到了解决方法。

对我来说,Windows客户端中的某些dns缓存系统似乎有问题。Windows 7和8.1受此影响...关于Windows XP的内容不再多说。ping无法解析名称。重要的不是icmp部分,而是名称解析部分。nslookup旨在查询名称服务器,并且确实做到了这一点,并且没有Windows名称层次结构解析。

每次重新启动dnscache服务都会有所帮助。但是由于我在所有客户端接口上禁用了IPv6,因此该问题不再发生。

干杯!


禁用IPv6可能不是每个人都可行的解决方案(无论如何,它听起来充其量只是传闻)。您所说的所有内容似乎都已经在该线程中说过(例如,两年前harrymc的评论“有时只是停止并重新启动该服务可解决DNS问题”)。
G-Man

1

我对此可能是错的,因为它是基于我长期被遗忘的NT4 ressource-kit的日子。

票价方面,我记得PING使用Netbios / WINS和DNS(至少在您未指定FQDN的情况下,使用该顺序)。

WINS已经很多年了,但是您可能仍在界面上启用了Netbios,因此PING可能使用的Netbios可能不会给您任何结果。尤其是当流量通过某处的路由器时。

只需禁用Netbios,Ping将使用DNS作为第一优先级,并将接口上注册的DNS Surffic附加到您的主机名。


0

我刚遇到这个问题,发现了一些很奇怪的东西,然后设法解决了

基本上,如果您的主机文件中有任何条目与ping尝试解析的IP相同,则它将失败。

例如,如果在您的DNS中,您有一个www.example.com-10.0.0.20的记录,但是在您的客户端的主机文件10.0.0.20 somethingelse.com中有一个条目,则您将无法ping通www .example.com

奇怪吧


0

在我的情况下,解决此问题的方法是将我尝试ping的主机的域添加到名为“ DNS Suffix Search List”的组策略选项中。

简短的过程是:打开gpedit.msc并导航到Computer Configuration -> Administrative Templates -> Network -> DNS Client > DNS Suffix Search List,将其设置为“ Enabled”,然后将域名添加到列表中(默认情况下列表为空)。

这些步骤的详细说明可以在这里找到


0

我遇到了同样的问题,结果发现另一台机器具有相同的IP地址,这就是造成它的原因。

将IP重新更改为DHCP,一切正常。


nslookup之所以有效,是因为它不需要与其他主机进行通信。ping确实需要进行通信,并且显然会中断。
ndemou

@ndemou:这种解释没有任何意义。是的,尝试与其他主机通信是Ping的工作,但是该过程的第一步是获取其他主机的IP地址。如果它  获得了另一台主机的IP地址,它会告诉您;如果它随后无法与其他主机通信,则最终报告“ 100%丢失”。但是,在这个问题上,Ping甚至无法获得地址。(尝试  ping bbbbbbb.com并  ping bbbbbb.com进行比较。)
Scott

您说得对@Scott。我正在编辑Klaus的答案,在阅读对问题的描述时,我忘记了对ping的特定问题提出疑问,即它无法解决。不能确定,但​​是我敢打赌,克劳斯只是没有得到答复。
ndemou

0

这里没有任何解决方案对我有用。对我有用的是使用OpenVPN重新连接到我的工作VPN。然后,断开连接后,一切继续进行。

我相信问题与我的计算机通过openVPN连接时电源关闭有关。我发现此问题的唯一方法是使用WireShark。我注意到所有查询的目标IP都将转到工作内部网络中的IP。


-1

ping使用ICMP协议,特别是“回显请求”和“回显应答”。

许多网络禁用ICMP实用程序以防止攻击或基本的网络扫描。我发现您购买的许多路由器都带有禁用ping的设置,例如默认情况下启用的实用程序。

您可以在这里找到有关ICMP的更多信息:

http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol


8
是的,但是在使用ICMP之前,必须像往常一样将域解析为IP地址。因此,这不是这里的问题。
Michael
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.