Posts tagged: nc

Esperimenti con Netcat

La man page ($ man nc) lo definisce “TCP/IP swiss army knife”, e ha ragione. L’ho usato per fare di tutto. Trasferire file, controllare le impostazioni del browser, e anche per puro e semplice divertimento. In questo articolo vediamo come usarlo per giocare con i browser e i server web, anzi, vediamo come usarlo in un modo assolutamente poco utile. Ma per imparare va bene così.

Prima cosa, vediamo come intercettare la richiesta che un nokia N78 manda ad un server web quando richiede la homepage, per farlo apriamo un terminale e diamo il comando:

$ nc -l -p 8080

Dove nc è appunto netcat, -l dice di stare in ascolto, precisamente sulla porta 8080 (-p 8080), fatto questo apriamo il browser sul telefono, connettiamoci alla Wifi domestica, e digitiamo http://ip_del_pc:8080 come destinazione, nel mio caso l’ip è 192.168.1.10

Browser dell'N78

Browser dell'N78

Confermiamo, e poco dopo il terminale ci darà in output la richiesta inviata dal telefono, ecco come si presenta il terminale.

$ nc -l -p 8080
GET / HTTP/1.1
Host: 192.168.1.10:8080
Accept: text/html,text/css,multipart/mixed,application/java-archive, application/java, application/x-java-archive, text/vnd.sun.j2me.app-descriptor, application/vnd.oma.drm.message, application/vnd.oma.drm.content, application/vnd.oma.dd+xml, application/vnd.oma.drm.rights+xml, application/vnd.oma.drm.rights+wbxml, application/x-nokia-widget, */*
Accept-Charset: iso-8859-1, utf-8; q=0.7, *; q=0.7
Accept-Encoding: gzip, deflate, x-gzip, identity; q=0.9
Accept-Language: it;q=1.0,en;q=0.5,fr;q=0.5,de;q=0.5,es;q=0.5,pt;q=0.5
User-Agent: Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaN78-1/20.149; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413
X-Nokia-MusicShop-Version: 09.0820.9
X-Nokia-MusicShop-Bearer: WLAN
x-wap-profile: “http://nds1.nds.nokia.com/uaprof/NN78-1r100.xml”

Con CTRL+C chiudiamo netcat, e vediamo cosa fare. Innanzitutto noto con piacere i richiami a KHTML e WebKit, roba molto seria. Vedo che nell’User-Agent si può vedere addirittura quale versione del firmware sto utilizzando (20.149) e poi ci sono riferimenti al Nokia MusicShop, vabbè. Prendiamo questa richiesta, da GET fino in fondo e salviamola in un file, facciamo attenzione a come finisce il file, dopo xml” devono esserci SOLO due “a capo”, ovvero premete invio due volte. Prima di salvarlo modificate la linea Host, cambiate :8080 in :80, o con la porta con cui è configurato il vostro apache (default :80), io l’ho salvato come ~/N78.get . Ora lanciamo Apache, sulla mia linux box si fa con (da root)

# apachectl start

Sulla vostra potrebbe essere diverso (ad esempio /etc/rc.d/httpd start) documentatevi. Ora che abbiamo un webserver in esecuzione, procuriamoci una risposta valida alla richiesta che ci siamo salvati.

$ nc 192.168.1.10 80 < ~/N78.get
HTTP/1.1 200 OK
Date: Sun, 19 Apr 2009 11:24:13 GMT
Server: Apache/2.2.10 (Unix) DAV/2
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: “404df-2c-3e9564c23b600″
Accept-Ranges: bytes
Content-Length: 44
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

Ovviamente in questo caso il server è in esecuzione sulla macchina all’ip 192.168.1.10 porta 80 (notare che per la connessione in uscita non si usa -p, ma si scrive solo la porta separata ocn uno spazio dall’ip), se non volete avviare apache, o non l’avete installato, cambiate Host in N78.get con, ad esempio www.un_sito_a_vostra_scelta.com e lanciate

$ nc www.un_sito_a_vostra_scelta.com 80 < ~/N78.get > ~/N78.page

Notare che ho aggiunto un piccolo dettaglio, la redirezione dell’output nel file ~/N78.page, per comodità. Sappiate che ‘nc’ resterà in esecuzione finchè il server non deciderà di interrompere la connessione, se volete interrompere prima, usate CTRL+C. Bene, ora abbiamo una risposta HTTP completa e valida da poter rimandare indietro al telefono.

$ nc -l -p 8080 < ~/N78.page

Quando riceve una connessione netcat invia i contenuti del file ~/N78.page , ora puntiamo il telefono di nuovo all’indirizzo di prima e vediamo se funziona.

Pagina di benvenuto di Apache 2

L'esperimento funziona!

Bene, fine dell’esperimento. Un ultima cosa, vi lascio i comandi, che dovreste aver già capito come funzionano, per trasferire un file. Sul pc ricevente (che supponiamo abbia ip 10.0.0.1)

$ nc -l -p 8080 > ~/file.ricevuto

Sul pc mittente (il cui ip non ci interessa)

$ nc 10.0.0.1 8080 -q0 < ~/file.da.inviare

Il parametro -q0 dice di interrompere subito la connessione dopo aver ricevuto un EOF (End of file). In questo caso è obbligatorio a fine trasmissione un controllo con ‘md5sum’ per accertare che i due file siano uguali.

Tags: ,

categories linux