2011-12-09 9 views
6

Esiste un modo automatico (in tcpdump o tramite un'app helper Out There) per generare un file pcap che contiene solo intestazioni Ethernet, IP e Layer 4 (TCP nel mio caso), in modo che non vi siano dati di payload/applicazione nel pcap risultante? Ho scoperto che, poiché le dimensioni dell'intestazione variano spesso, è impossibile scegliere una dimensione di acquisizione che non catturerà alcun dato di payload.Stripping payload da un tcpdump?

risposta

9

È possibile togliere i payload TCP molto facilmente con il modulo di Python scapy

PRIMA

[[email protected] tshark_wd]$ tcpdump -n -r sample.pcap 
reading from file sample.pcap, link-type EN10MB (Ethernet) 
00:25:42.443559 IP 192.168.12.237.1052 > 192.168.12.236.22: Flags [P.], 
    seq 2445372969:2445373021, ack 1889447842, win 63432, length 52 
00:25:42.443607 IP 192.168.12.236.22 > 192.168.12.237.1052: Flags [.], 
    ack 52, win 65535, length 0 
00:25:42.443980 IP 192.168.12.236.22 > 192.168.12.237.1052: Flags [P.], 
    seq 1:389, ack 52, win 65535, length 388 

PAYLOAD STRIPPING

L'esecuzione di questo come root in linux ...

#!/usr/bin/env python 
from scapy.all import * 
INFILE = 'sample.pcap' 
OUTFILE = 'stripped.pcap' 
paks = rdpcap(INFILE) 
for pak in paks: 
    pak[TCP].remove_payload() 
wrpcap(OUTFILE, paks) 

DOPO

[[email protected] tshark_wd]$ tcpdump -n -r stripped.pcap 
reading from file sample.pcap, link-type EN10MB (Ethernet) 
00:25:42.443559 IP truncated-ip - 52 bytes missing! 192.168.12.237.1052 
    > 192.168.12.236.22: Flags [P.], seq 2445372969:2445373021, 
    ack 1889447842, win 63432, length 52 
00:25:42.443607 IP 192.168.12.236.22 > 192.168.12.237.1052: Flags [.], 
    ack 52, win 65535, length 0 
00:25:42.443980 IP truncated-ip - 388 bytes missing! 192.168.12.236.22 
    > 192.168.12.237.1052: Flags [P.], seq 1:389, 
    ack 52, win 65535, length 388 

Nel tcpdump sopra, notare i "byte XX manca!" messaggi. Questo perché abbiamo rimosso il carico utile TCP.

0

Se semplice troncare avrebbe funzionato per voi, è possibile utilizzare:

tcpdump -i eth0 -s 96 -w test1.pcap 

In seguito è possibile analizzare con Wireshark.

+0

Sfortunatamente l'OP è corretto, non c'è modo di prevedere in modo affidabile la lunghezza delle intestazioni TCP, a causa del campo Opzioni TCP. Per la maggior parte, questa è l'unica parte delle intestazioni IP/TCP che ha una possibilità significativa di differire in lunghezza. Un valore snaplen fisso non garantisce il troncamento del carico utile TCP nel punto corretto. –

-2

La mia soluzione era la seguente. Mi piacerebbe sentire come gli altri lo fanno senza librerie esterne o troncamenti. Mi piacerebbe sapere come gli altri hanno eseguito questo, perché non sono riuscito a trovare la funzione remove_payload() nella documentazione di Scapy, rendendo questa risposta inutilizzabile.

#read pcap file 
pkts = rdpcap("packet-capture.pcap") 

#write packet with payload "XXXXXXXXXX" 
for pkt in pkts: 
    pkt.load = "XXXXXXXXXX" 

#write new pcap 
wrpcap("new.pcap", pkts) 

Il problema di questo è che, se letta con tcpdump, lascia una byte mancanti! per l'IP src. Posso verificare l'infromation è ancora lì con Scapy via

pkts[_packet_num].load 

Esiste un modo per rigenerare l'intera acquisizione in modo che appaia come se fosse inalterato?

+0

Sembra più una domanda che una risposta. Forse considera [chiedendo] (http://stackoverflow.com/questions/ask) un altro. – adamdunson