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
:
- Quando viene lanciato senza argomenti, il comando
cat
legge l'input dell'utente, e lo ristampa uguale riga per riga. Si provi a lanciarecat
e ad inserire alcune righe di testo, per verificarne l'effetto. Si termini il comando conCTRL + C
. - Quando viene specificato uno (o più) file, il comando
cat
legge da quello, invece che direttamente dall'utente. Usando la redirezione con>
è possibile scrivere su dei file
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.
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.
- Uno studente esegue il comando
nc -l -p NNNN
sulla macchina in cui si trova, doveNNNN
è una porta scelta a piacere. Attenzione, questo comando potrebbe dare errore nel caso la porta fosse già impegnata, ad esempio perché c'é un servizio aperto su quella porta, o qualche altro studente che sta facendo l'esercizo. - Il secondo studente esegue il comando
nc mathsgaloreN NNNN
per collegarsi al server del primo. A quel punto, si sarà aperto un canale di comunicazione in cui sarà possibile scambiarsi dei messaggi.
Ora che si è visto un primo esempio, è il momento di provare a fare un esercizio più
avanzato. Ricapitoliamo il funzionamento del comando tar
:
- Il comando
tar -c file1 file2 cartella1 cartella2 ...
permette di impacchettare più file e cartelle nello stesso file; se l'output non viene specificato con l'opzione-f miofile.tar
, come abbiamo fatto la settimana scorsa, il risultato viene stampato sul terminale (provare, ma con criterio! non vorrete un file enorme e binario stampato sul vostro schermo). - In maniera analoga, il comando
tar -x
estrae un file in formato tar nella directory corrente. Se il file non viene specificato con-f nomefile.tar
, allora ci si aspetta che venga inserito dall'utente.
tar
combinato con nc
per
spedire file fra calcolatori.
tar
e nc
.
In particolare:
- L'utente ricevente apre un server su una porta concordata, e manda
tutto l'output ricevuto in pipe al comando
tar -x -v
; il flat-x
indica a tar di estrarre i file, e-v
di stampare la lista dei file estratti. Questo si può ottenere con il comando (ad esempio):$ nc -l -p 1234 | tar -x -v
- L'utente che invia i file li comprime con tar, e li manda in input con
il simbolo
|
al comandonc mathsgaloreN 1234
, dovemathsgaloreN
è il PC di destinazione, e1234
la porta scelta.
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.
- Si apra un server con netcat su una porta a scelta
- Da un'altra macchina (o anche dalla stessa), si provi ad aprire
un collegamento SSH dicendo ad SSH di non utilizzare la porta 22,
ma l'altra porta su cui si è aperto il server. Per fare questo,
si può usare il flag
-p
di SSH.