Neste tutorial, veremos como trabalhar com tcpdump. É uma ferramenta de código aberto para linha de comando, é usada para monitorar a rede, podemos entendê-lo como um analisador de pacotes que passam pela rede onde você executa o programa. É usado em ambientes Unix, embora haja uma variante para Windows chamada WinDump. Pode ser do seu interesse um tutorial sobre EtherApe, que é uma ferramenta para ver o estado de nossa rede graficamente.
No tutorial trabalharemos no Linux, especificamente no Ubuntu 16.04, para que a ferramenta funcione precisamos executá-la com altos privilégios, exceto para certas opções, que serão necessárias.
Podemos usar tcpdump para várias tarefas, como depurar nossos aplicativos de rede, ler os dados que são enviados entre usuários pela rede em que estamos, etc. Vamos colocar sua sintaxe abaixo:
tcpdump [-aAbdDefhHIJKlLnNOpqRStuUvxX #] [-B size] [-c count] [-C file_size] [-E something: secret] [-F file] [-G seconds] [-i interface] [-j tstamptype] [- M segredo] [--number] [-Q in | out | inout] [-r arquivo] [-s snaplen] [--time-stamp-precision precision] [--immediate-mode] [-T type] [ --version] [-V file] [-w file] [-W filecount] [-y datalinktype] [-z command] [-Z user] [expression]Esta ferramenta possui um grande número de parâmetros que podemos usar, aqui veremos alguns.
Alguns parâmetros tcpdump
- -PARA: Imprima os pacotes em código ASCII.
- -x: Imprime os pacotes em hexadecimal.
- -D: Mostra as interfaces disponíveis.
- -c número: Fecha o programa quando o número indicado de pacotes tiver sido capturado.
- -eu interface: o programa escuta na interface especificada.
- -EU: Coloca a interface no modo monitor.
- -p: Não coloca a interface em modo promíscuo.
- -f arquivo: A saída é armazenada no arquivo que indicamos.
- -h: Mostra ajuda para seu uso.
Se quisermos ver todos os parâmetros disponíveis, no Linux usamos:
man tcpdumpO uso deste comando é mais completo do que a ajuda oferecida pelo parâmetro -h ou --ajuda, que nos mostraria apenas o seguinte:
Veremos 10 exemplos para começar nesta ferramenta poderosa.
ObservaçãoEm quase todos os exemplos você verá que o sudo é usado antes do tcpdump, como dito antes, é necessário executá-lo com altos privilégios, se você estiver usando o terminal como root então não é necessário colocar nada na frente do tcpdump. Se quiser interromper a captura, você pode combinar as chaves:
CTRL + C
Exemplo 1
O exemplo mais simples usando o parâmetro -PARA. Para isso executamos:
tcpdump -A
Vamos ver um exemplo com mais algum conteúdo.
Exemplo 2
Agora vamos filtrar por host e adicionar o modo detalhado com o parâmetro -v:
sudo tcpdump host 192.168.66.130 -vAbaixo está uma imagem usando o comando acima:
Para a imagem fiz um ping de outra máquina, então podemos ver o ICMP. Vamos passar para o terceiro exemplo.
Exemplo 3
Neste exemplo, vamos olhar os pacotes do mesmo host, mas desta vez os pacotes que têm a ver com a porta 80:
sudo tcpdump host 192.168.66.130 e porta 80 -vSe olharmos para a captura, veremos algo semelhante ao seguinte:
Você pode ver como essa ferramenta é fácil de manusear, vamos seguir em frente.
Exemplo 4
Vamos usar o exemplo 3 e vamos modificá-lo, queremos filtrar os pacotes de origem 192.168.66.130 que vão para a porta 80:
sudo tcpdump src host 192.168.66.130 e dst porta 80 -vVemos que usamos a condicional e, para que as duas condições sejam atendidas, também podemos usar ou, se quisermos que apenas uma delas seja atendida. Se olharmos as imagens, vemos uma solicitação POST.
Passamos para o quinto exemplo.
Exemplo 5
Vamos capturar pacotes indicando uma interface:
sudo tcpdump -i ens33ObservaçãoSua interface provavelmente é a eth0, você pode vê-la com o comando ifconfig, mas também com o parâmetro -D do tcpdump ela funcionará para nós, veremos no exemplo a seguir.
Abaixo você pode ver uma imagem da captura.
Vamos para o próximo.
Exemplo 6
Neste exemplo, a única coisa que vamos fazer é mostrar as interfaces disponíveis, para isso executamos:
tcpdump -DNeste caso, não é necessário ser root.
Vamos continuar.
Exemplo 7
Queremos capturar 3 pacotes que são destinados à porta 1987 e quando isso ocorrer, pare o programa:
sudo tcpdump -c 3 dst port 1987Podemos ver na imagem a seguir que apenas 3 pacotes são capturados:
Vamos ver mais alguns exemplos.
Exemplo 8
Quando estivermos interessados em obter todos os pacotes de tráfego tcp que não vão para uma determinada porta, por exemplo a porta 80, executaremos o seguinte:
sudo tcpdump não porta 80 e tcpA saída é semelhante, portanto, neste exemplo, nenhuma captura é definida. Vamos para o penúltimo exemplo.
Exemplo 9
Vamos capturar 2 pacotes de uma interface específica, e vamos mostrá-los em formato hexadecimal, para isso devemos executar:
sudo tcpdump -i ens33 -x -c 2Abaixo você pode ver a saída:
Bem, vamos passar para o último exemplo do tutorial.
Exemplo 10
Neste exemplo, vamos salvar a captura em um arquivo para ver mais tarde. A captura é limitada a 3 pacotes e uma interface é especificada, então vamos executar:
sudo tcpdump -w test.pcap -i ens33 -c 3Vamos ver uma captura de tela:
Se quisermos ler esse arquivo agora, temos que executar:
tcpdump -r test.pcapPodemos ver na seguinte imagem:
O tutorial do tcpdump já chegou até aqui, tem muitas possibilidades e muitas opções, então para aprender a manusear bem esta ferramenta é melhor praticar e descobrir todos os seus recursos aos poucos. Você também pode estar interessado em ler algo sobre a ferramenta netcat, então aqui está um link para um tutorial com exemplos:
Como usar o netcat
Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo