Tcpick e' uno sniffer in grado di tracciare le connessioni e determinarne lo stato (SYN-SENT, SYN-RECEIVED e cosi' via).
Per vedere tcpick in azione si puo' eseguire questo comando da root:
# tcpick -i eth0 -C
L'opzione `-C' serve ad abilitare i colori per rendere la lettura dell'output piu' gradevole, mentre l'opzione -i serve a specificare l'interfaccia di rete.
Creando un po' di traffico (aprendo, ad esempio una pagina web) dovreste vedere un output simile a questo:
23:07:42.672171 1 SYN-SENT 12.34.56.78:41599 > 123.123.123.123:http 23:07:42.822239 2 SYN-SENT 12.34.56.78:41600 > 32.13.21.32:5973 23:07:42.826634 3 SYN-SENT 12.34.56.78:41601 > 123.45.67.89:5555 23:07:42.854681 4 SYN-SENT 12.34.56.78:41602 > 1.2.3.4:56789 23:07:43.084242 1 SYN-RECEIVED 12.34.56.78:41599 > 123.123.123.123:http 23:07:43.087045 1 ESTABLISHED 12.34.56.78:41599 > 123.123.123.123:http 23:07:44.061311 5 SYN-SENT 12.34.56.78:41603 > 10.20.30.40:8888
Se volete vedere i dati contenuti nei pacchetti, l'operazione richiesta e' semplicissima:
# tcpick -i eth0 -C -yP -h -a
`-yP' significa “visualizza il contenuto del pacchetto”, `-h' abilita la visualizzazione dell'header (semplificato) e `-a' abilita la risoluzione dei nomi via dns. I caratteri non stampabili vengono visualizzati come punti.
# tcpick -i eth0 -C -bCU -T1 "port 25"
`-bCU' significa: ricostruisci il flusso tcp (`-b') ma visualizza solo la parte attinente al client (`C') e i caratteri non stampabili vengono visualizzati tramite codice esadecimale (`U').
`-T1' significa: tracciare solo la prima connessione incontrata
“port 25” e' il filtro per catturare solo connessioni smtp.
Qui' viene il bello!
#tcpick -i eth0 -wR ``port ftp-data''
Quando il file e' stato completamente trasmesso (CLOSED) controlla nella directory corrente e troverai dei file simili a questi:
# ls *.tcpick client_123.45.67.89_98.76.54.32_34567.tcpick server_123.45.67.89_98.76.54.32_34567.tcpick
Ottimo! Se esegui il comando `$ file *.tcpick' vedrai che e' proprio cio' che e' stato scaricato, e un md5sum garantira' e' stato sniffato completamente e senza errori.
Devi scegliere se sniffare la parte relativa al server o al client, poiche' ovviamente non si vuole mischiare entrambi i flussi nello standard output. E' estremamente semplice; ecco alcuni esempi:
# tcpick -i eth0 --pipe client "port 80" | gzip > risposta_http.gz
oppure
# tcpick -i eth0 --pipe server "port 25" | nc foobar.net 25
Ora usa la tua immaginazione e se credi ne valga la pena, contattami per farmi sapere che razza di alchimie hai inventato ;^) (magari includero' degli script nel pacchetto sorgente).
Buon divertimento!