2012-01-18 11 views
8

Dato un file pcap, sono in grado di estrarre molte informazioni dalla richiesta e dalle risposte HTTP ricostruite usando lo neat filters provided by Wireshark. Sono anche stato in grado di split the pcap file into each TCP stream.Come utilizzare tshark per stampare coppie richiesta-risposta da un file pcap?

Problema in cui mi sto imbattendo ora è quello di tutti i filtri interessanti che riesco a utilizzare con tshark, non riesco a trovarne uno che mi consenta di stampare corpi di richiesta/risposta completi. Sto chiamando qualcosa di simile:

tshark -r dump.pcap -R "tcp.stream==123 and http.request" -T fields -e http.request.uri 

C'è qualche Filtro posso passare per -e per ottenere il corpo di richiesta/risposta? Il più vicino a cui sono arrivato è quello di utilizzare il flag -V, ma anche un sacco di informazioni che non desidero e voglio evitare di dover escludere con un filtro "stupido".

+0

Qual è stata la snarflen della cattura originale. Se non hai raccolto il pacchetto completo probabilmente hai i dati. –

+0

Le catture andavano bene. L'MTU sull'interfaccia che ho usato era 1514 e ho effettuato una cattura di 1600. Ho aperto il pcap in Wireshark e posso ottenere coppie di richieste-risposte individuali come flussi; Stavo solo cercando un modo per copiarlo. –

+0

Fresco - basta escludere il più ovvio –

risposta

7

Se si desidera passare a un altro strumento, tcptrace can do this con l'opzione -e. Ha anche un'estensione di analisi HTTP (opzione xHTTP) che genera le coppie di richiesta/risposta HTTP per ogni flusso TCP.

Ecco un esempio di utilizzo:

tcptrace --csv -xHTTP -f'port=80' -lten capturefile.pcap 
  • --csv al formato di output come virgola sperated variabile
  • -xHTTP per la richiesta HTTP/risposta scritta a 'http.times' attiva anche -e per scaricare i payload del flusso TCP, quindi non hai davvero bisogno di -e pure
  • -f'port = 80 ' per filtrare o ut traffico
  • -l non-web per la forma lunga uscita
  • -t di darmi progredire indicazione
  • -n per disattivare risoluzione del nome host (molto più velocemente senza questo)
+0

Ho usato tcptrace. È piuttosto promettente. Grazie! Per qualche strana ragione, l'uso di 'tcptrace -e my.dump' non ha separato le richieste correttamente. Sospetto che questo sia solo un caso in cui io faccio qualcosa di sbagliato dal momento che Wireshark ha fatto lo stesso errore, quindi mi ci soffermerò un po 'di più. Se avessi un solitario in cima alla tua testa per estrarre coppie richiesta-risposta da un file pcap standard (sfortunatamente con una manciata di pacchetti tagliati), sono tutto orecchie :). –

+0

aggiunto un esempio - questo funziona per me, ma sono sicuro che ti imbatterai in problemi se hai pacchetti troncati – rupello

0

io uso questa linea per mostrare ultimi 10 secondi richiesta corpo e il corpo di risposta (https://gist.github.com/diyism/eaa7297cbf2caff7b851):

sudo tshark -a duration:10 -w /tmp/input.pcap;for stream in `sudo tshark -r /tmp/input.pcap -R "tcp and (http.request or http.response) and !(ip.addr==192.168.0.241)" -T fields -e tcp.stream | sort -n | uniq`; do sudo tshark -q -r /tmp/input.pcap -z follow,tcp,ascii,$stream; done;sudo rm /tmp/input.pcap 
2

Se hai catturato un file pcap, puoi fare quanto segue per mostrare tutte le richieste + risposte.

filename="capture_file.pcap" 
for stream in `tshark -r "$filename" -2 -R "tcp and (http.request or http.response)" -T fields -e tcp.stream | sort -n | uniq`; do 
    echo "==========BEGIN REQUEST==========" 
    tshark -q -r "$filename" -z follow,tcp,ascii,$stream; 
    echo "==========END REQUEST==========" 
done; 

Ho appena fatto diyism rispondere a un po 'più facile da capire (non è necessario sudo, e lo script multilinea è imo semplice da guardare)