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

Parâmetros comuns para uso com tcpdump

-i interface
Quando se executa o tcpdump sem passar nenhum parâmetro são capturados pacotes presentes na interface eth0. Verifique a interface que deseja capturar pacotes com o comando ifconfig. Caso se deseje capturar os pacotes em outras interfaces, como wlan0, utilizamos o parâmetro –i:
sudo tcpdump –i wlan0
-n não converta endereços
O tcpdump geralmente converte os os endereços IP e números de portas para nomes. Entretanto, se desejarmos visualizar os endereços na forma numérica, utiliza-se o parâmetro –n:
sudo tcpdump –n
-s quantidade de dados capturados
Pode-se definir a quantidade de dados que serão capturados através do parâmetro –s tam, onde o tam é o tamanho que nos interessa. Por default o tcpdump só captura os primeiros 68 bytes, o que é útil somente se desejamos capturar os cabeçalhos dos protocolos. Se desejarmos capturar todos os dados do segmento contidos em uma MTU (Maximum Transfer Unit) de 1500 bytes usamos o parâmetro:
sudo tcpdump –s 1500
-X dados em hexa e ASCII
Pode-se visualizar o conteúdo dos pacotes em hexa e ASCII através da opção –X:
sudo tcpdump –X
-S números de sequência absolutos
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:
sudo tcpdump -S
-c número de pacotes capturados
Se quisermos capturar um número limitado de pacotes, podemos utilizar a opção –c:
sudo tcpdump -c 10
Aplicando vários parâmetros em um único comando
sudo tcpdump –nXS -i wlan0 -c 10 –s 1500

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, sequência inicial:final (total de bytes), 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 3738867842 (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 1715344972 (Y) e número de reconhecimento 3738867843 (X + 1).
  3. O terceiro segmento finaliza a abertura de conexão (ACK), com reconhecimento 1715344973 (Y + 1).
  4. O quarto segmento é uma requisição do cliente ao servidor, com flag P setado, com 746 Bytes de dados.


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