tcpdump não irá capturar pacotes inteiros

5

Estou usando

sudo tcpdump -A -s0 -ien0 port 80 | grep schemas-microsoft >> ~/Downloads/convert.txt

para capturar xmls do microsoft-schema sendo enviados pela internet, quando tcpdump deve capturar: (por exemplo)

<xml>
 <sample>h</sample>
 <samp2>j</sample>
</xml>

captura apenas:

<xml>
<sample>h</sample
<sam

E pára aleatoriamente em algum lugar no arquivo. O que isso poderia ser devido a?

    
por DisplayName 25.10.2014 / 08:00

1 resposta

6

A orientação na documentação do Wireshark sugere a captura de todo o conteúdo do pacote usando este comando:

$ tcpdump -i <interface> -s 65535 -w <some-file>

Olhando para a página man do tcpdump , a orientação sugere que -s0 deve ser equivalente:

-s

Snarf snaplen bytes of data from each packet rather than the default of 65535 bytes. Packets truncated because of a limited snapshot are indicated in the output with ''[|proto]'', where proto is the name of the protocol level at which the truncation has occurred. 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. Setting snaplen to 0 sets it to the default of 65535, for backwards compatibility with recent older versions of tcpdump.

Suspeito que você esteja perdendo alguns dados devido à frase no meio dessa orientação, principalmente:

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.

Pesquisando sobre como fazer isso, percebi que outros estavam sugerindo uma linha de comando semelhante à isso:

$ tcpdump -nnXSs 0 'port 80'
  • "- nn" faz com que não procure nomes de host nos nomes DNS e de serviço (em /etc/services ) para uma saída mais rápida e limpa.
  • "- X" faz com que imprima cada pacote em hexadecimal e ascii; isso é realmente o pouco útil para acompanhar cabeçalhos e tais
  • "- S" imprime números de sequência TCP absolutos em vez de relativos - Se bem me lembro, é assim que você pode comparar saídas tcpdump de vários usuários fazendo isso de uma só vez
  • "- s 0" Por padrão, o tcpdump captura apenas o início de cada pacote, usando 0 para capturar os pacotes completos.

Sugiro adicionar o -nn para ver se isso melhora o desempenho, fazendo com que menos dados sejam armazenados em buffer e, espera-se, proteger mais dados de possíveis descartes. Os outros interruptores podem ajudar, mas não está claro para mim como eles ajudariam, se for o caso, na sua situação.

Referências

por 25.10.2014 / 10:14