Uno dei motivi per cui GNU/Linux è molto apprezzato è la sua versatilità con le reti. Per di più la sua stabilità lo rende uno strumento molto affidabile in questo senso. E non mancano anche strumenti di analisi: ne è un esempio NTop del quale vi abbiamo già parlato (cfr. Articolo:Il progetto Ntop). Ma ne esistono molti altri, basti pensare ad nmap.
Un'altro stumento molto conosciuto e usato in ambito di reti è Netcat. Come dice la parola stessa questo programma, conosciuto anche col nome abbreviato di nc, è una specie di "cat" per le reti, un'utility che vi permette di leggere e scrivere dati da e verso una rete. Ma non solo. Netcat è uno strumento potentissimo, molto versatile, che vi permetterà, ad esempio, di creare delle applicazioni di tipo client server con dei semplici script di shell.
Prima di continuare sarà necessario scaricare e compilare netcat. È probabile che sia già stato installato dalla vostra distribuzione, ma solitamente i binari che sono distribuiti sono compilati senza il supporto a un'opzione (la -e) molto utile e comoda, ma anche molto pericolosa. Scaricate quindi il programma in codice sorgente dal nostro sito (si tratta di una versione, la 1.10, patchata e distribuita da Debian). Alla versione in questione è stata aggiunta la riga #define GAPING_SECURITY_HOLE nel file netcat.c che abilita l'opzione -e. Decomprimete il file con:
lnxbox1:~# tar xfvz netcat-1.10.tar.gz
Entriamo nella directory appena creata:
lnxbox1:~# cd netcat-1.10
E lanciamo make linux che compilerà netcat:
lnxbox1:~/netcat-1.10# make linux
A questo punto se tutto è andato per il verso giusto ci ritroveremo con un file chiamato nc nella directory ~/netcat-1.10 . Vi consiglio di lasciarlo lì dove è, di non sovrascrivere una eventuale versione già presente, per via della opzione -e. La pericolosità di questa opzione consiste nella possibilità di eseguire dei comandi che possano nascondere al loro interno dei pericolosi bug.
Avete presente il messaggio che appare se si fa un finger a zeus.kernel.org? Se non sapete di cosa si sta parlando, da console scrivete: finger @zeus.kernel.org . Vi apparirà un messaggio con lo stato dello sviluppo delle varie versioni di Linux. È possibile fare qualcosa di analogo con molta semplicità utilizzando netcat. Ad esempio creiamo uno script (dandogli ad esempio il nome script.sh) del tipo:
---INIZIO---
#!/bin/bash
# Primo script per netcat
echo "Questo è solo un esempio di testo visualizzato da netcat!"
exit 0
---FINE---
Salviamo il file e rendiamolo eseguibile con:
lnxbox1:~# chmod +x script.sh
A questo punto lanciamo nc con le seguenti opzioni:
lnxbox1:~# nc -l -p 79 -e ./script.sh
Supponendo che il file script.sh sia nella stessa directory e che la porta 79 (quella del finger) non sia già occupata dal fingerd, questo comando metterà in ascolto (-l) netcat sulla porta 79 (-p 79) facendogli eseguire ./script.sh (-e ./script.sh) a collegamento avvenuto. Riguardo la scelta della porta è bene ricordare che solo all'amministratore (root) è concesso l'utilizzo delle porte inferiori alla 1024.
A questo punto possiamo eseguire il comando:
lnxbox1:~# finger @localhost
E, come per magia, vedremo visualizzata la riga:
Questo è solo un esempio di testo visualizzato da netcat!
Ovviamente questo è solo un esempio per darvi un'idea. È possibile elaborare un pò di più lo script per permettere al nostro server "fatto in casa" di accettare degli input e renderlo così un pò più interattivo.
Ad esempio vediamo cosa farà con il seguente script:
---INIZIO---
#!/bin/bash
# Secondo script per netcat
echo "Questo è un semplice programma che fa delle somme"
echo "Inserisci il primo numero" read addendo1
echo "Ora inserisci il secondo" read addendo2
echo "La somma è $[$addendo1+$addendo2]"
exit 0
---FINE---
Salviamo il file (ad esempio con nome script2.sh), rendiamolo eseguibile come abbiamo fatto nel caso precedente e lanciamo nuovamente nc con le stesse opzioni ma cambiando ovviamente il nome dello script:
lnxbox1:~# nc -l -p 79 -e ./script2.sh
A questo punto usiamo sempre nc per collegarci alla porta 79 del nostro PC:
lnxbox1:~# nc localhost 79
Come è facile aspettarsi, lo script in esecuzione ci chiederà due numeri e ci visualizzerà la somma.
Ma non finisce qui. Netcat potrebbe tornarci utile anche per trasferire file da un computer a un altro. Ad esempio per copiare il file fileorigine.txt da un PC con IP 192.168.0.1 a uno con IP 192.168.0.2 lanciamo netcat in "ascolto" pronto a ricevere il file sul PC dove vorremo spedirlo, in questo modo:
lnxbox1:~# nc -l -p 11111 > filecopiato.txt
E "spedirlo" sul PC di destinazione con il comando
lnxbox2:~# nc 192.168.0.2 11111 < fileorigine.
Premiamo CTRL+C sul PC di origine una volta trasferito il file. Assicuriamoci però prima che le dimensioni corrispondano, in modo da non troncare a metà il trasferimento. In questo caso è possibile usare anche l'opzione -w 3 che imposta il timeout a 3 secondi.
Come se non bastasse, tra le innumerevoli applicazioni di Netcat c'è anche quella di portscanner. Un semplice esempio in questo senso può essere questo:
lnxbox1:~# nc -v -w 2 -z localhost 20-30
Fa la scansione dalla porta 20 alla 30 incluse sul computer che si sta usando (cambiate localhost con un qualsiasi altro hostname o IP che volete scansionare, ma mi raccomando, non abusate di questi strumenti!). L'opzione -v controlla il livello di informazioni che si desiderano avere come output (-vv ci fornisce il massimo livello), mentre -w 2 imposta il timeout a 2 secondi e l'opzione -z viene usata per velocizzare la scansione in quanto limita notevolmente la quantità di dati che vengono inviati.
In questo articolo abbiamo esaminato solo alcune delle potenzialità di Netcat. Come avete potuto vedere si tratta di uno strumento molto versatile e flessibile. Il suo uso naturale è all'interno di script di shell. Basterà un pò di fantasia e una discreta conoscenza di programmazione in bash scripting per realizzare delle vere e proprie applicazioni client/server e, perché no inventarsi un nuovo protocollo. Ma attenzione anche a cosa fate: siate prudenti, Netcat può essere molto comodo, ma se usato incautamente può rivelarsi anche molto pericoloso per la sicurezza del vostro sistema!