2009-09-29 28 views
21

Estamos sniffing de paquetes utilizando libpcap en Linux La cabecera tenemos en cada paquete se parece a:PCAP estructura pcap_pkthdr len vs Caplen

struct pcap_pkthdr { 
     struct timeval ts;  /* time stamp */ 
     bpf_u_int32 caplen;  /* length of portion present */ 
     bpf_u_int32 len;  /* length this packet (off wire) */ 
}; 

Ahora, Es mi entendimiento de que Caplen es la longitud de los datos hemos capturado mientras len es la longitud del paquete en el cable. En algunos casos (por ejemplo, al configurar el snaplen demasiado bajo al abrir el dispositivo pcap) podríamos capturar solo partes del paquete, esa longitud será 'caplen', mientras que 'len' es la longitud original. Por lo tanto, caplen debe ser igual o menor que len, pero nunca mayor que len.

¿Es eso una comprensión correcta? Estamos viendo caplen> len en algunas máquinas

+3

Debería publicar el pcap que desencadena este problema en pcapr.net, sería bastante interesante. Personnaly, nunca he visto eso. – bortzmeyer

Respuesta

13

Su comprensión es correcta, al menos en función de la página man de pcap.

caplen es la cantidad de datos disponibles para usted en la captura. len era la longitud real del paquete.

No tengo conocimiento de ningún caso que pueda proporcionarle un caplen> len. Por lo general, los veo iguales ya que mi snaplen es suficientemente alto.

4

Sí, tu comprensión es correcta Caplen siempre es menos que Len. A veces no necesitamos capturar todo el paquete. Pero ¿por qué no capturaría todo el paquete si tuviera una oportunidad? Porque en un tráfico de red pesado eso no sería una buena idea. ¿No estamos realmente perdiendo datos valiosos si no capturamos todo el paquete que aparece en el cable? No. Realmente depende de su propósito, si solo quiere clasificar paquetes basados ​​en los protocolos y la aplicación a la que está destinado, solo necesita alrededor de 14 bytes (Ethernet) más 20 bytes (Ip) + más otros 20 (Tcp) por lo tanto, aparentemente solo necesita 54 bytes de datos para clasificar paquetes basados ​​en protocolos, por lo que se ahorra mucha carga y tiempo al reducir el tamaño de procesamiento de pcappkthdr-> len a pcappkthdr-> caplen :)

Si los encabezados en los paquetes están corruptos (lo que significa que si los valores de la longitud del encabezado se alteran de alguna manera), entonces la longitud capturada sería mayor que la longitud real del paquete.

2

Si caplen> len, eso es un error; ¿Qué versión de libpcap estás usando?

Cuestiones relacionadas