Tcpdump

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar

Captura de pacotes com tcpdump

O tcpdump é um programa que permite capturar e analisar o tráfego de rede, e é executado a partir de um terminal.

A vantagem de executar o tcpdump em um terminal é poder analisar tráfego em roteadores e outros dispositivos de rede a partir do acesso remoto (com SSH).

Em uma rede local, com os computadores conectados através de hubs o tcpdump permite capturar todo o tráfego circulando, já que o hub se comporta como um barramento. Com o uso de switches o tráfego da rede local é segmentado entre as duas entidades que estão se comunicando, não sendo possível capturar o tráfego de terceiros.

Outro programa similar ao tcpdump é o wireshark, o qual dispõe de uma interface gráfica para facilitar a análise o tráfego de rede.

Instalação
Somente o administrador (usuário root) pode instalar o tcpdump.
Para instalar, digite o comando:
sudo apt-get install tcpdump

Captura de pacotes com tcpdump

A captura de pacotes em modo promíscuo, captura qualquer pacote circulando na rede local.

Somente o administrador (usuário root) pode executar o tcpdump.

sudo tcpdump

Sem o uso de filtros e parâmetros de ajuste, o tcpdump se capturara todo o tráfego do adaptador de rede selecionado, o que dificulta a análise dos pacotes.

As páginas de manual do tcpdump trazem informações detalhadas do uso deste comando:

man tcpdump

Exemplos de filtros comuns para uso com tcpdump

host
tcpdump host 200.17.101.9
Seleciona todos os pacotes cuja origem ou destino sejam o host especificado.
tcpdump host src 200.17.101.9 and dst 192.168.10.50
Seleciona os pacotes cuja origem e destino sejam os hosts especificados.
Protocolo
tcpdump host 200.17.101.9 and tcp
Seleciona todos os pacotes TCP cuja origem ou destino sejam o host especificado.
tcpdump host 192.168.10.10 and udp
Seleciona todos os pacotes UDP cuja origem ou destino sejam o host especificado.


Porta
tcpdump port 80
Seleciona todo o tráfego Web
tcpdump host 200.17.101.9 and port 80
Seleciona o tráfego Web cuja origem ou destino sejam o host especificado.

Captura de segmentos TCP

A linha geral de um segmento TCP é a seguinte:

src > dst : Flags [_] [seq ack windows urgent options]

O protocolo TCP é o responsável pelo serviço de transferência garantida da Internet. O src, o dst e as flags estão sempre presentes. Os outros campos dependem do tipo de conexão TCP. O significado destes parâmetros são:

  • src: maquina e porta de origem.
  • dst: maquina e porta de destino.

Quando não se especifica o parâmetro –n, o tcpdump converte, via DNS, o IP ao nome correspondente, o qual é apresenta na saída do tcpdump.

  • flags: São indicadas no cabeçalho TCP. Cujo significado depende exclusivamente da combinação em que aparecem:
    • . (ACK) Indica reconhecimento válido
    • R (RST) Usada para recusa de conexão
    • S (SYN) Usada para abertura de conexão
    • F (FIN) Usada para encerramento de conexão
    • U (URG) Usado para indicar um dado urgente
    • P (PSH) Usada para indicar que o receptor deve passar imediatamente o dado para a camada aplicação.
  • seq: Equivale ao numero de sequência do primeiro byte de dados deste segmento tcp. O formato é o seguinte:
    • primeiro:último (sem incluir o último)
      Significa que entre o primeiro e o último (sem incluir o último) existe um total de n bytes de dados, que aparecerá entre parênteses.
  • ack: É o numero de reconhecimento. Indica o numero seguinte de sequência que deseja receber.

Em geral o tcpdump imprime os números de seq e ack de forma relativa. Isto é, mostra os números seq reais somente para os pacotes relativos à abertura de conexão. Para os demais pacotes são apresentados números relativos ao número de Bytes transmitidos (onde o primeiro segmento de dados recebe o número de sequência 1). Para fazer com que sejam impressos os números seq e ack absolutos, devemos utilizar a opção –S.

  • win: Tamanho da janela de recepção.
  • urgent: Indica a existência de dados urgentes.
  • options: Indica a existência de opções.

Exemplo de captura de segmentos TCP

evandro@nbp-hp-evandro:~$ sudo tcpdump -ntS -i wlan0 host 200.17.101.9 and tcp and port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
IP 192.168.1.74.57074 > 200.17.101.9.80: Flags [S], seq 3738867842, win 29200, options [mss 1460,sackOK,TS val 6142960 ecr 0,nop,wscale 7], length 0
IP 200.17.101.9.80 > 192.168.1.74.57074: Flags [S.], seq 1715344972, ack 3738867843, win 14480, options [mss 1460,sackOK,TS val 27015805 ecr 6142960,nop,wscale 4], length 0
IP 192.168.1.74.57074 > 200.17.101.9.80: Flags [.], ack 1715344973, win 229, options [nop,nop,TS val 6142961 ecr 27015805], length 0
IP 192.168.1.74.57074 > 200.17.101.9.80: Flags [P.], seq 3738867843:3738868589, ack 1715344973, win 229, options [nop,nop,TS val 6142962 ecr 27015805], length 746

...

No comando tcpdump foram utilizados os seguintes parâmetros:

  • -n apresenta endereços IP e portas na forma numérica;
  • -t não apresenta a marca de tempo de captura dos pacotes;
  • -S apresenta os números de sequência de forma absoluta, caso contrário os mesmos são apresentados em forma relativa.
  • -i wlan0 especifica a interface wlan0, placa sem fio, para capturar pacotes.
  • host 200.17.101.9 and tcp and port 80 captura pacotes TCP com tráfego Web com origem ou destino no host especificado.
Descrição da saída do comando tcpdump
Estão listados quatro segmentos TCP trocados entre um cliente e um servidor Web. Cada linha da captura mostra na sequência:
IP.porta origem $>$ IP.porta destino: flags setados, número de sequência inicial:final (número de bytes do segmento), janela do receptor, etc. 
  1. O primeiro segmento é a solicitação de abertura de conexão (SYN), com flag S setado e número de sequência inicial 2035538770 (X).
  2. O segundo segmento é a resposta a solicitação do cliente (SYN-ACK) com flag S setado e número de sequência inicial 2981782888 (Y) e número de reconhecimento 2035538771 (X + 1).
  3. O terceiro segmento finaliza a abertura de conexão (ACK), com reconhecimento 2981782889 (Y + 1).
  4. O quarto segmento é uma requisição do cliente ao servidor, com flag P setado, com 711 Bytes de dados.

--Evandro.cantu (discussão) 11h12min de 27 de março de 2015 (BRT)