1 16/04/2026 8 min

Da hostname a IP in CMD: cosa stai davvero interrogando

Su Windows, “trovare l’indirizzo IP da CMD usando l’hostname” sembra una richiesta banale, ma in pratica stai scegliendo quale sorgente fidarti: DNS, cache locale, risoluzione NetBIOS in certi ambienti legacy, oppure un record che non esiste più. Se il nome è corretto e la rete è sana, il comando giusto ti restituisce l’IP in pochi secondi. Se invece il risultato è ambiguo o vuoto, il problema non è il comando: è il livello di risoluzione che sta fallendo.

La via più rapida da Prompt dei comandi è nslookup. La via più utile, quando vuoi capire perché un nome non si risolve, è affiancare ping, ipconfig /displaydns e, se serve, PowerShell. Il punto non è solo “vedere un numero”, ma capire se quel numero è quello atteso.

Il comando più diretto: nslookup

Se hai un hostname, il comando più lineare è questo:

nslookup example.com

Il risultato tipico mostra il server DNS interrogato e una o più righe con l’indirizzo IP associato al nome. Se il record esiste, l’output contiene qualcosa del genere:

Server:  dns1.provider.local
Address:  192.0.2.53

Name:    example.com
Address: 93.184.216.34

Qui il vantaggio è pratico: nslookup ti dice anche quale DNS ha risposto. Se il dominio risolve da un resolver pubblico ma non dal DNS aziendale, hai già isolato il problema in un layer preciso. In ambienti con split DNS, questa distinzione evita diagnosi sbagliate.

Se vuoi interrogare un DNS specifico, basta indicarlo esplicitamente:

nslookup example.com 8.8.8.8

Questo è utile quando sospetti che il resolver locale stia servendo una risposta vecchia, filtrata o semplicemente errata. Se il DNS pubblico risolve e quello interno no, il problema non è l’hostname: è la configurazione del resolver interno, il forwarder o il record mancante nella zona corretta.

Quando ping aiuta e quando inganna

Molti usano ping per “trovare l’IP”, ma in realtà il comando serve più a verificare che il nome venga risolto e che l’host risponda al traffico ICMP. La sintassi minima è questa:

ping example.com

Se il nome viene risolto, nella prima riga vedi l’IP tra parentesi quadre o tonde, a seconda della versione di Windows. Però attenzione: un host può essere raggiungibile via HTTP/HTTPS e non rispondere a ping, perché l’ICMP può essere filtrato da firewall, security group o policy di rete. Quindi ping è un indizio, non una prova definitiva di disponibilità del servizio.

Se il tuo obiettivo è solo vedere a quale IP corrisponde il nome, nslookup resta la scelta più pulita. Se invece vuoi capire se il nome si risolve e il nodo risponde, ping è un test rapido ma parziale.

Verificare la cache DNS locale prima di cambiare strade

Su un client Windows, il resolver locale può aver memorizzato una risposta precedente. Prima di concludere che il DNS “sbaglia”, conviene guardare la cache con:

ipconfig /displaydns

Qui cerchi il nome host interessato e l’eventuale IP associato. Se trovi un record vecchio, hai una spiegazione immediata per cui il sistema continua a puntare a un indirizzo non più valido. In quel caso, puoi svuotare la cache locale con:

ipconfig /flushdns

Il flush è un’azione reversibile e a basso rischio: non tocca il DNS server, solo la cache del client. Dopo il flush, rilanci nslookup o ping e verifichi se la risposta cambia. Se non cambia, il problema è altrove: record DNS errato, TTL ancora valido sul resolver upstream, oppure nome digitato male.

PowerShell da CMD: il colpo più preciso quando vuoi solo l’IP

Anche se la richiesta parla di CMD, su Windows la soluzione più pulita spesso passa da PowerShell richiamata dal prompt. Per ottenere gli indirizzi IPv4 e IPv6 associati a un hostname, puoi usare:

powershell -Command "[System.Net.Dns]::GetHostAddresses('example.com') | ForEach-Object { $_.IPAddressToString }"

Questo approccio restituisce direttamente gli indirizzi risolti dal sistema. È comodo quando vuoi un output più pulito rispetto a nslookup e ti interessa integrare il risultato in uno script batch o in un controllo operativo. Se il nome ha più record A o AAAA, vedrai più IP. Se c’è un solo record, ne vedrai uno solo.

Se lavori in automazione, questo metodo è utile perché ti permette di gestire il risultato in modo programmatico. Il limite è che dipende dal resolver configurato nel sistema, quindi riflette la stessa infrastruttura DNS del client. Se vuoi confrontare la risposta con un server specifico, resta preferibile nslookup con DNS esplicito.

Hostname, FQDN e alias: non tutti i nomi si comportano allo stesso modo

Un errore comune è trattare qualsiasi stringa come se fosse un FQDN completo. In realtà, se digiti solo un hostname corto, Windows può applicare suffissi DNS di ricerca e trasformarlo in un nome diverso da quello che avevi in mente. Per esempio, web01 può diventare web01.azienda.local o web01.example.com in base alla configurazione del client.

Questo significa che il risultato di risoluzione può essere corretto ma riferito a un record diverso da quello che immaginavi. Se hai dubbi, usa sempre il nome completo. In caso di ambienti misti, controlla anche il suffisso DNS configurato nel sistema e l’ordine di ricerca dei resolver.

Se il nome è un alias CNAME, il resolver segue la catena fino al record finale. In pratica, puoi chiedere example.com e ottenere l’IP di un target diverso, magari dietro CDN o bilanciatore. Non è un problema: è il comportamento previsto. Ma se stai cercando un server specifico e trovi un IP “strano”, verifica se il nome è un alias e non un record A diretto.

Quando il nome risolve ma l’IP non è quello che ti aspetti

Questa è la situazione più interessante in pratica: il comando funziona, ma l’IP non coincide con quello atteso. Le cause più frequenti sono poche e abbastanza riconoscibili.

  1. DNS propagato in modo diverso tra resolver: il client interroga un DNS che ha ancora un record vecchio o una zona non allineata.
  2. Load balancing o CDN: il nome risolve verso un front-end, non verso il server origin.
  3. Host file locale: una voce in `C:\Windows\System32\drivers\etc\hosts` sovrascrive la risoluzione DNS.

Per falsificare rapidamente la prima ipotesi, confronta la risposta del DNS locale con un resolver pubblico:

nslookup example.com
nslookup example.com 1.1.1.1

Se i due output differiscono, hai un problema di visibilità DNS o di cache a monte. Per la seconda ipotesi, la verifica più semplice è controllare se il record punta a un servizio frontato da CDN o bilanciatore. Per la terza, basta cercare il nome nel file hosts e vedere se esiste una mappatura manuale.

Controllo pratico del file hosts

Se sospetti un override locale, apri il file hosts con un editor con privilegi amministrativi e cerca il nome interessato. Il percorso standard è:

C:\Windows\System32\drivers\etc\hosts

Una riga come questa cambia tutto il comportamento di risoluzione locale:

203.0.113.10 example.com

Se il file contiene un’associazione del genere, il sistema userà quell’IP prima di interrogare il DNS. È una scorciatoia utile in test, ma in produzione è una fonte classica di confusione quando qualcuno dimentica di rimuoverla. La correzione è semplice: rimuovi o commenta la riga, salva il file e rilancia la risoluzione. Se vuoi evitare ambiguità, documenta sempre chi ha inserito l’override e per quale finestra temporale.

Un flusso operativo che non perde tempo

Se l’obiettivo è arrivare all’IP con il minor numero di passaggi, il flusso più efficace da CMD è questo:

  1. Usa nslookup hostname per vedere subito il record risolto e il DNS interrogato.
  2. Se il risultato è inatteso, confrontalo con nslookup hostname 1.1.1.1 o un resolver noto.
  3. Se il nome sembra “vecchio”, verifica ipconfig /displaydns e, se serve, esegui ipconfig /flushdns.
  4. Se il nome è ancora ambiguo, controlla il file hosts locale.
  5. Se ti serve un output pulito per script, usa la chiamata PowerShell da CMD.

Questo ordine ha un vantaggio operativo: parte dalle evidenze e tocca solo dopo le possibili cause locali. In altre parole, non scambi un problema di DNS per un problema del servizio, e non perdi tempo a inseguire un IP che in realtà è stato sovrascritto da una cache o da un override manuale.

Se l’hostname non esiste, il comando giusto te lo dice subito

Quando il nome è sbagliato o il record non è pubblicato, nslookup restituisce un errore chiaro, spesso del tipo “Non-existent domain” o simile. In quel caso non serve forzare ulteriori tentativi sul client: devi correggere il nome, creare il record DNS oppure attendere la propagazione se il record è appena stato pubblicato.

Se invece il nome esiste ma non risolve da un certo punto della rete, il problema è quasi sempre di visibilità o delega DNS. Qui il dettaglio importante è conservare l’evidenza: output del comando, DNS interrogato, ora del test, eventuale differenza tra resolver interni ed esterni. Senza questi dati si passa rapidamente dal troubleshooting alla divinazione.

Nota operativa per ambienti Microsoft

Su reti Windows gestite, la risoluzione dei nomi può dipendere anche da policy, suffissi di ricerca, DNS del dominio e, in certi casi, da componenti legacy che convivono con il DNS moderno. Per questo, quando un hostname non torna, il test non va letto come “funziona/non funziona” in astratto: va letto nel contesto del client che stai usando.

Se stai operando su un server o su una postazione critica, conviene annotare almeno tre cose: nome completo interrogato, output di nslookup, e presenza o assenza di override nel file hosts. Con questi tre elementi, nella maggior parte dei casi capisci subito se l’IP trovato è quello corretto oppure no.

In sintesi pratica: se vuoi solo l’IP, usa nslookup. Se vuoi capire perché non lo ottieni, affianca cache locale, DNS specifico e file hosts. Se vuoi automatizzare, passa da PowerShell richiamata dal prompt. Il resto è quasi sempre rumore operativo.