Tcpdump: mudanças entre as edições
m (Root moveu a página Laboratório: Captura de pacotes com tcpdump para Tcpdump) |
|||
(20 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
= | =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 | O '''tcpdump''' é um programa que permite capturar e analisar o tráfego de rede, e é executado a partir de um '''terminal'''. | ||
Em uma rede local, com os computadores conectados através de hubs | 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 [http://200.17.101.9/wiki/index.php/Laborat%C3%B3rio:_Aplica%C3%A7%C3%A3o_Web_e_Acesso_Remoto#Parte_2_-_Acesso_remoto_ao_servidor 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. | 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. | ||
Linha 21: | Linha 23: | ||
As '''páginas de manual''' do '''tcpdump''' trazem informações detalhadas do uso deste comando: | As '''páginas de manual''' do '''tcpdump''' trazem informações detalhadas do uso deste comando: | ||
man tcpdump | 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=== | ===Exemplos de filtros comuns para uso com tcpdump=== | ||
Linha 29: | Linha 54: | ||
tcpdump host src 200.17.101.9 and dst 192.168.10.50 | tcpdump host src 200.17.101.9 and dst 192.168.10.50 | ||
:Seleciona os pacotes cuja origem e destino sejam os hosts especificados. | :Seleciona os pacotes cuja origem e destino sejam os hosts especificados. | ||
tcpdump ether dst 00:02:a5:e:ec:10 | |||
:Captura o tráfego com destino no adaptador de rede cujo MAC é 00:02:a5:e:ec:10 | |||
;rede | |||
tcpdump src net 200.135.233.0/24 | |||
:ou | |||
tcpdump src net 200.135.233.0 mask 255.255.255.0 | |||
:Captura todo o tráfego com origem na rede 200.135.233.0/24 | |||
;Protocolo | ;Protocolo | ||
tcpdump host 200.17.101.9 and tcp | tcpdump host 200.17.101.9 and tcp | ||
::Seleciona todos os pacotes TCP cuja origem ou destino sejam o host especificado. | ::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 | ;Porta | ||
Linha 39: | Linha 75: | ||
tcpdump host 200.17.101.9 and port 80 | tcpdump host 200.17.101.9 and port 80 | ||
:Seleciona o tráfego Web cuja origem ou destino sejam o host especificado. | :Seleciona o tráfego Web cuja origem ou destino sejam o host especificado. | ||
;Combinando filtros: | |||
tcpdump tcp and \(port 22 or port 23\) | |||
:Captura o tráfego da porta telnet ou ssh | |||
tcpdump tcp and not port 80 | |||
:Captura todo o tráfego da rede, exceto os pacotes referentes a aplicação WWW | |||
===Captura de segmentos TCP=== | ===Captura de segmentos TCP=== | ||
Linha 49: | Linha 91: | ||
*flags: São indicadas no cabeçalho TCP. Cujo significado depende exclusivamente da combinação em que aparecem: | *flags: São indicadas no cabeçalho TCP. Cujo significado depende exclusivamente da combinação em que aparecem: | ||
**'''.''' (ACK) Indica reconhecimento válido | **'''.''' (ACK) Indica reconhecimento válido | ||
**R (RST) Usada para | **R (RST) Usada para recusa de conexão | ||
**S (SYN) Usada para abertura de conexão | **S (SYN) Usada para abertura de conexão | ||
**F (FIN) Usada para encerramento de conexão | **F (FIN) Usada para encerramento de conexão | ||
Linha 56: | Linha 98: | ||
*seq: Equivale ao numero de sequência do primeiro byte de dados deste segmento tcp. O formato é o seguinte: | *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) | **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 | **: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. | 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. | *win: Tamanho da janela de recepção. | ||
*urgent: Indica a existência de dados urgentes. | *urgent: Indica a existência de dados urgentes. | ||
*options: Indica a existência de opções. | *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. | |||
#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). | |||
#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). | |||
#O terceiro segmento finaliza a abertura de conexão (ACK), com reconhecimento 1715344973 (Y + 1). | |||
#O quarto segmento é uma requisição do cliente ao servidor, com flag P setado, com 746 Bytes de dados. | |||
---- | ---- |
Edição atual tal como às 15h44min de 1 de abril de 2015
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.
tcpdump ether dst 00:02:a5:e:ec:10
- Captura o tráfego com destino no adaptador de rede cujo MAC é 00:02:a5:e:ec:10
- rede
tcpdump src net 200.135.233.0/24
- ou
tcpdump src net 200.135.233.0 mask 255.255.255.0
- Captura todo o tráfego com origem na rede 200.135.233.0/24
- 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.
- Combinando filtros
tcpdump tcp and \(port 22 or port 23\)
- Captura o tráfego da porta telnet ou ssh
tcpdump tcp and not port 80
- Captura todo o tráfego da rede, exceto os pacotes referentes a aplicação WWW
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.
- primeiro:último (sem incluir o último)
- 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.
- 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).
- 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).
- O terceiro segmento finaliza a abertura de conexão (ACK), com reconhecimento 1715344973 (Y + 1).
- 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)