2011-12-09 20 views
6

¿Existe una forma automatizada (en tcpdump o mediante una aplicación auxiliar Out There) para generar un archivo pcap que solo contenga encabezados Ethernet, IP y Capa 4 (TCP en mi caso), para que no haya datos de carga/aplicación en el pcap resultante? Descubrí que, dado que los tamaños de los encabezados a menudo varían, es imposible elegir un tamaño de captura que no capture datos de carga útil.Stripping payload desde un tcpdump?

Respuesta

9

Puede despojar a cabo la carga útil TCP muy fácilmente con el módulo de Python scapy

ANTES

[[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 

CARGA STRIPPING

La ejecución de esta como root en 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) 

DESPUÉS

[[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 

En el tcpdump anterior, observe las "XX bytes falta!" mensajes. Eso es porque hemos eliminado la carga útil TCP.

0

Si truncado simple sería trabajar para usted, usted podría utilizar:

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

Más adelante se puede analizarlo con wireshark.

+0

Desafortunadamente, el OP es correcto, no hay forma de predecir con fiabilidad la longitud de los encabezados TCP, debido al campo Opciones de TCP. En su mayor parte, esa es la única parte de los encabezados IP/TCP que tiene una gran posibilidad de diferir en longitud. Un valor snaplen fijo no garantiza que siempre trunque la carga TCP en el lugar correcto. –

-2

Mi solución fue la siguiente. Me encantaría escuchar cómo otros lo hacen sin bibliotecas externas o truncamiento. Me encantaría escuchar cómo otros realizaron esto, porque no pude encontrar la función remove_payload() en la documentación de Scapy, por lo que esta respuesta no se puede usar.

#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) 

El problema con esto es que, cuando se lee con tcpdump, deja un bytes que faltan! para la IP src. Puedo verificar el infromation está todavía allí utilizando scapy través

pkts[_packet_num].load 

¿Hay una manera de regenerar toda la captura por lo que parece como si no fue modificado?

+0

Esto suena más como otra pregunta que una respuesta. Quizás considere [preguntar] (http://stackoverflow.com/questions/ask) otra. – adamdunson

Cuestiones relacionadas