Incompatibilidade entre o tamanho do snap configurado da libpcap e o tamanho real da captura

0

Eu tenho alguns arquivos pcap em que o tamanho da captura relatado pelo Wireshark é maior que o tamanho real da captura. A diferença é de 10 bytes e não entendo por que ele relata esse número maior.

file informa o mesmo valor que o Wireshark faz na caixa de diálogo Estatísticas- > Resumo .

$> file out_20140207162250.pcap
out_20140207162250.pcap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 100)

Eu posso usar o tshark para me dar o tamanho da captura para os pacotes que têm um comprimento de captura menor que o tamanho do pacote para ver qual era o tamanho real.

$> tshark -r "out_20140207162250.pcap" -R "frame.cap_len < frame.len" -Tfields -eframe.cap_len | sort | uniq
tshark: The file "out_20140207162250.pcap" appears to have been cut short in the middle of a packet.
90

Examinando o arquivo com um programa C simples, vejo que o snaplen no pcap_file_header está realmente definido como 100.

#include <pcap.h>

int main(int argc, char **argv) {

  FILE *pcapInputFile_p;
  pcap_file_header fileHeader;

  pcapInputFile_p = fopen(argv[1], "r");
  fread( &fileHeader,sizeof(pcap_file_header), 1, pcapInputFile_p );
  printf("%d\n",fileHeader.snaplen);  
  fclose(pcapInputFile_p);

}

Na verdade, não sei como e com qual ferramenta esse arquivo específico foi capturado, mas estou tentando descobrir isso:).

Tentando repetir isso com o Wireshark 1.11.0 na minha máquina Windows, configurei "Limitar tamanho do pacote" para 96. O Wireshark informa cada corte de pacote em 96, mas em Estatísticas- > Resumo é 100, ou seja, 4 bytes a mais do que eu configurei. OK, agora eu configuro para 106. Eu recebo 106 ambos por pacote e no diálogo Resumo !

Então, agora estou intrigado ... e é sexta-feira à tarde e estou tentando matar algum tempo. Eu escrevi um script para capturar (com dumpcap 1.8.2) um único pacote com um tamanho maior que 1500, e imprimi-lo em um arquivo. Durante o tempo em que o script foi executado, baixei um arquivo enorme para obter alguns pacotes grandes. O sistema foi Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 GNU/Linux . Aqui está um gráfico de snaplengths configurados versus reais entre 50 e 150 (o padrão se repete até 1500 pelo menos). As linhas sombreadas mostram que a configuração 96 nos dá 96 neste sistema. A maior diferença é de 2 bytes, sempre menos do que eu configurei!

Imagem de configurado versus o tamanho real da captura (precisa de um representante para postar, não tenho certeza de quanto tempo ele está armazenado)

Então, para somar , por que existe uma diferença de byte x entre o tamanho da captura reportada e a duração real da captura? Por que às vezes? Por que diferentes para diferentes sistemas / ferramentas? Se sim, porque? Isso é um bug ou estou confuso?

Obrigado!

    
por bytesinflight 07.02.2014 / 16:20

1 resposta

0

Respondendo a minha própria pergunta aqui, já que o que eu descobri desde que fiz a pergunta "resolve" isso para mim. No mínimo, teria demorado muito mais para entender isso sem a ajuda de @GuyHarris, que gentilmente deixou um comentário acima, então obrigado!

Eu passei algum tempo compilando algumas versões diferentes do libpcap junto com o tcpdump mais recente. Os resultados podem ser divididos em três categorias (ruim, semi-ruim e perfeito), onde a última versão da libpcap testou OK. Hoje, quando repito o teste no Windows com dumpcap e Wireshark eu não pude repetir isso! Eu não sou louco, eu juro!

Resumo - isso dependia totalmente da versão da libpcap. Não achei que o sistema ou qualquer outro software tenha afetado isso. Então, as pessoas, atualizem seu libpcap para salvá-lo de alguma frustração! :)

Veja a imagem aqui - Configurável versus real snaplength

    
por 13.02.2014 / 10:49