Netcat è uno strumento molto potente che permette di eseguire delle operazioni di I/O con protocolli TCP e UDP.

Riferendomi alla versione per Windows, per ottenere un server in ascolto su una specifica porta basta scrivere

nc -L -p 2000

In questo caso utilizzo Netcat come server, il -l indica “listen” e -p indica la porta da aprire; nel caso specifico ho utilizzato l'opzione -L (specifica della versione per Windows) in quanto Netcat esce al chiusura della connessione. Provate ad esempio

nc -l -p 2000

vedrete che l'esecuzione termina alla prima stringa ricevuta, questo perchè per ogni riga di log eseguiamo ogni volta la connessione al server.
Su Linux questo può essere risolto con un semplice script:

#!/bin/bash
while true;
do nc -l 2000
done

Nel provarlo su Linux ho notato che, con la versione che utilizzavo, il -p non è necessario: nel proseguo specificherò sempre il -p che sarà eventualmente da togliere se non accettato dalla vostra versione.

Connessione client-server
Abbiamo visto come predisporre un semplice server, ma netcat può essere utilizzato anche come client, così come telnet. Lanciate il server

nc -l -p 2000

Quindi eseguite (da un'altra shell o prompt dei comandi):

nc localhost 2000

Otterrete una connessione fra client e server: tutto quello che scriverete sull'uno verrà spedito all'altro.
Se fosse tutto qui ci sarebbe poco di utile, vediamo allora qualche utile funzionalità (sia mai che queste possano trarvi d'impaccio in qualche situazione delicata).

Trasferimento files

Netcat mette in comunicazione lo stdin e stdout di due macchine in rete: il nome stesso fa capire che il funzionamento di base riprende quello del tool cat di Unix (anche se poteva starci bene come “gatto delle reti”).

Lanciate il server

nc -l -p 2000 > ricevuto.txt

(notare che qui ho utilizzato -l, e non -L, in modo che alla fine del trasferimento il programma termini) quindi predisponete un file spedito.txt da inviare ed eseguite:

nc -w1 localhost 2000 < spedito.txt

In ricevuto.txt vi ritroverete il contenuto del file spedito.txt, facile vero? In realtà ho dovuto aggiungere il parametro -w1 che indica che dopo 1 secondo di inattività il socket venga chiuso: omettendo tale parametro, per terminare la connessione non vi è altro modo che dare Control-C.

Consolle remota

Avete necessità di accedere al prompt dei comandi di una macchina remota? Lanciate netcat utilizzando l'opzione -e che permette di specificare un programma da lanciare al ricevimento della connessione:

nc -l -p 2000 -e cmd.exe

(su Linux basta sostituire /bin/bash a cmd.exe)

dalla vostra postazione lanciate

nc nomemacchina 2000

e avrete accesso alla macchina remota; per uscirne è sufficiente digitare exit.
Ho provato questa stessa cosa sotto Linux: per il funzionamento dell'opzione -e è necessario ricompilare attivando l'opzione GAPING_SECURITY_HOLE. Molto probabilmente se utilizzate un netcat precompilato, già presente nelle principali distribuzioni Linux, questa opzione di compilazione non è attiva quindi dovrete procurarvi i sorgenti e ricompilare.

Conclusioni
Quelle elencate qui sopra sono solo alcune delle funzionalità di questo utilissimo programma: quello che vi suggerisco è di scaricare questo tool e lanciare nc -h ed iniziare ad esplorare le opzioni.