Quando a rede não funciona como deveria, ou quando é necessário simplesmente entender o que exatamente está sendo transmitido pelos cabos, o tcpdump vem em seu auxílio. É como um estetoscópio para o seu servidor — uma ferramenta que permite «ouvir» o tráfego de rede em tempo real. Pode parecer complicado à primeira vista, mas na verdade é um auxiliar muito poderoso e confiável para o administrador de sistemas e qualquer utilizador curioso do Linux.
Neste artigo, não vamos nos aprofundar na teoria das redes. Em vez disso, vamos direto ao ponto e examinar exemplos específicos de comandos que você pode aplicar no seu trabalho diário. Você aprenderá a filtrar pacotes por endereços IP, portas e tipos de protocolos para encontrar rapidamente as informações necessárias no mar de dados da rede.
Os nossos exemplos irão ajudá-lo a diagnosticar problemas de ligação, rastrear atividades suspeitas ou simplesmente satisfazer a sua curiosidade sobre como os programas se comunicam entre si. Vamos começar com os comandos mais simples e passar gradualmente para cenários de utilização mais avançados.
O Tcpdump é um utilitário útil no Linux para monitorizar e analisar o tráfego de rede, frequentemente utilizado por administradores e programadores para compreender o que se passa na rede: por exemplo, porque é que um serviço não funciona, quem está a sobrecarregar o canal ou se existem ligações suspeitas. Com comandos simples, é possível filtrar o tráfego por IP, portas, protocolos ou interfaces, guardá-lo para análise posterior ou visualizá-lo em tempo real. É como se conectar a uma conversa entre computadores e entender o que eles estão a comunicar.
- Instalação
- Sintaxe
- Opções
- Filtros
- Exemplos de utilização
- Visualização da lista de interfaces
- Captura normal de tráfego
- Captura de tráfego com a opção -v
- Opções -w e -r
- Filtragem por IP
- Filtragem por HOST
- Aplicação dos filtros and e or
- Filtro port e portrange
- Filtragem por protocolos
- Filtro net
- Filtragem por tamanho do pacote
Instalação
A maioria dos desenvolvedores de sistemas operacionais baseados em Linux inclui o utilitário tcpdump na lista de pré-instalados, mas se por algum motivo ele não estiver presente na sua distribuição, você sempre pode baixá-lo e instalá-lo através do «Terminal». Se o seu sistema operativo é baseado no Debian, como o Ubuntu, Linux Mint, Kali Linux e similares, é necessário executar este comando:
sudo apt install tcpdump
Durante a instalação, será necessário inserir a senha. Observe que ela não é exibida ao ser digitada. Além disso, para confirmar a instalação, é necessário introduzir o símbolo «D» e pressione Enter.
Se tiver Red Hat, Fedora ou CentOS, o comando para instalação será o seguinte:
sudo yam install tcpdump
Depois que o utilitário estiver instalado, ele poderá ser usado imediatamente. Isso e muito mais será explicado mais adiante no texto.
Sintaxe
Como qualquer outro comando, o tcpdump tem a sua própria sintaxe. Conhecendo-a, poderá definir todos os parâmetros necessários que serão considerados ao executar o comando. A sintaxe é a seguinte:
tcpdump opções -i interface filtros
Ao usar o comando, é necessário especificar a interface para rastreamento. Filtros e opções não são variáveis obrigatórias, mas permitem uma configuração mais flexível.
Opções
Embora não seja obrigatório especificar a opção, é necessário listar todas as opções disponíveis. A tabela não mostra a lista completa, mas apenas as opções mais populares, que são mais do que suficientes para resolver a maioria das tarefas.
| Opção | Definição |
|---|---|
| -A | Permite classificar pacotes com formato ASCII |
| -l | Adiciona a função de rolagem |
| -i | Após a introdução, é necessário indicar a interface de rede que será monitorizada. Para começar a monitorizar todas as interfaces, introduza a palavra «any» após a opção |
| -c | Encerra o processo de rastreamento após verificar o número especificado de pacotes |
| -w | Gera um ficheiro de texto com o relatório da verificação |
| -e | Mostra o nível de conexão à Internet do pacote de dados |
| -L | Exibe apenas os protocolos suportados pela interface de rede especificada |
| -C | Cria outro ficheiro durante a gravação do pacote, se o seu tamanho for maior do que o especificado |
| -r | Abre o ficheiro para leitura, que foi criado com a opção -w |
| -j | O formato TimeStamp será usado para gravar pacotes |
| -J | Permite visualizar todos os formatos TimeStamp disponíveis |
| -G | Serve para criar um ficheiro com registos. A opção também requer a indicação de um valor temporário, após o qual um novo registo será criado |
| -v, -vv, -vvv | Dependendo do número de caracteres na opção, a saída do comando será mais detalhada (o aumento é diretamente proporcional ao número de caracteres) |
| -f | Mostra o nome de domínio dos endereços IP na saída |
| -F | Permite ler informações não da interface de rede, mas do ficheiro especificado |
| -D | Mostra todas as interfaces de rede que podem ser usadas |
| -n | Desativa a exibição de nomes de domínio |
| -Z | Define o utilizador sob cuja conta todos os ficheiros serão criados |
| -K | Ignora a análise das somas de verificação |
| -q | Demonstração de informações resumidas |
| -H | Permite detectar cabeçalhos 802.11s |
| -I | Usado ao capturar pacotes no modo monitor |
Depois de explicar as opções, passaremos diretamente às suas aplicações. Por enquanto, vamos examinar os filtros.
Filtros
Como mencionado no início do artigo, é possível adicionar filtros à sintaxe do tcpdump. A seguir, serão apresentados os mais populares:
| Filtro | Definição |
|---|---|
| host | Serve para indicar o nome do host |
| net | Indica o IP da sub-rede e da rede |
| ip | Serve para indicar o endereço do protocolo |
| src | Exibe os pacotes que foram enviados a partir do endereço especificado |
| dst | Exibe os pacotes que foram recebidos pelo endereço indicado |
| arp, udp, tcp | Filtragem por um dos protocolos |
| port | Exibe informações relacionadas a uma porta específica |
| and, or | Serve para combinar vários filtros no comando |
| less, greater | Exibe pacotes menores ou maiores que o tamanho especificado |
Todos os filtros acima podem ser combinados entre si, de modo que, na saída do comando, você verá apenas as informações que deseja ver. Para entender melhor o uso dos filtros acima, vale a pena dar alguns exemplos.
Exemplos de utilização
A seguir, apresentaremos as opções de sintaxe do comando tcpdump mais utilizadas. Não será possível listar todas elas, pois suas variações podem ser infinitas.
Visualização da lista de interfaces
Recomenda-se que cada utilizador verifique inicialmente a lista de todas as suas interfaces de rede que podem ser rastreadas. Pela tabela acima, sabemos que para isso é necessário usar a opção -D, portanto, execute o seguinte comando no terminal:
sudo tcpdump -D
Exemplo:
Como pode observar, no exemplo há oito interfaces que podem ser visualizadas com o comando tcpdump. O artigo apresentará exemplos com ppp0, pode usar qualquer outro.
Captura normal de tráfego
Se precisar de monitorizar uma interface de rede, pode fazê-lo utilizando a opção -i. Não se esqueça de indicar o nome da interface após a sua introdução. Aqui está um exemplo da execução de tal comando:
sudo tcpdump -i ppp0
Atenção: antes do comando, é necessário inserir «sudo», pois ele requer direitos de superutilizador.
Exemplo:
Observação: após pressionar Enter no «Terminal», os pacotes interceptados serão exibidos continuamente. Para interromper o fluxo, pressione a combinação de teclas Ctrl+C.
Se executar o comando sem opções e filtros adicionais, verá o seguinte formato de exibição dos pacotes monitorados:
22:18:52.597573 IP vrrp-topf2.p.mail.ru. https > 10.0.6.67.35482: Flags [P.], seq 1:595, ack 1118, win 6494, options [nop,nop,TS val 257060077 ecr 697597623], length 594
Onde está destacado a cor:
| Azul | Tempo de receção do pacote |
| A laranja | Versão do protocolo |
| Verde | Endereço do remetente |
| Roxo | Endereço do destinatário |
| Cinza | Informações adicionais sobre tcp |
| A vermelho | Tamanho do pacote (exibido em bytes) |
Esta sintaxe tem a capacidade de exibição na janela «Terminal» sem utilizar opções adicionais.
Captura de tráfego com a opção -v
Como se sabe pela tabela, a opção -v permite aumentar a quantidade de informações. Vamos analisar um exemplo. Vamos verificar a mesma interface:
sudo tcpdump -v -i ppp0
Exemplo:

Aqui, pode-se observar que a seguinte linha apareceu na saída:
IP (tos 0x0, ttl 58, id 30675, offset 0, flags [DF], proto TCP (6), length 52
Onde está destacado a cor:
| A laranja | Versão do protocolo |
| Azul | Duração do protocolo |
| Verde | Comprimento do cabeçalho do campo |
| Roxo | Versão do pacote tcp |
| A vermelho | Tamanho do pacote (exibido em bytes) |
Também pode escrever a opção -vv ou -vvv, o que permitirá aumentar ainda mais o volume de informações exibidas no ecrã.
Opções -w e -r
Na tabela de opções, foi mencionada a possibilidade de guardar todos os dados apresentados num ficheiro separado, para que possam ser visualizados posteriormente. Isso é feito pela opção -w. Na sintaxe do comando. É bastante simples de usar, basta indicá-la no comando e, em seguida, escrever o nome do futuro ficheiro com a extensão «.pcap». Vamos ver tudo com um exemplo:
sudo tcpdump -i ppp0 -w file.pcap
Exemplo:
Atenção: durante a gravação dos registos no ficheiro, nenhum texto é exibido no ecrã do «Terminal».
Quando quiser visualizar a saída gravada, é necessário usar a opção -r, após o qual escrever o nome do ficheiro gravado anteriormente. É aplicada sem outras opções e filtros:
sudo tcpdump -r file.pcap
Exemplo:

Ambas as opções são ideais para casos em que é necessário guardar grandes volumes de texto para análise posterior.
Filtragem por IP
A partir da tabela de filtros, sabemos que dst permite exibir no ecrã da consola apenas os pacotes que foram recebidos pelo endereço especificado na sintaxe do comando. Desta forma, é muito conveniente visualizar os pacotes recebidos pelo seu computador. Para isso, basta especificar o seu endereço IP no comando:
sudo tcpdump -i ppp0 ip dst 10.0.6.67
Exemplo:
Como se pode observar, além de dst, no comando, também registámos o filtro ip. Em outras palavras, dissemos ao computador que, ao selecionar os pacotes, ele deve prestar atenção ao endereço IP deles, e não a outros parâmetros.
Por IP, também é possível filtrar os pacotes enviados. No exemplo, vamos usar novamente o nosso IP. Ou seja, agora vamos rastrear quais pacotes são enviados do nosso computador para outros endereços. Para isso, é necessário executar o seguinte comando:
sudo tcpdump -i ppp0 ip src 10.0.6.67
Exemplo:

Como se pode observar, na sintaxe do comando, alterámos o filtro dst na src, dizendo assim à máquina para procurar o remetente pelo IP.
Filtragem por HOST
Por analogia com o IP no comando, podemos especificar o filtro host, para filtrar os pacotes com o host de interesse. Ou seja, na sintaxe, em vez do endereço IP do remetente/destinatário, será necessário especificar o seu host. Fica assim:
sudo tcpdump -i ppp0 dst host google-public-dns-a.google.com
Exemplo:
Na imagem, pode ver-se que em «Terminal» são exibidos apenas os pacotes que foram enviados do nosso IP para o host google.com. Como se pode entender, em vez do host google, é possível inserir qualquer outro.
Tal como no caso da filtragem por IP, na sintaxe dst pode ser substituído por src, para ver os pacotes que são enviados para o seu computador:
sudo tcpdump -i ppp0 src host google-public-dns-a.google.com
Atenção: o filtro host deve vir depois de dst ou src, caso contrário, o comando apresentará um erro. No caso da filtragem por IP, ao contrário, dst e src vêm antes do filtro ip.
Aplicação dos filtros and e or
Se precisar usar vários filtros ao mesmo tempo em um único comando, use o filtro and ou or (depende do caso). Ao indicar filtros na sintaxe e separá-los por este operador, irá «forçá-los» a funcionar como um só. No exemplo, fica assim:
sudo tcpdump -i ppp0 ip dst 95.47.144.254 or ip src 95.47.144.254
Exemplo:
A partir da sintaxe do comando, vemos que queremos exibir na tela «Terminal» todos os pacotes que foram enviados para o endereço 95.47.144.254 e os pacotes recebidos por esse mesmo endereço. Também pode alterar algumas variáveis nesta expressão. Por exemplo, em vez de IP, indique HOST ou substitua diretamente os próprios endereços.
Filtro port e portrange
Filtro port é ideal para os casos em que é necessário obter informações sobre pacotes com uma porta específica. Assim, se precisar ver apenas respostas ou consultas DNS, deve indicar a porta 53:
sudo tcpdump -vv -i ppp0 port 53
Exemplo:
Se quiser visualizar os pacotes http, é necessário introduzir a porta 80:
sudo tcpdump -vv -i ppp0 port 80
Exemplo:
Além disso, é possível rastrear imediatamente o intervalo de portas. Para isso, aplica-se o filtro portrange:
sudo tcpdump portrange 50-80
Como se pode observar, em conjunto com o filtro portrange não é necessário especificar opções adicionais. Basta definir o intervalo.
Filtragem por protocolos
Você também pode exibir na tela apenas o tráfego que corresponde a algum protocolo. Para isso, é necessário usar o nome desse protocolo como filtro. Vamos analisar um exemplo udp:
sudo tcpdump -vvv -i ppp0 udp
Exemplo:

Como pode ser visto na imagem, após a execução do comando em «Terminal» apenas os pacotes com o protocolo udp. Assim, pode realizar a filtragem e por outros, por exemplo, arp:
sudo tcpdump -vvv -i ppp0 arp
ou tcp:
sudo tcpdump -vvv -i ppp0 tcp
Filtro net
Operador net ajuda a filtrar pacotes com base na designação da sua rede. Usá-lo é tão simples quanto os outros — basta especificar o atributo na sintaxe net), e, em seguida, insira o endereço da rede. Aqui está um exemplo de tal comando:
sudo tcpdump -i ppp0 net 192.168.1.1
Exemplo:
Filtragem por tamanho do pacote
Ainda não analisámos dois filtros interessantes: less e greater. A partir da tabela com filtros, sabemos que eles servem para exibir pacotes de dados maiores ()less ou menor que (greater do que o tamanho especificado após a inserção do atributo.
Suponhamos que queremos monitorizar apenas os pacotes que não excedam 50 bits, então o comando terá a seguinte aparência:
sudo tcpdump -i ppp0 less 50
Exemplo:

Agora vamos exibir em «Terminal» pacotes com tamanho superior a 50 bits:
sudo tcpdump -i ppp0 greater 50
Exemplo:
Como se pode observar, eles são aplicados da mesma forma, a diferença está apenas no nome do filtro.
Como pode ver, o tcpdump é uma ferramenta incrivelmente poderosa para quem precisa dar uma olhada nos bastidores da interação de rede. Ele permite ver em tempo real o que realmente está a ser transmitido pelos cabos ou pelo ar, transformando problemas de rede abstratos em dados concretos que podem ser analisados.
Comece com comandos simples, como filtragem por porta ou endereço IP. Gradualmente, com a prática, poderá construir filtros mais complexos para capturar com precisão os pacotes necessários. Não tenha medo de experimentar na sua máquina de teste — essa é a melhor maneira de entender como tudo funciona.
Em última análise, saber usar o tcpdump é uma superhabilidade para um administrador de sistemas ou programador. Ele proporciona independência no diagnóstico de problemas, sejam eles falhas na conexão, atividades suspeitas ou simplesmente o desejo de entender a lógica de funcionamento de um determinado serviço de rede. Esta ferramenta se tornará um auxiliar confiável no seu arsenal.









