tcpdump: pacotes perdidos

3

Em execução, no modo promíscuo ou não:

tcpdump -i "$INTERFACE" -vvv -n -XX -S -s0 -e

Eu tenho um monte de linhas e essa conclusão quando parei:

601 packets captured
938 packets received by filter
230 packets dropped by kernel

Por que a diferença? Onde estão os 107 pacotes faltando? E é possível conseguir / capturar 100% dos pacotes na rede local - sou eu apenas atrás de um roteador?

    
por John Doe 09.01.2016 / 18:59

2 respostas

5

Quando o tcpdump "descarta" pacotes, é porque ele não tem espaço de buffer suficiente para acompanhar os pacotes que chegam da rede.

A diferença entre os pacotes capturados e recebidos pode ser devido a implementações do sistema operacional ou tcpdump, ou mais comumente devido ao abortar o processo com ^ C.

Definir o tamanho do buffer por pacote com "s0" tem como consequência configurá-lo como 64 KB por man tcpdump ; normalmente no máximo configuro-o como 1500 se estiver usando -X para ver o pacote inteiro, e se usar apenas o tcpdump para assistir cabeçalhos até menos do que isso é necessário - 160 bytes que é o tamanho dos cabeçalhos IPv4.

Normalmente, trabalhar com a tela também é mais lento, se precisar de velocidade, eu direcionaria a saída para um arquivo se você não precisa assisti-lo em tempo real.

Do man "tcpdump":

"Note that taking larger snapshots both increases the amount of time it takes to process packets and, effectively, decreases the amount of packet buffering. This may cause packets to be lost. You should limit snaplen to the smallest number that will capture the protocol information you're interested in."

    
por 09.01.2016 / 21:38
2

Como respondido outro lugar , e aqui , tcpdump (padrão desde 4.0, libpcap desde 1.0) tem uma opção -B NNNN para definir o tamanho do buffer (medidas em NNNN * 1024 bytes). Esta é uma alternativa útil se você não quiser configurar o snaplen mais baixo.

Exemplo:

tcpdump -I "${INTERFACE}" -B 4096 -nn -w capture.pcap

Você também pode considerar usar um filtro de captura se estiver procurando pacotes de alguns tipo conhecido ou com atributos conhecidos e você não está interessado em capturar tudo.

A resposta de Rui inclui outro ponto útil: se você não precisar ver a captura de pacotes ao vivo, faria melhor a saída para um arquivo em vez de terminal.

    
por 11.01.2016 / 18:34