Por que 'ping' não consegue resolver um nome quando 'nslookup' funciona bem?


139

Na minha estação de trabalho Windows XP, encontro a máquina com a qual quero me conectar no DNS nslookup:

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

Name: wolfman.company.com
Address: 192.168.1.178

Mas, quando tento conectar-me a essa máquina, recebo um erro informando que a máquina não pode ser encontrada (ou seja, não pode ser procurada no DNS):

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

Posso conectar-me se eu usar o endereço IP diretamente:

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

Eu poderia contornar isso adicionando uma entrada ao meu hostsarquivo, mas prefiro descobrir por que isso está acontecendo. O problema é transitório, na maior parte do dia eu consigo me conectar à máquina muito bem.

Como isso é possível?

ETA: Eu deixei isso de fora por uma questão de brevidade, mas foi solicitado:

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

ETA: Outros aplicativos obtêm os mesmos resultados. Eu só tentei ping para simplificar. Como o telnet não pode se conectar, os aplicativos Cygwin imprimem uma mensagem "desconhecido host wolfman".

Atualização: Usando o wireshark, descobri que minha estação de trabalho não está tentando uma pesquisa de DNS. É apenas relatar a mensagem de erro "não foi possível encontrar o host".


Você pode adicionar um sufixo DNS padrão para .company.com.
billc.cn

@ billc.cn Eu já tenho esse sufixo DNS.
Skiphoppy 30/10/12

O que eu acho que está acontecendo é que o ping não está pesquisando o FQDN do host, ao contrário do nslookupque usa o search domainparâmetro de uma oferta DHCP (ou o que você especificar para uma configuração IP estática). Confirmar esta fazendo o que @SLaks disse e ping ao FQDN do host :)
jackweirdy


O que acontece quando você corre ping -4 wolfman?
Der Hochstapler

Respostas:


101

Acredito que o nslookup abre uma conexão winsock na porta DNS e emite uma consulta, enquanto o ping usa o serviço de cliente DNS. Você pode tentar parar esse serviço e ver se isso faz alguma diferença.

Alguns comandos que reinicializarão vários estados da rede:

Redefinir as entradas WINSOCK para os padrões de instalação: netsh winsock reset catalog
Redefinir a pilha TCP / IP para os padrões de instalação: netsh int ip reset reset.log
Liberar cache do resolvedor DNS: ipconfig /flushdns
Renovar o registro do cliente DNS e atualizar concessões DHCP: ipconfig /registerdns
Liberar tabela de roteamento: route /f (reinicialização necessária)


1
Aposto que o Active Directory provavelmente está ativo, mas não sei como testar.
Skiphoppy

11
Desativei o serviço de cliente DNS e o problema pareceu desaparecer! Ainda não tenho certeza se foi por acaso. O problema não voltou quando reiniciei o serviço.
Skiphoppy #

6
Às vezes, apenas parar e reiniciar o serviço corrige problemas de DNS (não me pergunte por que). A questão é quanto tempo isso vai durar. Algumas pessoas infelizes precisam repeti-lo várias vezes.
harrymc

1
sfc / scannow caso os arquivos do sistema de serviço de cliente DNS estejam corrompidos sutilmente? Também vi pessoas com problemas semelhantes causados ​​por vírus.
Jon Kloske

1
O que estava faltando para mim nesta resposta foi ipconfig /registerdns(Eu tenho elaborado na minha resposta abaixo)
Mick Halsband

31

Tente executar o ping com o nome do host seguido de um ponto. Então, ao invés de ping wolfmanusarping wolfman.

Isso deve ajudá-lo a resolver sem ter que fazer soluções alternativas com o arquivo hosts, etc.


uau, isso funcionou para mim também. Meu palpite é que algo espera um nome de domínio que não está configurado
user1190

OK, isso funciona ... por quê?
Daniel B.

3
alguma sugestão de por que isso está funcionando e como usar nomes localmente sem deixar pontos?
Ruberoid

Graças - isso funcionou para mim, mas também sei por que isso estaria trabalhando
Frank Fu

2
@Ruberoid Por favor, veja minha resposta sobre como fazer isso automaticamente.
Frederik Aalund

17

Tente ipconfig /displaydnsprocurar por wolfman. Se estiver armazenado em cache como "o nome não existe" (possivelmente por causa de uma pesquisa falhada intermitente anterior), você poderá liberar o cache ipconfig /flushdns.

nslookup não usa o cache, mas consulta o servidor DNS diretamente.


Eu tentei: não é armazenado em cache. E limpar o cache também não resolve o problema.
Skiphoppy

Você pode postar a saída de nslookup -all? Está novclistado?
craig65535

13

Tente adicionar .os sufixos DNS para essa conexão. Ou seja, vá para:

  1. Status da Ethernet
  2. Clique em Propriedades
  3. Protocolo de Internet versão 4
  4. Clique em Propriedades
  5. Clique em Avançado
  6. Anexe esses DNS suficientes (em ordem)
  7. Adicione .como sufixo.

As mesmas etapas são ilustradas na seguinte captura de tela:

Isso deve dar ping wolfmancerto.

Explicação

nslookup wolfman(pesquisa do servidor de nomes: wolfman) envia o nome do host ( wolfman) ao DNS (sistema de nomes de domínio) para obter o endereço IP correspondente. Esse é o único objetivo do nslookupcomando. Isso já funciona, então verificamos que o DNS funciona e que wolfmanrealmente corresponde a um endereço IP.

Por outro lado, ping wolfmanprecisa fazer duas coisas:

  1. Obtenha o IP ao qual o nome do host ( wolfman) corresponde.
  2. Envie pacotes para o IP e ouça a resposta

No Windows (mesmo versões recentes como o Windows 10), a primeira etapa pode falhar facilmente. Para fins de compatibilidade com versões anteriores, o Windows oferece suporte a vários métodos de resolução de nome de host (arquivo de hosts, DNS, NetBIOS / WINS, arquivo LMHOST).

Infelizmente, parece que o pingcomando do Windows nem sempre tenta uma pesquisa de DNS. Não conheço as condições específicas que desencadeiam esse comportamento.

Felizmente, podemos forçar o Windows a fazer uma pesquisa de DNS usando um FQDN (nome de domínio totalmente qualificado). Na prática, fazemos isso sufixando um .ponto para o nome do host: wolfman.. Tente ping wolfman.e verifique se funciona.

A etapa final é forçar o Windows a acrescentar esse ponto em si. Eu já mostrei como fazer isso no começo desta resposta.


Só quero dizer que esse foi o fator que teve sucesso em uma máquina em que eu estava trabalhando. Por mais estúpido que pareça. E não apenas para ping, mas também para outros aplicativos. Não tenho certeza de que sua explicação sobre o que foi tentado é correta (mas você reconhece que não tem certeza disso). Mas uma grande vantagem por mencionar que essa falha pode ser facilmente diagnosticada, tentando executar ping com o nome de domínio com um sufixo de ponto adicionado manualmente.
gwideman

Isso não faz sentido. Você está afirmando que "o comando ping do Windows nem sempre tenta uma pesquisa de DNS", mas recomenda alterar a maneira como as pesquisas de DNS são realizadas para resolver isso? Parece mais provável que o ping é realizar uma pesquisa (s) DNS mas é fazê-las incorretamente, e é por isso que essa correção funciona.
Twisty Imitador

@TwistyImpersonator Entendo sua confusão. O ponto é que o Windows tentará vários métodos de resolução de nome de host, se fornecido, wolfmane uma pesquisa de DNS (aparentemente) não é uma prioridade entre os métodos mencionados. Agora, se você usar wolfman., o Windows priorizará uma pesquisa de DNS em relação aos outros métodos, porque wolfman.é um FQDN que (obviamente) exige uma pesquisa de DNS.
Frederik Aalund 14/01

Então, acho que você está dizendo que, se o ping chegar ao ponto de fazer uma pesquisa de DNS no decorrer de seu fluxo de trabalho de pesquisa normal, ele funcionará. No entanto, o ping deve acabar tentando o DNS se os outros métodos de pesquisa não retornarem uma resposta, o que implica que o ping falhe por si só, porque outro método está tentando antes que o DNS retorne uma resposta. Essa explicação não se encaixa no fato de o ping não conseguir encontrar o host.
Twisty Imitador

@TwistyImpersonator "Então, acho que você está dizendo que se o ping chegar ao ponto de fazer uma pesquisa de DNS no decorrer de seu fluxo de trabalho de pesquisa normal, ele funcionará": Sim. "No entanto, o ping deve acabar tentando o DNS se os outros métodos de pesquisa não retornarem uma resposta, o que implica que o ping falhe por si só, porque outro método está tentando antes do DNS retornar uma resposta": aparentemente não. Talvez o ping desista depois de tentar alguns métodos. Talvez o ping desista após um tempo limite. Talvez o ping nunca tente uma pesquisa de DNS porque acha que o nome do host não é semelhante ao DNS.
Frederik Aalund 14/01

11

nslookup funciona diferente de outros comandos ao resolver nomes / endereços IP no Windows.

O método de resolução normal no Windows é o seguinte:

  1. O cliente verifica se o nome consultado é próprio.
  2. O cliente procura um arquivo Hosts local, uma lista de endereços IP e nomes armazenados no computador local.
  3. Os servidores DNS (Sistema de Nomes de Domínio) são consultados.
  4. Se o nome ainda não for resolvido, a sequência de resolução de nomes NetBIOS será usada como backup. Essa ordem pode ser alterada configurando o tipo de nó NetBIOS do cliente.

nslookuppor outro lado, é usado para testar servidores de nome de domínio.


3
Existem configurações que podem mover a consulta NetBIOS mais alto nessa lista? Tenho a sensação de que a pesquisa NetBIOS está envolvida de alguma forma, mas como a consulta DNS está definitivamente funcionando, não consigo ver como ela chegaria a essa etapa, se a sequência acima for imutável.
Skiphoppy

8

Eu lutei com um problema semelhante e tentei a solução sugerida por @harrymc. Descobri o que eventualmente parece (pelo menos um pouco) funcionar no fórum da microsoft technet (o nslookup funciona, mas nada mais tem DNS no PC Win7 autônomo )

Aqui está a citação:

... tente usar o comando abaixo para liberar e redefinir um cache do resolvedor de clientes para teste.

ipconfig / flushdns

ipconfig / registerdns

Consulte o link abaixo para mais detalhes. http://jefferyland.wordpress.com/2011/07/28/quick-review-of-flushdns-registerdns-and-dns-queries/

Então, basicamente, o que estava faltando para mim era ipconfig /registerdns


1
resposta original por @harrymc agora reflete a falta /registerdnsde comando
Mick Halsband

Estou jogando whack-a-mole com esse problema no Win10 há cerca de um ano. Quando meu laptop acorda, ele não consegue encontrar servidores corporativos, mas sites externos como o microsoft.com funcionam. Parece acontecer ao alterar as redes Wi-Fi (casa / VPN vs escritório). flushdns resolve o problema algumas vezes, mas nem sempre. Hoje tentei o registerdns e isso imediatamente corrigiu o problema. Amanhã vou tentar adicionar. até o final de um nome (mas o ping já falha com o FQDN para servidores internos). É muito frustrante. E ainda por cima - se eu esperar um pouco, o problema se resolverá.
precisa saber é

6

Ainda hoje tivemos o mesmo problema , mas a solução era diferente . Por isso, pensei em adicioná-lo como referência, pois este foi o principal resultado da pesquisa.

  • Problema : pingnão resolverá um nome de host, mas nslookuppode. (Observado em 2 hosts diferentes do Windows Server 2012 R2.)
  • Causa : (para cada host) O host tem mais de uma NIC conectada e há vários gateways padrão configurados.
  • Solução : (para cada host) Remova o gateway padrão da configuração de todas as NICs, exceto uma, para que restem apenas um gateway padrão .

ah isso fez por mim. Perfeito.
IAmTheSquidward

Curto e simples
Frank Fu

5

Talvez wolfman.company.com esteja listado em C: \ Windows \ system32 \ drivers \ etc \ hosts?

O nslookup ignora esse arquivo e sempre solicita o DNS, enquanto o ping e outras ferramentas procuram primeiro no arquivo "hosts", depois no DNS.


Bom pensamento! Mas verifiquei e nenhuma das máquinas com as quais vi esse problema está listada nos hosts.
Skiphoppy

5

Eu tive o mesmo problema em um sistema Windows 2012R2 (= 8.1) e tentei todas as sugestões acima, mas nenhuma delas o corrigia:
- Executar ping no nome totalmente qualificado.
- Executar ping no nome não qualificado não.
- Ambos trabalharam em vários outros sistemas, que tinham o mesmo sistema operacional e aparentemente a mesma configuração.
- Todas as seqüências de busca de sufixo necessárias estavam lá.
(Observe que algumas das correções propostas, como a solução alternativa para as consultas com vários rótulos, são obviamente irrelevantes, pois o nome não qualificado tem apenas uma parte.)

Percebi então que o sistema de destino que eu estava tentando executar ping NÃO tinha um endereço IPv6. Então eu tentei "ping -4 unqualified_name " e bingo! isso funcionou.
Portanto, por algum motivo, apenas neste sistema, o ping tentou resolver apenas o nome não qualificado -> endereço IPv6 e não o nome não qualificado -> IPv4.
Para mim, a correção foi desativar completamente o IPv6, pois eu não preciso disso. Mas eu estaria realmente interessado em encontrar uma maneira mais suave de informar ao ping (ou presumivelmente o serviço de cliente DNS) para tentar resolver os endereços IPv4 e IPv6.


2

Adicionar uma entrada no arquivo c:/windows/system32/drivers/etc/hostspode corrigi-lo.


Isso irá corrigi-lo, mas não resolverá o problema nessa máquina, mas não o ajudará em outras máquinas. Lembre-se de Hosts> Resolvedor DNS> Servidor DNS> Nome NetBIOS.
The Dude

2

Eu estava tentando descobrir por que, em um computador com Windows 7, posso usar o ping serverque funciona e o outro não pode resolver server. No entanto, ambos podiam executar ping, o server.lanque eu não entendi direito.

Acontece que eu tinha mexido com algumas configurações (sufixos DNS) para não precisar usar FQDNs ao usar a VPN de trabalho. Eu tive que adicionar meu local .lana esses sufixos para fazer com que os dois computadores agissem da mesma maneira.

Vá para Painel de Controle> Rede e Internet> Conexões de Rede e clique com o botão direito na sua conexão de rede e clique em Propriedades. Clique em Internet Protocol Version 4 e clique no botão Properties. Em seguida, o botão Avançado ... nesta nova janela. Vá para a guia DNS, foi onde eu adicionei um sufixo DNS para o meu trabalho, mas também precisava de um para minhas conexões domésticas normais.

Configurações avançadas de TCP / IP


Encontrei uma situação semelhante em um servidor com um endereço IP estático. A primeira entrada no "Anexar esses sufixos DNS" estava em branco E o "sufixo DNS para esta conexão" estava em branco. Outros servidores nos quais funcionou tinham o mesmo espaço em branco "Anexar esses sufixos DNS", mas o "sufixo DNS para esta conexão" foi preenchido.
Tim Lewis

2

Me deparei com esta questão também. A maneira "mais fácil" de corrigi-lo era simplesmente adicionar um .no final do nome do host. No entanto, isso é bastante irritante. A maioria das redes não exige isso. Prefiro não precisar dizer a todos na rede para fazer isso quando precisarem acessar o mesmo recurso.

Eu estava olhando a sugestão de Frederik Aalund como uma possível solução e notei que eles sugeriam a mudança da opção padrão "Anexar sufixos DNS primários e específicos de conexão". Isso me fez pensar que talvez minha rede estivesse simplesmente um pouco confusa.

Analisando minhas configurações de DD-WRT, o "Domínio da LAN" foi deixado por definir. Definir isso como uma sequência arbitrária parece ter corrigido esse problema para todos os clientes na minha rede sem ter uma configuração especial em cada máquina, a solução que eu queria! :)


1

Eu encontrei isso quando migramos para o Windows 7 do Windows XP, o problema estava relacionado a um problema de Consulta de DNS de rótulo múltiplo do Windows 7.

Permitir sufixo DNS anexando a consultas não qualificadas de nomes com vários rótulos - consulte:

http://computerstepbystep.com/allow_dns_suffix_appending_to_unqualified_multi_label_name_queries.html

Espero que isto ajude


2
Bem-vindo ao Super Usuário! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Canadense Luke

1

Se no mac os x, pode haver um problema de cache DNS:

Despejar o cache

sudo killall -HUP mDNSResponder
sudo dscacheutil -flushcache

O OP pergunta sobre o Windows XP e a pergunta é marcada como Windows.
PL

Talvez seja útil para os outros. Vou deixar, a resposta estava aqui agora há mais de 3 anos. Por que excluir agora?
Christian

1

Estou percebendo isso porque me incomodou no último ano e talvez eu tenha encontrado uma solução alternativa.

Para mim, parecia que algum sistema de cache de DNS dentro do cliente Windows está com defeito. O Windows 7 e 8.1 são afetados por isso ... não podem mais falar muito sobre o Windows XP. ping não resolve o nome. não é a parte icmp que é importante, mas a parte que resolve o nome). O nslookup foi projetado para consultar o servidor de nomes e faz exatamente isso e nenhuma resolução de hierarquia de nomes do Windows.

Reiniciar o serviço dnscache ajudou sempre. Mas como desabilitei o IPv6 em todas as interfaces do cliente, o problema não ocorreu mais.

Felicidades!


Desabilitar o IPv6 pode não ser uma solução viável para todos (e, na melhor das hipóteses, parece anedótico). Tudo o que você diz parece ter sido dito já neste tópico (por exemplo, o comentário do harrymc “Às vezes, apenas parar e reiniciar o serviço corrige problemas de DNS”, dois anos atrás).
G-Man

1

Eu posso estar errado nisso, porque é baseado nos meus esquecidos dias de recursos NT4.

Pelo que me lembro, o PING usa Netbios / WINS e DNS (nessa ordem, pelo menos se você não especificar um FQDN).

O WINS foi desativado há muitos anos, mas você ainda pode ter o Netbios ativado em sua interface e, portanto, o PING pode usar o netbios que pode não fornecer nenhum resultado. Especialmente se o tráfego estiver passando um roteador em algum lugar.

Basta desabilitar o Netbios e o Ping usará o DNS como primeira prioridade e anexará o Excesso de DNS registrado na interface ao seu nome de host.


0

Acabei de ter esse problema, encontrei algo bastante peculiar e consegui corrigi-lo Lol

Basicamente, se você tiver alguma entrada no arquivo hosts, que seja igual ao IP que seu ping está tentando resolver, ela falhará.

Por exemplo, se no seu DNS, você possui um registro para www.example.com - 10.0.0.20, mas possui uma entrada no arquivo hosts do seu cliente, 10.0.0.20 somethingelse.com, não poderá executar ping em www .exemplo.com

Estranho hein


0

No meu caso, o que resolveu esse problema foi adicionar o domínio do host que eu estava tentando executar ping em uma opção de política de grupo chamada "Lista de pesquisa de sufixo DNS" .

Em resumo, o procedimento é o seguinte: abra gpedit.msce navegue para Computer Configuration -> Administrative Templates -> Network -> DNS Client > DNS Suffix Search List, defina-o como "Ativado" e adicione o nome do domínio à lista (a lista está vazia por padrão).

Uma descrição mais detalhada dessas etapas pode ser encontrada aqui


0

Eu tive o mesmo problema e acontece que outra máquina tinha o mesmo endereço IP, e isso estava causando.

IP alterado novamente para DHCP e tudo estava funcionando bem.


O nslookup funcionou porque não precisa se comunicar com o outro host. o ping precisa se comunicar e obviamente quebra.
ndemou

@ndemou: Essa explicação não faz nenhum sentido. Sim, é tarefa do ping tentar se comunicar com o outro host, mas a primeira etapa desse processo é obter o endereço IP do outro host. Se ele  obtiver o endereço IP do outro host, será solicitado; se não conseguir se comunicar com o outro host, ele finalmente reportará "100% de perda". Mas, na questão, o ping está falhando até em obter um endereço. (Tente  ping bbbbbbb.come  ping bbbbbb.compara comparação.)
Scott

Você está certo @Scott. Eu estava editando a resposta de Klaus e, enquanto lia sua descrição do problema, esqueci que esse problema específico do ping é que ele não resolve. Não posso ter certeza, mas eu apostaria agora que Klaus simplesmente não estava recebendo respostas.
ndemou 14/02

0

Nenhuma das soluções aqui funcionou para mim. O que funcionou para mim foi reconectar ao vpn do meu trabalho usando o OpenVPN. Depois de desconectar, tudo continuou a funcionar.

Acredito que o problema estava relacionado à falta de energia enquanto meu computador estava conectado ao openVPN. A única maneira de descobrir isso foi usando o WireShark. Percebi que os IPs de destino de todas as consultas estavam indo para IPs na rede interna do meu trabalho.


-1

O ping usa o protocolo ICMP, especificamente a 'Solicitação de eco' e 'Resposta de eco'.

muitas redes desativam os utilitários ICMP para impedir ataques ou varredura básica de rede. Descobri que muitos roteadores que você compra vêm com uma configuração para desativar o ping e utilitários similares habilitados por padrão.

Você pode encontrar mais informações sobre o ICMP aqui:

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


8
Sim, mas antes de usar o ICMP, o domínio deve ser resolvido para um endereço IP, como de costume. Portanto, este não é o problema aqui.
23612 Michael
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.