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

...

Neste comando foram utilizados os seguintes parâmetros:

sudo tcpdump -ntS -i wlan0 host 200.17.101.9 and tcp and port 80
  • -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. 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). 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). O terceiro segmento finaliza a abertura de conexão (ACK), com reconhecimento 2981782889 (Y + 1). 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)