Comando nc in Linux: verificare porte TCP e interpretare i risultati UDP
nc (Netcat) apre connessioni TCP (Transmission Control Protocol) o usa datagrammi UDP (User Datagram Protocol) per inviare e ricevere dati. Puoi usarlo per verificare rapidamente se una porta TCP di un sistema che amministri accetta connessioni; questo controllo non prova da solo che l'applicazione funzioni correttamente.
Su Linux il nome nc può indicare implementazioni diverse, fra cui varianti derivate da OpenBSD netcat e Nmap Ncat. -z serve per un controllo senza scambio ordinario di dati applicativi, mentre -v aggiunge diagnostica. Sintassi, messaggi e timeout dipendono dall'implementazione installata.
Sintassi e implementazione installata
nc [options] host port
Questa riga descrive la sintassi: sostituisci host e port con la destinazione e la porta da controllare, senza copiare le parentesi quadre. Il protocollo predefinito degli esempi è TCP. Un nome di host può richiedere una risoluzione DNS, mentre un indirizzo numerico evita quella ricerca diretta.
Prima di usare le opzioni controlla il pacchetto installato, nc -h e man nc. Se stai usando Ncat, consulta anche ncat --help e il suo manuale. Non trasferire automaticamente opzioni da una variante all'altra: persino una stessa lettera può avere significati differenti.
Controllare porte del proprio computer
Porta SSH locale. Per provare una connessione TCP alla porta 22:
nc -vz 127.0.0.1 22
127.0.0.1 è l'indirizzo di loopback IPv4 del contesto di rete in cui esegui il comando. La porta 22 è comunemente usata da SSH (Secure Shell), ma non è garantito che sul tuo computer ci sia un servizio in ascolto. Il controllo apre una connessione TCP senza inviare una richiesta applicativa: genera comunque pacchetti di rete e può comparire nei log.
Una riuscita sul loopback non dimostra che la stessa porta sia raggiungibile da altre macchine. Il servizio potrebbe essere associato soltanto a un indirizzo locale; inoltre firewall e percorsi esterni possono differire. In contenitori o spazi dei nomi di rete, il loopback riguarda quel contesto, non automaticamente l'host fisico.
Attesa della connessione. Per evitare un'attesa indefinita su una porta locale:
nc -w 3 -vz 127.0.0.1 80
Non aspettarti che la durata totale sia sempre esattamente tre secondi. Nel manuale OpenBSD, -w riguarda connessioni non stabilite e inattività; in Ncat è un timeout di connessione, mentre l'inattività usa un'opzione separata. Con più indirizzi o operazioni il tempo osservato può differire. La porta 80 qui è soltanto un esempio: non presuppone un server web locale.
Connessione diretta. Senza -z puoi osservare il saluto eventualmente inviato dal servizio:
nc -v 127.0.0.1 22
Un server SSH può inviare una riga di identificazione; un altro servizio può attendere prima dei dati dal client e non stampare nulla. L'assenza di testo non prova che la connessione sia fallita. Il testo digitato può essere inviato al servizio: per questa osservazione evita di inserire comandi o credenziali e termina con Ctrl+C. Questa connessione non esegue un accesso SSH completo.
Interpretare una connessione riuscita, rifiutata o scaduta
La stessa forma può essere usata su un host esterno soltanto nell'ambito autorizzato:
nc -vz example.com 443
example.com illustra la sintassi: usa una destinazione per la quale hai il permesso di effettuare la verifica. Non è necessario eseguire la richiesta pubblica per comprendere l'esempio. Una possibile riga di successo, non il risultato attuale garantito, è:
Connection to example.com 443 port [tcp/https] succeeded!
La riga segnala che la connessione TCP è riuscita. La dicitura https associata alla porta non dimostra che sia stata negoziata una sessione TLS (Transport Layer Security), verificato un certificato o ricevuta una risposta HTTP corretta. Per verificare questi livelli usa un client appropriato, per esempio curl per controllare una risposta HTTPS.
- Connessione rifiutata: la richiesta ha ricevuto un rifiuto. Può mancare un processo in ascolto oppure una regola di rete può respingere attivamente il collegamento; il messaggio da solo non identifica la causa.
- Timeout: il tentativo non si è concluso nel limite applicabile. Filtri che scartano pacchetti, percorso e stato del server sono ipotesi da verificare, non conclusioni già dimostrate.
- Errore di risoluzione: se hai usato un nome, verifica prima che sia stato risolto. Non interpretare una ricerca DNS fallita come prova che la porta TCP sia chiusa.
Confronta sempre indirizzo, famiglia IP, protocollo e punto da cui esegui la prova. Sul sistema locale puoi controllare anche i socket in ascolto con ss; non modificare firewall o servizi soltanto per far scomparire un messaggio prima di aver individuato la causa.
Opzioni principali e differenze dei timeout
| Opzione | Uso |
|---|---|
-z |
Controlla la connessione senza uno scambio ordinario di dati applicativi. |
-v |
Mostra messaggi diagnostici più dettagliati. |
-w secondi |
Imposta un timeout il cui significato dipende dall'implementazione. |
-u |
Usa UDP al posto di TCP. |
-l |
Attende connessioni in modalità di ascolto, con sintassi specifica della variante. |
secondi è un segnaposto. Nel nc documentato da OpenBSD, -w viene ignorato con -l: non usarlo come garanzia che un processo in ascolto si chiuderà entro quel tempo. In Ncat, -w limita il tentativo di connessione e -i o --idle-timeout gestisce l'inattività. Verifica il manuale locale prima di preparare uno script.
La modalità di ascolto crea un endpoint locale e può esporlo ad altre macchine, secondo indirizzo di bind e regole di rete. Gli esempi di questa guida usano la modalità client; per un listener scegli consapevolmente indirizzo e porta e interrompilo quando hai finito.
Perché un risultato UDP richiede più cautela
UDP non esegue l'handshake di TCP. L'assenza di una risposta può dipendere dal servizio, da filtri o dalla perdita di pacchetti e non basta a distinguere una porta aperta da una chiusa. Anche una richiesta senza dati applicativi significativi può produrre traffico.
Il manuale OpenBSD avverte esplicitamente che la combinazione -uz riferisce successo indipendentemente dallo stato della macchina di destinazione. Quel messaggio non è quindi una prova di raggiungibilità del servizio UDP. Usa una richiesta valida per il protocollo del servizio e, nel contesto autorizzato, confronta eventuali risposte e osservazioni dal lato server; non generalizzare automaticamente il comportamento di una variante a tutte le altre.
Domande frequenti
nc e ncat sono lo stesso programma?
Sono strumenti della famiglia Netcat, ma possono essere implementazioni diverse. Controlla il pacchetto e l'aiuto del programma effettivamente eseguito. Un comando trovato per OpenBSD netcat non è automaticamente compatibile con Nmap Ncat o con altre varianti.
Documentazione di riferimento
Il manuale ufficiale di nc di OpenBSD descrive opzioni e limiti della propria implementazione, compreso il caso UDP. La guida ufficiale di riferimento di Nmap Ncat permette di confrontare timeout e modalità operative; la documentazione locale resta il riferimento per il pacchetto installato sulla tua distribuzione.




