tcpdump Como usá-lo para capturar todos os cabeçalhos de tráfego

6

Sou bem novo no tcpdump. Eu nunca usei isso, exceto por tarefas muito triviais.

Recentemente, pediram-me para concluir o seguinte trabalho.

O que eu tenho: um servidor com uma interface de rede conectada a um switch. Todo o tráfego nesse switch seria espelhado para este servidor. O que eu preciso: Armazene todo esse tráfego em um arquivo no formato PCAP. O arquivo deve incluir

  1. Apenas o tráfego de saída ou de entrada está interessado. O tráfego que viaja apenas dentro da sub-rede não é necessário e não deve ser registrado, se possível.
  2. Todo o tráfego de difusão seletiva e difusão não está interessado e deve ser ignorado, se possível
  3. Tudo que eu preciso é Ethernet - > IPv4 - > TCP, UDP e ICMP. Outros não estão interessados e devem ser negligenciados, se possível
  4. Eu não preciso do corpo da mensagem. Cabeçalhos (Ethernet, IP e TCP / UDP / ICMP) são suficientes. Então o corpo não deve ser logado se possível

O tráfego seria de ~ 100MByte / s durante o dia e, para meu trabalho, a perda de pacotes não é tolerável (deve ser contínua por 24 horas).
De qualquer forma, como mencionado acima, não preciso de tudo.

Pergunta:

  1. Como posso fazer o trabalho?
  2. O que devo fazer para que todos os dados sejam coletados sem problemas (quase).

Obrigado.

    
por Haozhun 30.03.2011 / 13:29

1 resposta

7

Minha melhor aposta seria usar algo como:

 tcpdump -ieth0 -s96 -w traffic.dump 'ip or icmp or tcp or udp'

Onde a parte "complicada" será escolher um valor correto para o parâmetro "-s" (snaplen) (snaplen é o tamanho máximo do pacote que o tcpdump irá capturar).

Nas páginas do manual do tcpdump:

Snarf snaplen bytes of data from each packet rather than the default of 68 (with NIT, the minimum is actually 96). 68 bytes is adequate for IP, ICMP, TCP and UDP but may truncate protocol information from name server and NFS packets (see below). 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.

Neste exemplo, estou usando 96 para ter "quase" a certeza de que eu capturaria 100% dos valores de cabeçalho ethernet + ip + (icmp || udp || tcp).

Caso seu tráfego tenha opções de IP ou TCP (ou seja, timestamps) e você também queira capturar esta informação, então você terá que jogar com o parâmetro snaplen (isto é, aumentar / diminuir).

Caso o comprimento dos cabeçalhos do seu pacote seja menor que o snaplen, você também pode capturar parte da carga útil.

Finalmente, para ler o tráfego capturado, eu usaria algo como:

tcpdump -e -nn -vv -r traffic.dump   

Onde a parte importante é usar a opção "-e" para que você possa imprimir os cabeçalhos da ethernet.

Esta página oferece um idéia sobre o tamanho dos cabeçalhos ethernet / tcp / udp sob diferentes circunstâncias e pode ajudá-lo a chegar a um valor "correto" para o parâmetro snaplen.

    
por 30.03.2011 / 17:09

Tags