Nel presentare un articolo precedente ho sviluppato un semplice server TCP/IP che permetteva di raccogliere messaggi di log provenienti da un'applicazione.
Questa fatica (minima per la verità, mi è stato sufficiente copiare e incollare pezzi di codice dal manuale di PHP) poteva essere risparmiata utilizzando quello che viene considerato il coltellino svizzero della rete: netcat.
Qui di seguito viene
presentato il funzionamento di base di netcat: vi prego di
segnalarmi eventuali inesattezze o errori, considerate che non sono
proprio un esperto...
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 lo stesso risultato del mio server con PHP
mi sarebbe bastato 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.
Copyright © by Sebastien Costa All Right Reserved.