Introduzione
La piattaforma utilizzata per questi test e' Fedora 9.
'nc' e'
un comando di shell che consente di aprire un socket e avviare una trasmissione
dati o mettersi in ascolto
nc di default utilizza tcp (altrimenti usare '-u' per specificare il tcp)
L'home page dell'applicativo e': http://netcat.sourceforge.net. Fedora 9 installa di default in pacchetto"nc-1.84-16.fc9" con il comando "nc" che pero' e' privo di tutte le funzionalita' di netcat (per motivi di sicurezza). Installare "netcat-0.7.1-1.i386" e rimuovere il "nc-1.84-16.fc9" se si vogliono utilizzare le funzionalita' complete. Negli esempi di sotto e' specificata quale versione dell'applicativo e' utilizzata.
Esempi
Esempio 1: Invio notifiche da linux a windows con yac (con netcat di fedora)
YAC (http://sunflowerhead.com/software/yac/)
e' un programma per windows che gira in background restando in ascolto sulla
porta 10629.
Non appena arriva un messaggio visualizza una finestra popup contenente il
messaggio ricevuto. E' pensato per visualizzare messaggi per telefonate in
arrivo.
echo -n -e "Messaggio" | nc 192.168.1.110 10629

Esempio 2: Chiamata con netcat da extensions.ael di asterisk (con netcat di fedora)
System(/bin/echo
-n -e "'${miodato}'" | nc 192.168.30.10 65000);
Set(esitonc=${SYSTEMSTATUS});
if (${esitonc} = APPERROR) // qualcosa non
e' andato a buon fine, ad esempio non si e' raggiunto il client
{...}
Esempio 3: Ascolto (con netcat di fedora)
nc -l
1234 <--- resta in ascolto su tutti gli ip in tcp alla porta 1234
nc -u -l 1234 <--- resta in ascolto su tutti gli ip in udp alla porta 1234
Esempio 4: Scansione (con netcat di fedora)
Facciamo una scansione di un ip per le porte tcp dalla 20 alla 30 con un timeout di 2 secondi.

Esempio 4: Verifica del tipo di server HTTP a cui si e' collegati (con netcat di fedora)
Basta inserire il comando "GET HTTP" dopo essersi collegati alla porta 80

Esempio 5: Invio e ricezione file (con netcat di fedora)
nc
192.168.10.20 1234 < pippo.txt
<--- invio file
nc 192.168.10.20 1234 > ricevuto.txt
<--- ricezione file
possiamo fare il pipe con un "pv -b" per vedere lo stato del trasferimento dati
Esempio 6: In ascolto con sessione di shell (netcat originale)
nc -l -p 5600 -e /bin/bash
da un terminale remoto: "nc INDIRIZZOIP 5600"
si avra' a disposizione la shell di bash, potendo inserire comandi. Al termine della sessione cade anche il netcat lato server. Quindi ci si puo' connettere una volta.
Sostanzialmente abbiamo un accesso senza autenticazione in una porta di un server. Va valutata con attenzione la sicurezza.
Esempio 6: Collegamento dall'interno di una rete all'esterno (netcat originale)
Supponiamo che dobbiamo amministrare una macchina che e' dietro un firewall. Il
firewall e' configurato per rendere impossibile l'accesso dall'esterno.
Allora con un cron job lanciamo in un'ora prefissata (quando i servizi web sono
meno utilizzati):
nc INDIRIZZOIPESTERNO 80 -e /bin/bash
ovvero il server si collega "dalla porta 80" verso l'esterno all'ip prefissato, dove c'e' il cliente in ascolto con:
nc -v -l -p 80 (-v verbose, -l ascolto, -p porta)
Nota: se la porta 80 e' in ascolto non ha importanza perche' noi ci colleghiamo ad una porta esterna 80 e come se stessimo navigando dall'interno.
Nel server client la porta 80 dev'essere libera.
APPENDICE
Esiti:
INDIRIZZO IP IRRAGGIUNGIBILE (va in timeout dopo circa 5 secondi)
[root@istpenitenziario monitor]# /bin/echo -n -e "2009-05-21
15:43:02#402#276#390931717060#16" | nc 192.168.30.111 65000 -vvv
nc: connect to 192.168.30.111 port 65000 (tcp) failed: No route to host
INDIRIZZO IP E PORTA RAGGIUGIBILE
[root@istpenitenziario monitor]# /bin/echo -n -e "2009-05-21
15:43:02#402#276#390931717060#16" | nc 192.168.30.10 65000 -vvv
Connection to 192.168.30.10 65000 port [tcp/*] succeeded!
Operazione Effettuata
INDIRIZZO IP RAGGIUNGIBILE PORTA NO (SENZA 'w' non andrebbe MAI in timeout)
[root@istpenitenziario monitor]# /bin/echo -n -e "2009-05-21
15:43:02#402#276#390931717060#16" | nc 192.168.30.10 65001 -vvv -w 5
nc: connect to 192.168.30.10 port 65001 (tcp) timed out: Operation now in
progress
Comandi correlati:
Note: vedi anche 'socat', da installare con "yum *socat*"
vedi anche 'pv' da
installare con "yum *pv*" che monitorizza il progress del trasferimento file
attraverso pipe