quante volte vi e' capitato di dover controllare un flusso dati ip su di una macchina remota a cui non avete accesso, o che non ha un monitor per poter lanciare wireshark??
a volte ci vorrebbe uno switch cisco con la sua funzione di port mirroring (SPAN o RSPAN) ma non sempre nella rete che stiamo guardando c'e' un device cisco ...
a volte ho suato catturare il flusso dati con tcpdump, salvarlo su file e copiarlo sulla macchina da cui si vuole analizzarlo, ma cio' puo' esser fatto se sappiamo gli stanti temporali esatti in cui dobbiamo monitorare , non se dobbiamo aspettare l' evento
girando in rete tempo fa' avevo trovato che si poteva fare, ma come sempre si va' di fretta ... oggi mi e' riservito e finalmente ho avuto modo di trovarlo
in pratica si tratta di creare sulla macchina locale un file FIFO , che e' un file speciale da cui si puo' leggere e scrivere con processi differenti, e tutto cio' che viene scritto da un processo puo' esser letto da un' altro
in questo file, scriveremo l' output del tcpdump remoto , e lo leggeremo con wireshark come se fosse una scheda di rete
mkfifo /tmp/wireshark
quindi apriremo wireshark da riga di comando, specificando che deve usare come interfaccia di cattura il file FIFO appena creato (-i /tmp/wireshark) e che deve iniziare immediatamente a catturare i dati , manderemo in background il processo di wireshark
wireshark -k -i /tmp/wireshark &
quindi eseguiremo sulla macchina remota tcpdump lanciandolo atttraverso la connessione ssh , passando a tcpdump una serie di parametri , e mandando l' output di tcpdump sul file FIFO della macchina locale
i parametri che passeremo sono :
-s 0 per indicare di catturare 65535 byte per volta
-n per non far convertire a tcpdump gli indirizzi ip e le porte TCP/UDP nel corrispondente nome
-w - per far si che l' output venga scritto sullo standard output (ci serve per trasferirlo sul canale ssh)
-U per scrivere immediatamente i pacchetti catturati sul file di output senza aspetttare che venga riempito il buffer
-ethx indica da quale interfaccia dobbiamo catturare i pacchetti (se abbiamo piu' di un' interfaccia
not port 22 se dobbiamo catturare tutto il traffico che passa sull' interfaccia , e il canale ssh passa da quell' interfaccia fa' si che dal flusso catturato venga rimosso (non catturato) cio' che viaggia sulla porta 22 , in pratica il flusso ssh stesso
host xx.yy.zz.dd se vogliamo catturare i pacchetti da e per un singolo host
ssh utente_abilitato_a_tcpdumo@indirizzo_macchina_dove_catturare "tcpdump -s 0 -n -w - -U -i eth1 host 192.168.17.4" >/tmp/wireshark
una piccola accortezza che possiamo metter in atto, e' quella di usare l' autenticazione ssh con chiave , onde evitare la richiesta della password , quindi sulla macchina locale dobbiamo aver generato la chiave privata e dobbiamo aver copiato quella pubblica sulla macchina remota
cosi' saram molto piu' semplice poter catturare e filtrare un flusso dati remoto, nel mio caso la macchina dove vado a catturare i dati e' un router con openwrt , a cui accedo tramite vpn
ATTENZIONE , se come me , ci accedete tramite una chiavetta UMTS , usate questa cattura con parsimonia, se catturate tutto il traffico che passa su di un'interfaccia (filtrando la porta 22) e lo mandate verso il vostro pc locale userete il doppio di banda sulla chiavetta perche' i dati fluiranno tra la rete lan remota e la chiavetta, e una copia 1:1 fluira' verso il vostro PC locale ...