Perché "ping" non è in grado di risolvere un nome quando "nslookup" funziona correttamente?


139

Sulla mia workstation Windows XP, posso trovare la macchina a cui voglio connettermi in DNS con nslookup:

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

Name: wolfman.company.com
Address: 192.168.1.178

Ma quando provo a connettermi a quella macchina, ricevo un errore che mi dice che la macchina non può essere trovata (cioè, non può essere cercata in DNS):

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

Sono in grado di connettermi se uso direttamente l'indirizzo 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

Potrei aggirare questo aggiungendo una voce al mio hostsfile, ma preferirei scoprire perché questo sta accadendo. Il problema è temporaneo, la maggior parte del giorno riesco a connettermi alla macchina bene.

Com'è possibile?

ETA: L'ho lasciato fuori per brevità, ma mi è stato chiesto:

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

ETA: altre applicazioni ottengono gli stessi risultati. Ho solo provato a ping per semplificare. telnet non riesce a connettersi, le app Cygwin stampano un messaggio "sconosciuto host wolfman".

Aggiornamento: Usando WireShark, ho scoperto che la mia workstation non sta tentando una ricerca DNS. Sta solo segnalando il messaggio di errore "Impossibile trovare l'host".


È possibile aggiungere un suffisso DNS predefinito per .company.com.
billc.cn,

@ billc.cn Ho già quel suffisso DNS.
skiphoppy,

Quello che penso stia accadendo è che il ping non sta cercando il nome di dominio completo dell'host, a differenza del nslookupquale utilizza il search domainparametro di un'offerta DHCP (o qualunque cosa tu specifichi per una configurazione IP statica). Conferma facendo ciò che ha detto @SLaks e eseguendo il ping del nome di
dominio


Cosa succede quando corri ping -4 wolfman?
Der Hochstapler,

Risposte:


101

Credo che nslookup apra una connessione winsock sulla porta DNS e invii una query, mentre ping utilizza il servizio Client DNS. Potresti provare a interrompere questo servizio e vedere se questo fa la differenza.

Alcuni comandi che reinizializzeranno vari stati di rete:

Ripristina le voci WINSOCK ai valori predefiniti dell'installazione: netsh winsock reset catalog
Ripristina lo stack TCP / IP ai valori predefiniti dell'installazione: netsh int ip reset reset.log
Svuota cache del resolver DNS: ipconfig /flushdns
Rinnova la registrazione del client DNS e aggiorna i lease DHCP: ipconfig /registerdns
Svuota tabella di routing: route /f (riavvio richiesto)


1
Scommetto che Active Directory è probabilmente attivo, ma non so come testare.
skiphoppy,

11
Ho disabilitato il servizio Client DNS e il problema sembrava scomparire! Non sono ancora sicuro se fosse un colpo di fortuna. Il problema non è tornato quando ho riavviato il servizio.
skiphoppy,

6
A volte basta interrompere e riavviare il servizio per risolvere i problemi DNS (non chiedermi perché). La domanda è: quanto durerà. Alcune persone sfortunate hanno bisogno di ripeterlo ancora e ancora.
harrymc,

1
sfc / scannow nel caso in cui i file di sistema del servizio client DNS siano sottilmente corrotti? Ho anche visto alcune persone con problemi simili causati da un virus.
Jon Kloske,

1
Quello che mi mancava in questa risposta era ipconfig /registerdns(ho elaborato nella mia risposta di seguito)
Mick Halsband

31

Prova a eseguire il ping con il nome host seguito da un punto. Quindi invece di ping wolfmanusareping wolfman.

Questo dovrebbe farti risolvere senza dover fare soluzioni alternative con il file hosts, ecc.


wow, ha funzionato anche per me. La mia ipotesi è che qualcosa si aspetti un nome di dominio che non è configurato
user1190

OK, funziona ... perché?
Daniel B.

3
qualche suggerimento sul perché questo funzioni e su come utilizzare i nomi locali senza punti finali?
Ruberoid,

Grazie - ha funzionato per me, ma sapeva anche perché avrebbe funzionato
Frank Fu

2
@Ruberoid Per favore vedi la mia risposta per come farlo automaticamente.
Frederik Aalund,

17

Prova a ipconfig /displaydnscercare Wolfman. Se è memorizzato nella cache come "nome non esiste" (probabilmente a causa di una precedente ricerca intermittente non riuscita), è possibile svuotare la cache con ipconfig /flushdns.

nslookup non usa la cache, ma piuttosto interroga direttamente il server DNS.


Ho provato: non è memorizzato nella cache. E anche cancellare la cache non risolve il problema.
skiphoppy,

Puoi pubblicare l'output di nslookup -all? È novcelencato?
craig65535

13

Prova ad aggiungere .ai suffissi DNS per quella connessione. Cioè, vai a:

  1. Stato Ethernet
  2. Fai clic su Proprietà
  3. Protocollo Internet versione 4
  4. Fai clic su Proprietà
  5. Fai clic su Avanzate
  6. Aggiungi questi suffissi DNS (in ordine)
  7. Aggiungi .come suffisso.

Gli stessi passaggi sono illustrati nella seguente schermata:

Questo dovrebbe ping wolfmanfunzionare.

Spiegazione

nslookup wolfman(ricerca del server dei nomi: wolfman) invia il nome host ( wolfman) al DNS (sistema dei nomi di dominio) per ottenere l'indirizzo IP corrispondente. Questo è l'unico scopo del nslookupcomando. Funziona già, quindi abbiamo verificato che il DNS funziona e che wolfmancorrisponde effettivamente a un indirizzo IP.

Al contrario, ping wolfmandeve fare due cose:

  1. Ottieni l'IP a cui corrisponde il nome host ( wolfman).
  2. Invia i pacchetti all'IP e ascolta la risposta

Su Windows (anche versioni recenti come Windows 10), il primo passo può facilmente fallire. Per motivi di compatibilità con le versioni precedenti, Windows supporta vari metodi di risoluzione dei nomi host (file hosts, DNS, NetBIOS / WINS, file LMHOST).

Sfortunatamente, sembra che il pingcomando di Windows non tenti sempre una ricerca DNS. Non conosco le condizioni specifiche che innescano questo comportamento.

Fortunatamente, possiamo forzare Windows a eseguire una ricerca DNS utilizzando un nome di dominio completo (nome di dominio completo). In pratica, lo facciamo da suffisso un .punto per l'hostname: wolfman.. Prova ping wolfman.e verifica che funzioni.

Il passaggio finale consiste nel forzare Windows ad aggiungere questo punto stesso. Ho già mostrato come farlo all'inizio di questa risposta.


Voglio solo dire che questo si è rivelato essere il fattore che è riuscito su una macchina su cui stavo lavorando. Stupido anche se sembra. E non solo per il ping, ma anche per altre applicazioni. Non sono sicuro che la tua spiegazione di cosa sia stato provato quando è del tutto corretta (ma riconosci di non esserne sicuro). Ma un grande vantaggio per menzionare che questo errore può essere facilmente diagnosticato tentando il ping con il nome di dominio con un suffisso punto aggiunto manualmente.
Gwideman,

Questo non ha senso. Stai postulando che "il comando ping di Windows non tenta sempre una ricerca DNS", ma allora consigli di cambiare il modo in cui vengono eseguite le ricerche DNS per risolverlo? Sembra più probabile che il ping stia eseguendo una ricerca DNS (s) ma li stia eseguendo in modo errato, ed è per questo che questa correzione funziona.
Twisty Impersonator

@TwistyImpersonator Capisco la tua confusione. Il punto è che Windows tenterà diversi metodi di risoluzione dei nomi host se forniti wolfmane una ricerca DNS non è (apparentemente) una delle massime priorità tra detti metodi. Ora, se si utilizza wolfman.invece, Windows darà la priorità a una ricerca DNS rispetto agli altri metodi perché wolfman.è un nome di dominio completo che (ovviamente) richiede una ricerca DNS.
Frederik Aalund,

Quindi penso che stai dicendo che se il ping arrivasse al punto di fare una ricerca DNS nel corso del suo normale flusso di lavoro di ricerca, funzionerebbe. Tuttavia, il ping dovrebbe finire per provare il DNS se gli altri metodi di ricerca non restituiscono una risposta, il che implica il motivo per cui il ping non riesce da solo perché un altro metodo sta provando prima che il DNS restituisca una risposta. Questa spiegazione non corrisponde al fatto che ping non è in grado di trovare l'host.
Twisty Impersonator

@TwistyImpersonator "Quindi penso che stai dicendo che se il ping arrivasse al punto di fare una ricerca DNS nel corso del suo normale flusso di lavoro di ricerca, funzionerebbe": Sì. "Tuttavia, il ping dovrebbe finire per provare DNS se gli altri metodi di ricerca non restituiscono una risposta, il che implica il motivo per cui il ping non riesce da solo perché un altro metodo sta provando prima che il DNS restituisca una risposta": Apparentemente no. Forse il ping si arrende dopo aver provato un paio di metodi. Forse il ping si arrende dopo un timeout. Forse il ping non prova mai una ricerca DNS perché pensa che il nome host non sia simile al DNS.
Frederik Aalund,

11

nslookup funziona in modo diverso rispetto ad altri comandi durante la risoluzione di nomi / indirizzi IP su Windows.

Il normale metodo di risoluzione su Windows è il seguente:

  1. Il client verifica se il nome richiesto è proprio.
  2. Il client cerca quindi un file Hosts locale, un elenco di indirizzi IP e nomi memorizzati sul computer locale.
  3. Vengono interrogati i server DNS (Domain Name System).
  4. Se il nome non viene ancora risolto, la sequenza di risoluzione dei nomi NetBIOS viene utilizzata come backup. Questo ordine può essere modificato configurando il tipo di nodo NetBIOS del client.

nslookupd'altra parte viene utilizzato per testare Domain Name Server.


3
Ci sono delle impostazioni che possono spostare la query NetBIOS in alto nell'elenco? Ho la sensazione che la ricerca NetBIOS sia coinvolta in qualche modo, ma dal momento che la query DNS funziona sicuramente non riesco a vedere come sarebbe mai arrivato a quel passaggio, se la sequenza sopra è immutabile.
skiphoppy,

8

Ho lottato con un problema simile e ho provato la soluzione suggerita da @harrymc. Ho trovato quello che alla fine sembra (almeno un po ') funzionare nel forum di Microsoft Technet ( nslookup funziona ma nient'altro ha DNS sul PC autonomo Win7 )

Ecco la citazione:

... prova a utilizzare il comando seguente per svuotare e ripristinare una cache del resolver client per il test.

ipconfig / flushdns

ipconfig / registerdns

Si prega di fare riferimento al link qui sotto per maggiori dettagli. http://jefferyland.wordpress.com/2011/07/28/quick-review-of-flushdns-registerdns-and-dns-queries/

Quindi sostanzialmente quello che mi mancava era ipconfig /registerdns


1
la risposta originale di @harrymc ora riflette il /registerdnscomando mancante
Mick Halsband,

Ho giocato a squarciagola con questo problema su Win10 da circa un anno. Quando il mio laptop si sveglia, non riesce a trovare alcun server corp, ma i siti esterni come microsoft.com funzionano. Sembra accadere quando si cambiano le reti WiFi (casa / VPN vs ufficio). flushdns risolve il problema a volte ma non sempre. Oggi ho provato i registerdns e questo ha immediatamente risolto il problema. Domani proverò ad aggiungere. alla fine di un nome (ma il ping ha già esito negativo con FQDN per server interni). È molto frustrante. E per finire, se aspetto un po 'il problema si risolverà da solo.
ripvlan

6

Proprio oggi abbiamo avuto lo stesso problema , ma la soluzione era diversa . Quindi ho pensato di aggiungerlo come riferimento in quanto questo era il risultato di ricerca più in alto.

  • Problema : pingnon risolve un nome host, ma è nslookuppossibile. (Osservato su 2 host Windows Server 2012 R2 diversi.)
  • Causa : (per ciascun host) L'host ha più di una scheda NIC connessa e sono configurati più gateway predefiniti .
  • Soluzione : (per ogni host) Rimuovere il gateway predefinito dalla configurazione di tutte le schede NIC tranne una, quindi rimane un solo gateway predefinito .

ah questo l'ha fatto per me. Perfetto.
IAmTheSquidward,

Breve e semplice
Frank Fu

5

Forse wolfman.company.com è elencato in C: \ Windows \ system32 \ drivers \ etc \ hosts?

nslookup ignora quel file e chiede sempre il DNS, mentre il ping e altri strumenti prima cercano nel file "hosts", quindi nel DNS.


Buon pensiero! Ma ho controllato e nessuna delle macchine con cui ho riscontrato questo problema è elencata negli host.
skiphoppy,

5

Ho avuto lo stesso problema su un sistema Windows 2012R2 (= 8.1) e ho provato tutti i suggerimenti di cui sopra, ma nessuno di loro lo avrebbe risolto:
- Il ping del nome completo funzionava.
- Il ping del nome non qualificato non lo ha fatto.
- Entrambi hanno funzionato su molti altri sistemi, che avevano lo stesso sistema operativo e apparentemente la stessa configurazione.
- Erano presenti tutte le stringhe di ricerca del suffisso necessarie.
(Si noti che alcune delle correzioni proposte, come la soluzione alternativa per le query con più etichette, sono ovviamente irrilevanti, poiché il nome non qualificato ha solo una parte.)

Poi ho notato che il sistema di destinazione che stavo cercando di eseguire il ping NON aveva un indirizzo IPv6. Quindi ho provato "ping -4 unqualified_name " e bingo! questo ha funzionato.
Quindi, per qualche motivo, solo su questo sistema, il ping ha cercato solo di risolvere il nome non qualificato-> indirizzo IPv6 e non il nome non qualificato-> IPv4.
Per me la soluzione era disabilitare completamente IPv6 poiché non ne avevo affatto bisogno. Ma sarei davvero interessato a trovare un modo più delicato per dire al ping (o presumibilmente al servizio client DNS) di provare a risolvere gli indirizzi IPv4 e IPv6.


2

L'aggiunta di una voce nel file c:/windows/system32/drivers/etc/hostspotrebbe risolverlo.


Ciò lo risolverà, ma non risolverà il suo problema su quella macchina, ma non lo aiuterà su altre macchine. Ricorda host> Risolutore DNS> Server DNS> Nome NetBIOS.
The Dude,

2

Stavo cercando di capire perché su un computer win 7 posso usare ping serverquale funziona, e l'altro non può risolvere server. Comunque entrambi potevano fare un ping server.lanche non avevo capito bene.

Risulta che avevo incasinato alcune impostazioni (suffissi DNS) per non dover usare i nomi di dominio completi durante l'utilizzo della VPN di lavoro. Ho dovuto aggiungere il mio locale .lana quei suffissi per fare in modo che entrambi i computer funzionassero allo stesso modo.

Vai su Pannello di controllo> Rete e Internet> Connessioni di rete e fai clic con il pulsante destro del mouse sulla connessione di rete e premi Proprietà. Fai clic su Protocollo Internet versione 4 e premi il pulsante Proprietà. Quindi il pulsante Avanzate ... in questa nuova finestra. Vai alla scheda DNS, è qui che avevo aggiunto un suffisso DNS per il mio lavoro ma ne avevo bisogno anche per le mie normali connessioni domestiche.

Impostazioni TCP / IP avanzate


Mi sono imbattuto in una situazione simile su un server con un indirizzo IP statico. La prima voce in "Aggiungi questi suffissi DNS" era vuota E il "suffisso DNS per questa connessione" era vuoto. Altri server su cui funzionava avevano lo stesso "Aggiungi questi suffissi DNS" MA MAI "Popolato DNS per questa connessione" popolato.
Tim Lewis,

2

Mi sono imbattuto anche in questo problema. Il modo "più semplice" per risolverlo è stato semplicemente aggiungere un .alla fine del nome host. Tuttavia questo è piuttosto fastidioso. La maggior parte delle reti non lo richiede. Preferirei non dover dire a tutti gli altri sulla rete di farlo quando devono accedere alla stessa risorsa.

Stavo esaminando il suggerimento di Frederik Aalund come una possibile soluzione e ho notato che mi hanno suggerito di passare dall'opzione predefinita "Aggiungi i suffissi DNS primari e specifici della connessione". Questo mi ha fatto pensare che forse la mia rete fosse semplicemente leggermente configurata male.

Osservando le mie impostazioni DD-WRT, il "Dominio LAN" non è stato impostato. L'impostazione su una stringa arbitraria sembra aver risolto questo problema per tutti i client sulla mia rete senza avere una configurazione speciale su ogni macchina, la soluzione che volevo! :)


1

ho riscontrato questo quando siamo passati a Windows 7 da Windows XP, il problema era correlato a un problema di query DNS con più etichette di Windows 7.

Consenti il ​​suffisso DNS in aggiunta a query con nome multietichetta non qualificato - consulta:

http://computerstepbystep.com/allow_dns_suffix_appending_to_unqualified_multi_label_name_queries.html

Spero che sia di aiuto


2
Benvenuto in Super User! Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Luke canadese,

1

Se su mac os x potrebbe trattarsi di un problema di cache DNS:

Scarica la cache

sudo killall -HUP mDNSResponder
sudo dscacheutil -flushcache

OP chiede informazioni su Windows XP e la domanda è contrassegnata con Windows.
PL

Forse è utile per gli altri. Lascerò, la risposta è qui da più di 3 anni. Perché cancellare adesso?
Christian,

1

Lo sto raccogliendo perché mi ha infastidito l'anno scorso e forse ho trovato una soluzione alternativa.

Per me sembrava che qualche sistema di caching DNS all'interno del client Windows fosse difettoso. Windows 7 e 8.1 sono interessati da questo ... non posso più dire molto su Windows XP. ping non risolve il nome. non è la parte icmp che è importante ma la parte che risolve il nome). nslookup è progettato per interrogare il nameserver e fa esattamente quello e non risolve la gerarchia dei nomi di Windows.

Il riavvio del servizio dnscache ha aiutato ogni volta. Ma da quando ho disabilitato IPv6 su tutte le interfacce client, il problema non si è più verificato.

Saluti!


La disabilitazione di IPv6 potrebbe non essere una soluzione praticabile per tutti (e comunque sembra aneddotica). Tutto il resto che dici sembra essere già stato detto in questo thread (ad esempio, il commento di harrymc "A volte basta arrestare e riavviare il servizio risolve problemi DNS", due anni fa).
G-Man,

1

Potrei sbagliarmi su questo perché è basato sui miei giorni di kit di risorse NT4 dimenticati da tempo.

Come tariffa ricordo che PING utilizza Netbios / WINS e DNS (in questo ordine, almeno se non si specifica un nome di dominio completo).

WINS è sparito molti anni fa ma potresti comunque avere Netbios abilitato sulla tua interfaccia e PING quindi potrebbe usare netbios che potrebbe non darti alcun risultato. Soprattutto se il traffico sta passando un router da qualche parte.

Disabilita Netbios e Ping utilizzerà DNS come prima priorità e aggiungerà il DNS Surffic registrato sull'interfaccia al tuo nome host.


0

Ho appena avuto questo problema, ho trovato qualcosa di molto strano e sono riuscito a risolverlo Lol

Fondamentalmente, se nel file hosts sono presenti voci uguali a quelle dell'IP che il ping sta tentando di risolvere, fallirà.

Ad esempio, se nel tuo DNS hai un record per www.example.com - 10.0.0.20, ma poi hai una voce nel file hosts del tuo client, 10.0.0.20 qualcosa, non potrai effettuare il ping www .example.com

Strano eh


0

Nel mio caso, ciò che ha risolto questo problema è stato quello di aggiungere il dominio dell'host che stavo provando a eseguire il ping a un'opzione di criteri di gruppo denominata "Elenco ricerca suffissi DNS" .

La procedura in breve è questa: Apri gpedit.msce vai a Computer Configuration -> Administrative Templates -> Network -> DNS Client > DNS Suffix Search List, impostalo su "Abilitato" e aggiungi il nome di dominio all'elenco (l'elenco è vuoto per impostazione predefinita).

Una descrizione più dettagliata di questi passaggi è disponibile qui


0

Ho avuto lo stesso problema e ho scoperto che un'altra macchina aveva lo stesso indirizzo IP e questo lo stava causando.

IP cambiato in DHCP e tutto funzionava bene.


nslookup ha funzionato perché non ha bisogno di comunicare con l'altro host. ping ha bisogno di comunicare e ovviamente si rompe.
ndemou,

@ndemou: questa spiegazione non ha alcun senso. Sì, è compito del ping tentare di comunicare con l'altro host, ma il primo passo in questo processo è ottenere l'indirizzo IP dell'altro host. Se  ottiene l'indirizzo IP dell'altro host, te lo dice; se quindi non è in grado di comunicare con l'altro host, alla fine segnala "perdita al 100%". Ma, nella domanda, il ping non riesce nemmeno a ottenere un indirizzo. (Prova  ping bbbbbbb.come  ping bbbbbb.comper il confronto.)
Scott,

Hai ragione @Scott. Stavo modificando la risposta di Klaus e durante la lettura della sua descrizione del problema ho dimenticato che questo particolare problema con il ping è che non si risolve. Non posso esserne sicuro, ma scommetterei ora che Klaus non riceveva risposte.
ndemou,

0

Nessuna delle soluzioni qui ha funzionato per me. Quello che ha funzionato per me è stato ricollegarsi alla VPN del mio lavoro usando OpenVPN. Quindi dopo aver disconnesso tutto ha continuato a funzionare.

Credo che il problema fosse legato all'alimentazione mentre il mio computer era collegato a openVPN. L'unico modo in cui l'ho capito era usando WireShark. Ho notato che gli IP di destinazione per tutte le query andavano agli IP sulla rete interna del mio lavoro.


-1

ping utilizza il protocollo ICMP, in particolare 'Echo Request' e 'Echo Reply'.

molte reti disabilitano i programmi di utilità ICMP per prevenire attacchi o scansioni di base della rete. Ho scoperto che molti router acquistati sono dotati di un'impostazione per disabilitare il ping e utilità simili abilitate per impostazione predefinita.

puoi trovare ulteriori informazioni su ICMP qui:

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


8
Sì, ma prima di utilizzare ICMP, il dominio deve essere risolto come al solito in un indirizzo IP. Quindi questo non è il problema qui.
Michael,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.