Netcat o nc è un'utilità di rete per il debug e l'analisi della rete.
Questa utilità può essere utilizzata per creare connessioni TCP/UDP e analizzarle. L'uso più grande di questa utilità è negli script in cui abbiamo bisogno di gestire i socket TCP/UDP.
In questo articolo impareremo a conoscere il comando netcat da alcuni esempi pratici.
1. Netcat in un'architettura server-client
L'utilità netcat può essere eseguita in modalità server su una porta specifica in attesa di connessioni in entrata.
$ nc -l 2389
Inoltre, può essere utilizzato in modalità client cercando di connettersi sulla porta (2389) appena aperta
$ nc localhost 2389
Ora, se scriviamo del testo sul lato client, raggiunge il lato server. Ecco la prova :
$ nc localhost 2389 HI, server
Sul terminale su cui è in esecuzione il server:
$ nc -l 2389 HI, server
Quindi vediamo che l'utilità netcat può essere utilizzata nella comunicazione socket del server client.
2. Usa Netcat per trasferire file
L'utilità netcat può essere utilizzata anche per trasferire file. Sul lato client, supponiamo di avere un file chiamato 'testfile' contenente:
$ cat testfile hello test
e sul lato server abbiamo un file vuoto 'test'
Ora eseguiamo il server come :
$ nc -l 2389 > test
ed esegui il client come :
cat testfile | nc localhost 2389
Ora, quando vediamo il file "test" alla fine del server, vediamo:
$ cat test hello test
Quindi vediamo che i dati del file sono stati trasferiti dal client al server.
3. Netcat supporta i timeout
Ci sono casi in cui non vogliamo che una connessione rimanga aperta per sempre. In tal caso, tramite l'interruttore '-w' possiamo specificare il timeout in una connessione. Quindi, dopo i secondi specificati insieme al flag -w, la connessione tra il client e il server viene terminata.
Server :
nc -l 2389
Cliente :
$ nc -w 10 localhost 2389
La connessione di cui sopra verrebbe interrotta dopo 10 secondi.
NOTA:non utilizzare il flag -w con il flag -l sul lato server poiché in tal caso il flag -w non provoca alcun effetto e quindi la connessione rimane aperta per sempre.
4. Netcat supporta la connettività IPV6
Il flag -4 o -6 specifica che l'utilità netcat deve utilizzare quale tipo di indirizzi. -4 forza nc a usare l'indirizzo IPV4 mentre -6 forza nc a usare l'indirizzo IPV6.
Server :
$ nc -4 -l 2389
Cliente :
$ nc -4 localhost 2389
Ora, se eseguiamo il comando netstat, vediamo :
$ netstat | grep 2389 tcp 0 0 localhost:2389 localhost:50851 ESTABLISHED tcp 0 0 localhost:50851 localhost:2389 ESTABLISHED
Il primo campo nell'output sopra conterrebbe un suffisso "6" nel caso in cui vengano utilizzati gli indirizzi IPV6. Poiché in questo caso non lo è, quindi viene stabilita una connessione tra server e client utilizzando indirizzi IPV4.
Ora, se forziamo nc a utilizzare gli indirizzi IPV6
Server :
$ nc -6 -l 2389
Cliente :
$ nc -6 localhost 2389
Ora, se eseguiamo il comando netstat, vediamo :
$ netstat | grep 2389 tcp6 0 0 localhost:2389 localhost:33234 ESTABLISHED tcp6 0 0 localhost:33234 localhost:2389 ESTABLISHED
Quindi ora un suffisso "6" con "tcp" mostra che nc ora utilizza indirizzi IPV6.
5. Disabilita la lettura da STDIN in Netcat
Questa funzionalità può essere ottenuta utilizzando il flag -d. Nell'esempio seguente, abbiamo utilizzato questo flag sul lato client.
Server :
$ nc -l 2389
Cliente :
$ nc -d localhost 2389 Hi
Il testo "Ciao" non verrà inviato all'estremità del server poiché utilizzando l'opzione -d la lettura da stdin è stata disabilitata.
6. Forza il server Netcat a rimanere attivo
Se il client netcat è connesso al server e dopo qualche tempo il client viene disconnesso, normalmente anche il server netcat viene terminato.
Server :
$ nc -l 2389
Cliente :
$ nc localhost 2389 ^C
Server :
$ nc -l 2389 $
Quindi, nell'esempio sopra, vediamo che non appena il client è stato disconnesso, anche il server è stato terminato.
Questo comportamento può essere controllato utilizzando il flag -k sul lato server per forzare il server a rimanere attivo anche dopo che il client si è disconnesso.
Server :
$ nc -k -l 2389
Cliente :
$ nc localhost 2389 ^C
Server :
$ nc -k -l 2389
Quindi vediamo che usando l'opzione -k il server rimane attivo anche se il client si è disconnesso.
7. Configura Netcat Client per rimanere attivo dopo EOF
Il client Netcat può essere configurato per rimanere attivo dopo la ricezione di EOF. In uno scenario normale, se il client nc riceve un carattere EOF, termina immediatamente, ma questo comportamento può essere controllato anche se viene utilizzato il flag -q. Questo flag prevede un numero che rappresenta il numero di secondi di attesa prima che il client termini (dopo aver ricevuto EOF)
Il client dovrebbe essere avviato come :
nc -q 5 localhost 2389
Ora, se il client riceve mai un EOF, attenderà 5 secondi prima di terminare.
8. Usa Netcat con il protocollo UDP
Per impostazione predefinita, tutti i socket creati dall'utilità nc sono protocolli TCP, ma questa utilità funziona anche con il protocollo UDP. Per abilitare il protocollo UDP viene utilizzato il flag -u.
Server :
$ nc -4 -u -l 2389
Cliente :
$ nc -4 -u localhost 2389
Ora, sia il server che il client sono configurati per utilizzare il protocollo UDP. Ciò può essere confermato dal seguente comando netstat. Quindi vediamo che questa connessione ora utilizza il protocollo UDP.
$ netstat | grep 2389 udp 0 0 localhost:42634 localhost:2389 ESTABLISHED