Como usar o tcpdump e 6 exemplos
Você está tentando capturar pacotes de dados para analisar o tráfego em sua rede? Talvez você seja um administrador de servidor que encontrou um problema e deseja monitorar os dados transmitidos na rede. Seja qual for a situação, o utilitário tcpdump Linux é o que você precisa.
Neste artigo, discutiremos o comando tcpdump em detalhes, junto com alguns guias sobre como instalar e usar o tcpdump em seu sistema Linux.
O que é o comando tcpdump?
Tcpdump é uma ferramenta poderosa de monitoramento de rede que permite ao usuário filtrar pacotes e tráfego em uma rede de forma eficiente. Você pode obter informações detalhadas relacionadas ao TCP / IP e aos pacotes transmitidos em sua rede. Tcpdump é um utilitário de linha de comando, o que significa que você pode executá-lo em servidores Linux sem um display.
Os administradores do sistema também podem integrar o utilitário tcpdump com o cron para automatizar várias tarefas, como o registro. Uma vez que seus inúmeros recursos o tornam bastante versátil, o tcpdump funciona como uma ferramenta de solução de problemas e de segurança.
Como instalar o tcpdump no Linux
Embora na maioria das vezes você encontre o tcpdump pré-instalado em seu sistema, algumas distribuições do Linux não vêm com o pacote. Portanto, pode ser necessário instalar manualmente o utilitário em seu sistema.
Você pode verificar se o tcpdump está instalado em seu sistema usando o comando which .
which tcpdump
Se a saída exibir um caminho de diretório ( / usr / bin / tcpdump ), seu sistema tem o pacote instalado. No entanto, se não, você pode fazer isso facilmente usando o gerenciador de pacotes padrão do seu sistema.
Para instalar o tcpdump em distribuições baseadas em Debian, como Ubuntu:
sudo apt-get install tcpdump
Instalar o tcpdump no CentOS também é fácil.
sudo yum install tcpdump
Em distribuições baseadas em Arch:
sudo pacman -S tcpdump
Para instalar no Fedora:
sudo dnf install tcpdump
Observe que o pacote tcpdump requer libcap como uma dependência, portanto, certifique-se de instalá-lo em seu sistema também.
Exemplos de Tcpdump para capturar pacotes de rede no Linux
Agora que você instalou com sucesso o tcpdump em sua máquina Linux, é hora de monitorar alguns pacotes. Como o tcpdump requer permissões de superusuário para executar a maioria das operações, você terá que adicionar sudo aos seus comandos.
1. Liste todas as interfaces de rede
Para verificar quais interfaces de rede estão disponíveis para captura, use o sinalizador -D com o comando tcpdump.
tcpdump -D
Passar o sinalizador –list-interfaces como um argumento retornará a mesma saída.
tcpdump --list-interfaces
A saída será uma lista de todas as interfaces de rede que estão presentes em seu sistema.
Depois de obter a lista de interfaces de rede, é hora de monitorar sua rede capturando pacotes em seu sistema. Embora você possa especificar qual interface deseja usar, o any argument comanda tcpdump para capturar pacotes de rede usando qualquer interface ativa.
tcpdump --interface any
O sistema exibirá a seguinte saída.
2. O formato de saída tcpdump
A partir da terceira linha, cada linha da saída denota um pacote específico capturado pelo tcpdump. Esta é a aparência da saída de um único pacote.
17:00:25.369138 wlp0s20f3 Out IP localsystem.40310 > kul01s10-in-f46.1e100.net.https: Flags [P.], seq 196:568, ack 1, win 309, options [nop,nop,TS val 117964079 ecr 816509256], length 33
Lembre-se de que nem todos os pacotes são capturados dessa forma, mas esse é o formato geral seguido pela maioria deles.
A saída contém as seguintes informações.
- Timestamp do pacote recebido
- Nome da interface
- Fluxo de pacotes
- Nome do protocolo de rede
- Endereço IP e detalhes da porta
- Sinalizadores TCP
- O número de sequência de dados no pacote
- Dados de confirmação
- Tamanho da janela
- Comprimento do pacote
O primeiro campo ( 17: 00: 25.369138 ) exibe o carimbo de hora quando o sistema enviou ou recebeu o pacote. A hora registrada é extraída da hora local do seu sistema.
O segundo e o terceiro campos denotam a interface usada e o fluxo do pacote. No trecho acima, wlp0s20f3 é o nome da interface sem fio e Out é o fluxo de pacotes.
O quarto campo inclui informações relacionadas ao nome do protocolo de rede. Geralmente, você encontrará dois protocolos – IP e IP6 , onde IP denota IPV4 e IP6 é para IPV6.
O próximo campo contém os endereços IP ou o nome do sistema de origem e destino. Os endereços IP são seguidos pelo número da porta.
O sexto campo na saída consiste em sinalizadores TCP. Existem vários sinalizadores que são usados na saída do tcpdump.
Nome da Bandeira | Valor | Descrição |
---|---|---|
SYN | S | Conexão iniciada |
FIN | F | Conexão finalizada |
EMPURRE | P | Os dados são enviados |
RST | R | A conexão foi reiniciada |
ACK | . | Reconhecimento |
A saída também pode conter uma combinação de vários sinalizadores TCP. Por exemplo, FLAG [f.] Significa um pacote FIN-ACK.
Avançando no fragmento de saída, o próximo campo contém o número de sequência ( seq 196: 568 ) dos dados no pacote. O primeiro pacote sempre tem um valor inteiro positivo e os pacotes seguintes usam o número de seqüência relativo para melhorar o fluxo de dados.
O próximo campo contém o número de confirmação ( ack 1 ) ou número de confirmação simples. O pacote capturado na máquina do remetente tem 1 como número de confirmação. Na extremidade do receptor, o número Ack é o valor do próximo pacote.
O nono campo na saída acomoda o tamanho da janela ( win 309 ), que é o número de bytes disponíveis no buffer de recebimento. Existem vários outros campos que seguem o tamanho da janela, incluindo o Tamanho Máximo do Segmento (MSS).
O último campo ( comprimento 33 ) contém o comprimento do pacote geral capturado pelo tcpdump.
3. Limite a contagem de pacotes capturados
Ao executar o comando tcpdump pela primeira vez, você pode notar que o sistema continua a capturar pacotes de rede até que você passe um sinal de interrupção. Você pode substituir esse comportamento padrão especificando a contagem de pacotes que deseja capturar de antemão usando o sinalizador -c .
tcpdump --interface any -c 10
O comando mencionado irá capturar dez pacotes de qualquer interface de rede ativa.
4. Filtrar pacotes com base em campos
Quando você está solucionando um problema, obter um grande bloco de saída de texto em seu terminal não torna isso mais fácil. É aí que o recurso de filtragem do tcpdump entra em ação. Você pode filtrar os pacotes de acordo com vários campos, incluindo host, protocolo, número da porta e muito mais.
Para capturar apenas pacotes TCP, digite:
tcpdump --interface any -c 5 tcp
Da mesma forma, se você deseja filtrar a saída usando o número da porta:
tcpdump --interface any -c 5 port 50
O comando mencionado acima recuperará apenas os pacotes transmitidos pela porta especificada.
Para obter os detalhes do pacote de um determinado host:
tcpdump --interface any -c 5 host 112.123.13.145
Se você deseja filtrar pacotes enviados ou recebidos por um host específico, use o argumento src ou dst com o comando.
tcpdump --interface any -c 5 src 112.123.13.145
tcpdump --interface any -c 5 dst 112.123.13.145
Você também pode usar os operadores lógicos e e ou para combinar duas ou mais expressões. Por exemplo, para obter pacotes que pertencem ao IP 112.123.13.145 de origem e usar a porta 80 :
tcpdump --interface any -c 10 src 112.123.13.145 and port 80
Expressões complexas podem ser agrupadas usando parênteses da seguinte maneira:
tcpdump --interface any -c 10 "(src 112.123.13.145 or src 234.231.23.234) and (port 45 or port 80)"
5. Visualize o conteúdo do pacote
Você pode usar os sinalizadores -A e -x com o comando tcpdump para analisar o conteúdo do pacote de rede. O sinalizador -A representa o formato ASCII e -x indica o formato hexadecimal .
Para visualizar o conteúdo do próximo pacote de rede capturado pelo sistema:
tcpdump --interface any -c 1 -A
tcpdump --interface any -c 1 -x
6. Salvar dados de captura em um arquivo
Se você quiser salvar os dados de captura para fins de referência, o tcpdump está lá para ajudá-lo. Basta passar o sinalizador -w com o comando padrão para gravar a saída em um arquivo em vez de exibi-la na tela.
tcpdump --interface any -c 10 -w data.pcap
A extensão do arquivo .pcap significa dados de captura de pacote . Você também pode emitir o comando mencionado anteriormente no modo detalhado usando o sinalizador -v .
tcpdump --interface any -c 10 -w data.pcap -v
Para ler um arquivo .pcap usando tcpdump, use o sinalizador -r seguido pelo caminho do arquivo. O -r significa Ler .
tcpdump -r data.pcap
Você também pode filtrar pacotes de rede a partir dos dados de pacote salvos no arquivo.
tcpdump -r data.pcap port 80
Monitorando o tráfego de rede no Linux
Se você recebeu a tarefa de administrar um servidor Linux, o comando tcpdump é uma ótima ferramenta para incluir em seu arsenal. Você pode facilmente corrigir problemas relacionados à rede, capturando pacotes transmitidos em sua rede em tempo real.
Mas antes de tudo isso, seu aparelho deve estar conectado à internet. Para iniciantes em Linux, até mesmo conectar-se ao Wi-Fi via linha de comando pode ser um pouco desafiador. Mas se você estiver usando as ferramentas certas, é um piscar de olhos.