Netcat

Questo esercizio è dedicato a conoscere il comando netcat, che può essere un utile strumento per interagire con servizi in rete, e soprattutto per capire meglio come funzionano le comunicazione client / server.

Il comando netcat è l'equivalente "in rete" del comando cat, che è stato usato fino ad ora per stampare il contenuto di file di testo. Prima di procedere, conviene ricordare cosa fa esattamente cat:

Una cosa analoga succede con netcat. La differenza sostanziale è che questo comando si può usare per ascoltare su una porta, oppure per mandare pacchetti ad un server su qualche altro host (e anche in questo caso su una determinata porta). Nel primo caso, il comando stampa a video i dati che riceve, nel secondo invia quelli che vengono inseriti dall'utente (oppure mandanti in input con il simbolo |

Il comando netcat si può lanciare anche con la sua versione abbreviata nc, che d'ora in poi preferiremo.

Vediamo un primo esempio concreto: se lanciamo il comando nc telehack.com 23 possiamo usare il comando NetCat come una specie di telnet: si collega all'host che abbiamo sperimentato prima nell'esercizio sul telnet, e stampa a video tutto quello che quel server manda come risposta. Nel caso inserissimo dei caratteri, questi verrebbero inviato al server (che in questo specifico caso li ignorerebbe).

Il caso più interessante è quello in cui si usa NetCat per ascoltare su una porta specifica, e dunque per ricevere connessioni. A questo scopo, è necessario lanciare il comando

$ nc -l -p 8080 # Esempio per la porta 8080
È bene ricordare che solo le porte maggiori di 1024 possono essere aperte da utenti normali.
Ci si organizzi con un collega nello stesso gruppo per fare il seguente esperimento: Si provi a comunicare attraverso questo canale.

Ora che si è visto un primo esempio, è il momento di provare a fare un esercizio più avanzato. Ricapitoliamo il funzionamento del comando tar:

Si può usare il comando tar combinato con nc per spedire file fra calcolatori.
Anche questo esercizio deve essere fatto in coppia; un utente dovrà spedire dei file ad un altro, utilizzando tar e nc. In particolare:

Il comando ssh è un esempio di client che si collega al server SSH, e ci comunica utilizzando una porta prefissata. Vediamo ora come usare il comando nc per effettuare un esperimento inverso rispetto al precedente: fingere di essere il server SSH, e vedere cosa invia il comando ssh quando si connette.

Anche questo esercizio viene più facilmente se fatto in coppia. Questo esperimento mostra l'esempio simmetrico rispetto a quello predente, in cui ci siamo collegati ad SSH con telnet. Usando la risposta del server vista in precedenza potremmo provare ad avviare una connessione; anche in questo caso, fatto il primo passo non sapremmo però come procedere oltre, senza studiare il protocollo SSH. In ogni caso, con un po' di impegno, potreste essere in grado di farvi listare i protocolli crittografici disponibili sul server.