Ti è mai capitato di configurare un server, lanciare un servizio e poi scoprire che, nonostante tutto sembri attivo, nulla risponde? Il sospetto ricade subito sul firewall o su una porta mal configurata. Invece di impazzire con log infiniti, esiste un modo rapido per capire cosa sta succedendo.

Il comando nc -zv è la risposta.

Netcat (spesso chiamato il "coltellino svizzero" del networking) permette di leggere e scrivere dati attraverso connessioni di rete. Ma quando aggiungiamo le flag -z e -v, trasformiamo questo strumento in uno scanner di porte leggerissimo e velocissimo.

Cosa significa esattamente nc -zv?

Andiamo al sodo. Se scriviamo semplicemente nc nel terminale, stiamo invocando Netcat. Ma per fare un test di connettività senza trasferire dati, abbiamo bisogno di istruzioni specifiche.

La flag -z è quella che fa il lavoro sporco: dice a Netcat di scansionare la porta senza inviare alcun dato. In pratica, tenta di stabilire una connessione (TCP handshake) e, non appena riceve risposta, chiude tutto. Non c'è scambio di informazioni, solo un check di "presenza".

La flag -v (verbose), invece, serve a noi umani. Senza di essa, Netcat starebbe zitto. Con -v, il terminale ci sputa fuori esattamente cosa sta succedendo: se la connessione è riuscita o se è stata rifiutata.

Un dettaglio non da poco: l'ordine delle flag può variare a seconda della versione di Netcat installata (BSD vs GNU), ma nc -zv è lo standard che funziona quasi ovunque.

Come usare il comando nella pratica

Immaginiamo di voler verificare se un server web remoto risponde sulla porta 80. Il comando sarà:

nc -zv google.com 80

Se tutto va bene, vedrai un messaggio simile a Connection to google.com port 80 [tcp/http] succeeded!. Semplice. Diretto.

Ma cosa succede se la porta è chiusa? Riceverai un errore di Connection refused o, peggio ancora, il comando rimarrà appeso in attesa (timeout). Quest'ultimo caso è il più interessante perché suggerisce che c'è un firewall che sta "droppando" i pacchetti invece di rifiutarli esplicitamente.

Proprio così. Una differenza tecnica che cambia completamente l'approccio al troubleshooting.

Scansionare range di porte: non una per volta

Fare un test su una singola porta è utile, ma se devi controllare un intero intervallo? Non puoi stare lì a digitare il comando cento volte. Fortunatamente, Netcat supporta i range.

Per testare tutte le porte da 20 a 80 di un IP specifico, usa questa sintassi:

nc -zv 192.168.1.10 20-80

Il terminale inizierà a scorrere le porte e ti segnalerà solo quelle aperte. È un metodo grezzo, non paragonabile alla potenza di Nmap, ma per un controllo rapido sul campo è imbattibile perché nc è preinstallato su quasi ogni distribuzione Linux o macOS.

UDP vs TCP: l'importanza della flag -u

Di default, nc -zv lavora con il protocollo TCP. Ma sappiamo bene che non tutto viaggia su TCP. Se devi testare un server DNS (porta 53) o un servizio DHCP, hai bisogno di UDP.

Aggiungendo la flag -u, cambi il protocollo:

nc -zuv 192.168.1.10 53

Attenzione però: i test UDP sono intrinsecamente meno affidabili. Poiché l'UDP è un protocollo senza connessione (connectionless), Netcat non riceve sempre una conferma di ricezione. Spesso, se non ricevi un errore "ICMP Port Unreachable", il comando ti dirà che la porta è aperta anche quando non lo è.

Un rischio da tenere a mente per evitare falsi positivi.

Perché usare nc -zv invece di Telnet o Nmap?

Molti amministratori di sistema usano ancora telnet per testare le porte. Funziona? Sì. È scomodo? Assolutamente.

Con telnet, se la connessione ha successo, rimani "dentro" la sessione e devi usare combinazioni di tasti strane (come Ctrl+]) per uscire. Netcat con -z entra ed esce in un millisecondo. È automatico.

E Nmap? Nmap è il re della scansione, non c'è dubbio. Ma installare Nmap su un server di produzione solo per fare un test veloce è spesso eccessivo o addirittura vietato dalle policy aziendali. Netcat è discreto, leggero e quasi sempre già presente.

Ecco un rapido confronto:

  • Telnet: Manuale, lento, richiede uscita manuale.
  • Nmap: Potentissimo, ma pesante e spesso non installato.
  • nc -zv: Rapido, automatico, ubiquitario.

Risoluzione dei problemi comuni

A volte lanci nc -zv e non ottieni i risultati sperati. Ecco i tre scenari più frequenti.

1. Timeout infinito: Se il comando non risponde per diversi secondi, è quasi certamente un firewall (iptables, ufw o un hardware esterno) che sta bloccando il traffico. Il pacchetto viene inviato ma non torna nulla. Nessun "Sì", nessun "No". Solo silenzio.

2. Connection Refused: Qui il server ha risposto. Ti ha detto chiaramente: "Ho ricevuto la tua richiesta, ma su questa porta non c'è nessun servizio in ascolto". In questo caso, il problema non è il firewall, ma il software (es. Apache o MySQL) che non è avviato correttamente.

3. Permesso negato: Se provi a scansionare porte basse (sotto la 1024) in modalità ascolto, avrai bisogno di privilegi di root. Per il semplice scanning con -z verso l'esterno, invece, non serve sudo.

Trucchi avanzati per chi vuole velocizzare

Se devi testare più server contemporaneamente, puoi combinare Netcat con un ciclo bash. Non è magia, è semplice scripting.

for ip in $(cat server_list.txt); do nc -zv $ip 80; done

Questo comando legge una lista di IP da un file e controlla se la porta 80 è aperta su ognuno di essi. Risparmi tempo, eviti errori di battitura e ottieni un report immediato.

Un altro consiglio: usa l'opzione -w per impostare un timeout specifico. Se non vuoi aspettare mezz'ora che una connessione fallisca, aggiungi -w 2 (per attendere massimo 2 secondi).

Esempio completo:

nc -zvw 2 192.168.1.50 443

In questo modo, se il server non risponde entro due secondi, Netcat passa oltre senza bloccare l'intero terminale.

Considerazioni finali sulla sicurezza

Usare nc -zv è un'operazione legittima di troubleshooting, ma ricorda che scansionare porte su reti non tue può essere interpretato come un tentativo di intrusione (reconnaissance). Gli IDS (Intrusion Detection Systems) moderni rilevano facilmente i pattern di scansione di Netcat.

Usalo con consapevolezza e solo su infrastrutture che gestisci o per le quali hai l'autorizzazione.

In fondo, la potenza di uno strumento non sta in ciò che può fare, ma nel modo in cui decidiamo di usarlo per risolvere un problema reale. E nc -zv è probabilmente lo strumento più efficiente per eliminare l'incertezza tra "il server è rotto" e "è solo una porta chiusa".