Maggio 2009

NETCAT - SOCKET IP DA SHELL -

 

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