Para usar o comando tcpdump no modo promíscuo (-p) e exibir apenas os endereços IP de origem e destino, você pode combinar o modo de captura com um filtro de exibição.
O comando a ser usado é o seguinte:
sudo tcpdump -i <interface> -p -n
Entendendo o Comando
* sudo tcpdump: Executa o comando com privilégios de superusuário, o que é necessário para capturar pacotes e colocar a interface de rede em modo promíscuo.
* -i <interface>: Especifica a interface de rede que você quer monitorar. Por exemplo: eth0 (rede cabeada) ou wlan0 (Wi-Fi). Você pode encontrar a sua com o comando ip a.
* -p: Desativa o modo promíscuo.
* -n: Este é o ponto-chave para a sua pergunta. A opção -n impede que o tcpdump converta os endereços IP em nomes de domínio (ex: google.com) e os números de porta em nomes de serviço (ex: 80 para http). O resultado é uma saída mais limpa, mostrando apenas os endereços IP em formato numérico.
Com este comando, a saída no seu terminal será algo parecido com:
00:10:20.123456 IP 192.168.1.100.45678 > 172.217.169.110.443: Flags [P.], seq 123456789:123456800, ack 987654321, win 1024, length 12
Neste exemplo, você pode identificar facilmente o IP de envio (192.168.1.100) e o IP de recebimento (172.217.169.110), juntamente com suas respectivas portas.
sudo tcpdump -i <interface> -p -nn -A 'tcp port 80 or tcp port 443' | tee links.txt
sudo tcpdump -i wlp3s0 -p -nn -A 'tcp port 80 or tcp port 443' | tee links.txt
Entendendo o Comando
* -nn: Evita que o tcpdump converta endereços IP para nomes de host e números de porta para nomes de serviço (ex: transforma 80 em http). Isso agiliza a captura.
* -A: Mostra o conteúdo dos pacotes em formato ASCII, facilitando a leitura de texto.
* 'tcp port 80 or tcp port 443': Esse filtro restringe a captura apenas aos pacotes que usam as portas 80 (HTTP) e 443 (HTTPS). Essas são as portas padrão para navegação na web.
* | tee links.txt: Este comando, chamado de "pipe", envia a saída do tcpdump para o comando tee. O tee exibe o conteúdo no terminal e, ao mesmo tempo, salva em um arquivo chamado links.txt.
Considerações Importantes
Este comando é uma excelente base para começar a analisar o tráfego da rede, mas é importante ter em mente suas limitações, especialmente com o tráfego criptografado. Para uma análise mais profunda e fácil de usar, ferramentas como o Wireshark são mais recomendadas, pois elas têm uma interface gráfica que organiza os pacotes e permite a análise do conteúdo de forma mais eficiente.
A interface de rede pode ser enp2s0 ou wlp3s0.
Estes são nomes de interfaces de rede comuns em sistemas Linux. Eles seguem um esquema de nomenclatura mais recente e consistente, que substituiu nomes mais antigos como eth0 ou wlan0.
* enp2s0: Geralmente se refere a uma interface de rede Ethernet com fio. A sigla "en" vem de "ethernet".
* wlp3s0: Geralmente se refere a uma interface de rede sem fio (wireless). A sigla "wl" vem de "wireless local area network".
cabo$ sudo tcpdump -i enp2s0 | tee links.txt
Wifi$ sudo tcpdump -i wlp3s0 | tee links.txt
Para saber qual é o nome da interface de rede do seu computador, você pode usar um dos seguintes comandos no terminal:
ip a
ou
ifconfig
O resultado desses comandos mostrará uma lista das interfaces de rede ativas, com seus respectivos nomes e endereços IP.
sudo tcpdump -A -i any 'port 80 or port 443' > trafego_web.txt
-i any: Captura o tráfego em todas as interfaces de rede (Wi-Fi, Ethernet, etc.). Você pode substituir any pelo nome de uma interface específica, como eth0 ou wlan0, se preferir.
Para ver apenas as requisições e respostas DNS e salvar o resultado em um arquivo, o comando mais recomendado é este:
sudo tcpdump -p -i any 'port 53' -w dns_traffic.pcap
-p: Este sinalizador coloca a interface de rede em modo não-promíscuo. Em termos simples, isso significa que o tcpdump irá capturar apenas os pacotes que são enviados para ou da sua máquina, ignorando todo o tráfego de outros dispositivos na mesma rede. Isso é útil para reduzir o ruído e focar apenas no seu próprio tráfego.
-i any: Captura o tráfego em todas as interfaces de rede do seu sistema. Você pode substituir any pelo nome de uma interface específica, como eth0 ou wlan0, se preferir.
'port 53': Este é o filtro. Ele instrui o tcpdump a capturar apenas o tráfego da porta 53, que é a porta padrão para o protocolo DNS (Domain Name System).
-w dns_traffic.pcap: Salva a saída da captura em um arquivo binário chamado dns_traffic.pcap. Este é o formato padrão para análise de pacotes e pode ser aberto e analisado em detalhes com ferramentas como o Wireshark.
Se você precisa de um arquivo de texto, pode usar o seguinte comando:
sudo tcpdump -p -A -i any 'port 53' > dns_traffic.txt
sudo tcpdump -A -i any 'port 53' | tee dns_traffic.txt
Para ter uma saída do tcpdump que combine o tráfego de DNS e HTTP , você precisa usar um comando que filtre os pacotes por porta e os exiba em formato de texto.
O comando que produz esse tipo de saída é:
sudo tcpdump -A 'port 53 or port 80' | tee tcpdump.log
sudo tcpdump: Inicia o comando com privilégios de administrador, que são necessários para capturar o tráfego de rede.
-A: Este sinalizador exibe o conteúdo de cada pacote em formato ASCII. Isso é crucial para que você possa ler a requisição HTTP: GET / em texto simples. Sem este sinalizador, você não veria o conteúdo das requisições web.
'port 53 or port 80': Este é o filtro.
port 53: Filtra o tráfego do protocolo DNS, que usa a porta 53.
or: Combina os dois filtros.
port 80: Filtra o tráfego do protocolo HTTP, que usa a porta 80.
A saída padrão do tcpdump já mostra os endereços IP, as portas e os sinalizadores do TCP ([S], [S.], [.], [P.]). O uso do -A simplesmente adiciona a camada de dados que permite ver o conteúdo legível da requisição HTTP.
ou
sudo tcpdump -A 'not host [SEU_IP_AQUI] and (port 53 or port 80)' | tee tcpdump.log
not host [SEU_IP_AQUI]: Esta é a parte nova. Ela instrui o tcpdump a ignorar qualquer pacote que tenha o seu endereço IP tanto como origem quanto como destino.
(port 53 or port 80): Esta parte continua filtrando o tráfego apenas para os protocolos DNS e HTTP.
Observação: O comando acima, por padrão, colocará a sua placa de rede em modo promíscuo. Isso é necessário para que ela capture e exiba o tráfego que está passando pela rede, mesmo que não seja destinado ao seu computador.
Sim, as aspas simples ' ' são obrigatórias e devem ser digitadas exatamente como estão no comando.
As aspas funcionam como um agrupador. Elas dizem ao terminal para tratar tudo que está dentro delas como uma única instrução para o comando tcpdump.
Sem as aspas, o terminal interpretaria as palavras not, and e or como comandos ou operadores separados do sistema, em vez de filtros para o tcpdump. Isso causaria um erro de sintaxe.