tcpdump

Guia do iniciante TCPDUMP

Guia do iniciante TCPDUMP
Tcpdump é um analisador de pacotes de rede de dados sem fio gratuito e de código aberto que funciona na interface de linha de comando. É a ferramenta CLI mais comumente usada para analisar o tráfego de rede. O Tcpdump permite que os usuários vejam, leiam ou capturem o tráfego de rede transmitido por uma rede conectada ao computador. É útil na administração do sistema, monitoramento do tráfego da rede (para problemas ou não).

Originalmente, foi escrito em 1988 por quatro trabalhadores do Network Research Group no Lawrence Berkeley Laboratory na Califórnia. Foi organizado onze anos depois por Micheal Richardson e Bill Fenner em 1999, que criaram o site tcpdump. Tcpdump funciona em todos os sistemas operacionais do tipo Unix. A versão do Windows do Tcpdump é chamada de WinDump e usa WinPcap, a alternativa do Windows para libpcap.

Use o snap para instalar o tcpdump:

$ sudo snap install tcpdump

Use seu gerenciador de pacotes para instalar o tcpdump:

$ sudo apt-get install tcpdump (Debian / Ubuntu)
$ sudo dnf install tcpdump (CentOS / RHEL 6 e 7)
$ sudo yum install tcpdump (Fedora / CentOS / RHEL 8)

Vamos ver diferentes usos e saídas conforme exploramos o tcpdump!

UDP

Tcpdump também pode despejar pacotes UDP. Usaremos uma ferramenta netcat (nc) para enviar um pacote UDP e, em seguida, despejá-lo.

$ echo -n "tcpdumper" | nc -w 1 -u localhost 1337

No comando fornecido acima, enviamos um pacote UDP que consiste na string “Tcpdumper” para a porta UDP 1337 através da localhost. O Tcpdump captura o pacote que está sendo enviado pela porta UDP 1337 e o exibe.

Vamos agora despejar este pacote usando tcpdump.

$ sudo tcpdump -i lo udp porta 1337 -vvv -X

Este comando irá capturar e mostrar os dados capturados dos pacotes em ASCII, bem como em formato hexadecimal.

tcpdump: ouvindo em lo, tipo de link EN10 MB (Ethernet), comprimento de instantâneo 262144 bytes
04:39:39.072802 IP (tos 0x0, ttl 64, id 32650, deslocamento 0, sinalizadores [DF], proto UDP (17), comprimento 37)
localhost.54574> localhost.1337: [udp cksum 0xfe24 inválido -> 0xeac6!] UDP, comprimento 9
0x0000: 4500 0025 7f8a 4000 4011 bd3b 7f00 0001 E…%… @.@…;…
0x0010: 7f00 0001 d52e 0539 0011 fe24 7463 7064… 9… $ tcpd
0x0020: 756d 7065 72 umper

Como podemos ver, o pacote foi enviado para a porta 1337, e o comprimento era 9 como string tcpdumper tem 9 bytes. Também podemos ver que o pacote foi exibido em formato hexadecimal.

DHCP

O Tcpdump também pode realizar investigações em pacotes DHCP na rede. O DHCP usa a porta UDP nº 67 ou 68, então vamos definir e limitar o tcpdump apenas para pacotes DHCP. Suponha que estejamos usando uma interface de rede wi-fi.
O comando usado aqui será:

$ sudo tcpdump -i wlan0 porta 67 ou porta 68 -e -n -vvv
tcpdump: ouvindo em wlan0, tipo de link EN10 MB (Ethernet), comprimento de instantâneo 262144 bytes
03:52:04.004356 00: 11: 22: 33: 44: 55> 00: 11: 22: 33: 44: 66, ethertype IPv4 (0x0800), comprimento 342: (tos 0x0, ttl 64, id 39781, deslocamento 0, sinalizadores [DF ], proto UDP (17), comprimento 328)
192.168.10.21.68> 192.168.10.1.67: [udp sum ok] BOOTP / DHCP, solicitação de 00: 11: 22: 33: 44: 55, comprimento 300, xid 0xfeab2d67, Sinalizadores [nenhum] (0x0000)
Cliente-IP 192.168.10.16
Endereço Ethernet do cliente 00: 11: 22: 33: 44: 55
Extensões Vendor-rfc1048
Cookie mágico 0x63825363
Mensagem DHCP (53), comprimento 1: Liberação
ID do servidor (54), comprimento 4: 192.168.10.1
Nome do host (12), comprimento 6: "papagaio"
END (255), comprimento 0
PAD (0), comprimento 0, ocorre 42

DNS

DNS, também conhecido como Domain Name System, confirma fornecer o que você está procurando, combinando o nome de domínio com o endereço de domínio. Para inspecionar a comunicação de nível de DNS do seu dispositivo pela Internet, você pode usar o tcpdump da seguinte maneira. DNS usa a porta UDP 53 para comunicação.

$ sudo tcpdump -i wlan0 porta udp 53
tcpdump: ouvindo em wlan0, tipo de link EN10 MB (Ethernet), comprimento de instantâneo 262144 bytes
04:23:48.516616 IP (tos 0x0, ttl 64, id 31445, deslocamento 0, sinalizadores [DF], proto UDP (17), comprimento 72)
192.168.10.16.45899> um.1.1.1.domínio: [udp sum ok] 20852+ A? Mozilla.cloudflare-dns.com. (44)
04:23:48.551556 IP (tos 0x0, ttl 60, id 56385, deslocamento 0, sinalizadores [DF], proto UDP (17), comprimento 104)
1.1.1.1.domínio> 192.168.10.16.45899: [udp sum ok] 20852 q: A? Mozilla.cloudflare-dns.com. 2/0/0 mozilla.cloudflare-dns.com. [24s] A 104.16.249.249, Mozilla.cloudflare-dns.com. [24s] A 104.16.248.249 (76)
04:23:48.648477 IP (tos 0x0, ttl 64, id 31446, deslocamento 0, sinalizadores [DF], proto UDP (17), comprimento 66)
192.168.10.16.34043> um.1.1.1.domínio: [udp sum ok] 40757+ PTR? 1.1.1.1.em-addr.arpa. (38)
04:23:48.688731 IP (tos 0x0, ttl 60, id 56387, deslocamento 0, sinalizadores [DF], proto UDP (17), comprimento 95)
1.1.1.1.domínio> 192.168.10.16.34043: [udp sum ok] 40757 q: PTR? 1.1.1.1.em-addr.arpa. 1/0/0 1.1.1.1.em-addr.arpa. [26m53s] PTR um.1.1.1. (67)

ARP

O protocolo de resolução de endereço é usado para descobrir o endereço da camada de link, como um endereço MAC. Ele está associado a um determinado endereço de camada da Internet, normalmente um endereço IPv4.

Estamos usando o tcpdump para capturar e ler os dados transportados nos pacotes arp. O comando é tão simples como:

$ sudo tcpdump -i wlan0 arp -vvv
tcpdump: ouvindo em wlan0, tipo de link EN10 MB (Ethernet), comprimento de instantâneo 262144 bytes
03:44:12.023668 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 conto 192.168.10.2, comprimento 28
03:44:17.140259 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.21 diga 192.168.10.1, comprimento 28
03:44:17.140276 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.10.21 é-at 00: 11: 22: 33: 44: 55 (oui desconhecido), comprimento 28
03:44:42.026393 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.10.1 conto 192.168.10.2, comprimento 28

ICMP

ICMP, também conhecido como Internet Control Message Protocol, é um protocolo de suporte no conjunto de protocolos da Internet. ICMP é usado como um protocolo informativo.

Para visualizar todos os pacotes ICMP em uma interface, podemos usar este comando:

$ sudo tcpdump icmp -vvv
tcpdump: ouvindo em wlan0, tipo de link EN10 MB (Ethernet), comprimento de instantâneo 262144 bytes
04:26:42.123902 IP (tos 0x0, ttl 64, id 14831, deslocamento 0, sinalizadores [DF], proto ICMP (1), comprimento 84)
192.168.10.16> 192.168.10.1: solicitação de eco ICMP, id 47363, seq 1, comprimento 64
04:26:42.128429 IP (tos 0x0, ttl 64, id 32915, deslocamento 0, sinalizadores [nenhum], proto ICMP (1), comprimento 84)
192.168.10.1> 192.168.10.16: resposta de eco ICMP, id 47363, seq 1, comprimento 64
04:26:43.125599 IP (tos 0x0, ttl 64, id 14888, deslocamento 0, sinalizadores [DF], proto ICMP (1), comprimento 84)
192.168.10.16> 192.168.10.1: solicitação de eco ICMP, id 47363, seq 2, comprimento 64
04:26:43.128055 IP (tos 0x0, ttl 64, id 32916, deslocamento 0, sinalizadores [nenhum], proto ICMP (1), comprimento 84)
192.168.10.1> 192.168.10.16: resposta de eco ICMP, id 47363, seq 2, comprimento 64

NTP

NTP é um protocolo de rede projetado especificamente para sincronizar a hora em uma rede de máquinas. Para capturar o tráfego no ntp:

$ sudo tcpdump dst, porta 123
04:31:05.547856 IP (tos 0x0, ttl 64, id 34474, deslocamento 0, sinalizadores [DF], proto UDP (17), comprimento 76)
192.168.10.16.ntp> time-b-wwv.nista.gov.ntp: [udp sum ok] NTPv4, Cliente, comprimento 48
Indicador de salto: relógio não sincronizado (192), Stratum 0 (não especificado), pesquisa 3 (8s), precisão -6
Atraso de raiz: 1.000000, Dispersão de raiz: 1.000000, ID de referência: (não especificado)
Data e hora de referência: 0.000000000
Timestamp do Originador: 0.000000000
Receber carimbo de data / hora: 0.000000000
Transmitir data e hora: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Originador - Receber Timestamp: 0.000000000
Originador - Data e hora de transmissão: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
04:31:05.841696 IP (tos 0x0, ttl 56, id 234, deslocamento 0, sinalizadores [nenhum], proto UDP (17), comprimento 76)
time-b-wwv.nista.gov.ntp> 192.168.10.16.ntp: [udp sum ok] NTPv3, servidor, comprimento 48
Indicador de salto: (0), Estrato 1 (referência primária), pesquisa 13 (8192s), precisão -29
Atraso de raiz: 0.000244, Dispersão de raiz: 0.000488, ID de referência: NIST
Referência de data e hora: 3825358208.000000000 (2021-03-21T23: 30: 08Z)
Timestamp do Originador: 3825358265.547764155 (2021-03-21T23: 31: 05Z)
Receber carimbo de data / hora: 3825358275.028660181 (2021-03-21T23: 31: 15Z)
Transmitir Timestamp: 3825358275.028661296 (2021-03-21T23: 31: 15Z)
Originador - Receber Timestamp: +9.480896026
Originador - Data e hora de transmissão: +9.480897141

SMTP

SMTP ou Simple Mail Transfer Protocol é usado principalmente para e-mails. O Tcpdump pode usar isso para extrair informações úteis de e-mail. Por exemplo, para extrair destinatários / remetentes de e-mail:

$ sudo tcpdump -n -l porta 25 | grep -i 'CORREIO DE \ | RCPT PARA'

IPv6

IPv6 é a “próxima geração” de IP, fornecendo uma ampla gama de endereços IP. IPv6 ajuda a alcançar a saúde da Internet a longo prazo.

Para capturar o tráfego IPv6, use o filtro ip6 especificando os protocolos TCP e UDP usando proto 6 e proto-17.

$ sudo tcpdump -n -i any ip6 -vvv
tcpdump: tipo de link de dados LINUX_SLL2
tcpdump: ouvindo em qualquer, tipo de link LINUX_SLL2 (Linux cozido v2), comprimento do instantâneo 262144 bytes
04:34:31.847359 lo In IP6 (flowlabel 0xc7cb6, hlim 64, próximo cabeçalho UDP (17) comprimento da carga útil: 40) :: 1.49395> :: 1.49395: [udp cksum 0x003b inválido -> 0x3587!] UDP, comprimento 32
04:34:31.859082 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) payload length: 32) :: 1.49395> :: 1.49395: [udp cksum 0x0033 -> 0xeaef!] UDP, comprimento 24
04:34:31.860361 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) payload length: 40) :: 1.49395> :: 1.49395: [udp cksum 0x003b ruim -> 0x7267!] UDP, comprimento 32
04:34:31.871100 lo In IP6 (flowlabel 0xc7cb6, hlim 64, next-header UDP (17) payload length: 944) :: 1.49395> :: 1.49395: [udp cksum 0x03c3 inválido -> 0xf890!] UDP, comprimento 936
4 pacotes capturados
12 pacotes recebidos pelo filtro
0 pacotes descartados pelo kernel

O '-c 4' fornece uma contagem de pacotes de até 4 pacotes apenas. Podemos especificar o número de pacotes para n e capturar n pacotes.

HTTP

O protocolo de transferência de hipertexto é usado para transferir dados de um servidor da web para um navegador para visualizar páginas da web. HTTP usa comunicação de formulário TCP. Especificamente, a porta TCP 80 é usada.

Para imprimir todos os pacotes IPv4 HTTP de e para a porta 80:

tcpdump: ouvindo em wlan0, tipo de link EN10 MB (Ethernet), comprimento de instantâneo 262144 bytes
03:36:00.602104 IP (tos 0x0, ttl 64, id 722, deslocamento 0, sinalizadores [DF], proto TCP (6), comprimento 60)
192.168.10.21.33586> 192.168.10.1.http: Sinalizadores [S], cksum 0xa22b (correto), seq 2736960993, win 64240, opções [mss 1460, sackOK, TS val 389882294 ecr 0, nop, wscale 10], comprimento 0
03:36:00.604830 IP (tos 0x0, ttl 64, id 0, deslocamento 0, sinalizadores [DF], proto TCP (6), comprimento 60)
192.168.10.1.http> 192.168.10.21.33586: Sinalizadores [S.], cksum 0x2dcc (correto), seq 4089727666, ack 2736960994, win 14480, opções [mss 1460, sackOK, TS val 30996070 ecr 389882294, nop, wscale 3], comprimento 0
03:36:00.604893 IP (tos 0x0, ttl 64, id 723, deslocamento 0, sinalizadores [DF], proto TCP (6), comprimento 52)
192.168.10.21.33586> 192.168.10.1.http: Sinalizadores [.], cksum 0x94e2 (correto), seq 1, ack 1, win 63, opções [nop, nop, TS val 389882297 ecr 30996070], comprimento 0
03:36:00.605054 IP (tos 0x0, ttl 64, id 724, deslocamento 0, sinalizadores [DF], proto TCP (6), comprimento 481)

Solicitações HTTP ..

192.168.10.21.33586> 192.168.10.1.http: Sinalizadores [P.], cksum 0x9e5d (correto), seq 1: 430, ack 1, win 63, opções [nop, nop, TS val 389882297 ecr 30996070], comprimento 429: HTTP, comprimento: 429
GET / HTTP / 1.1
Host: 192.168.10.1
Agente do usuário: Mozilla / 5.0 (Windows NT 10.0; rv: 78.0) Gecko / 20100101 Firefox / 78.0
Aceitar: text / html, application / xhtml + xml, application / xml; q = 0.9, imagem / webp, * / *; q = 0.8
Idioma de aceitação: en-US, en; q = 0.5
Aceitar-Codificação: gzip, deflate
DNT: 1
Conexão: keep-alive
Cookie: _TESTCOOKIESUPPORT = 1; SID = c7ccfa31cfe06065717d24fb544a5cd588760f0cdc5ae2739e746f84c469b5fd
Solicitações não seguras de atualização: 1

E as respostas também são capturadas

192.168.10.1.http> 192.168.10.21.33586: Sinalizadores [P.], cksum 0x84f8 (correto), seq 1: 523, ack 430, win 1944, opções [nop, nop, TS val 30996179 ecr 389882297], comprimento 522: HTTP, comprimento: 522
HTTP / 1.1 200 OK
Servidor: servidor web ZTE 1.0 ZTE corp 2015.
Intervalos de aceitação: bytes
Conexão: fechar
Opções de X-Frame: SAMEORIGIN
Cache-Control: no-cache, no-store
Comprimento do conteúdo: 138098
Set-Cookie: _TESTCOOKIESUPPORT = 1; PATH = /; HttpOnly
Tipo de conteúdo: text / html; charset = utf-8
X-Content-Type-Options: nosniff
Política de segurança de conteúdo: frame-ancestors 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data :;
Proteção X-XSS: 1; modo = bloco
Set-Cookie: SID =; expira = Thu, 01-Jan-1970 00:00:00 GMT; path = /; HttpOnly

TCP

Para capturar pacotes somente TCP, este comando fará tudo de bom:

$ sudo tcpdump -i wlan0 tcp
tcpdump: ouvindo em wlan0, tipo de link EN10 MB (Ethernet), comprimento de instantâneo 262144 bytes
04:35:48.892037 IP (tos 0x0, ttl 60, id 23987, deslocamento 0, sinalizadores [nenhum], proto TCP (6), comprimento 104)
tl-in-f189.1e100.internet.https> 192.168.10.16.50272: Sinalizadores [P.], cksum 0xc924 (correto), seq 1377740065: 1377740117, ack 1546363399, win 300, opções [nop, nop, TS val 13149401 ecr 3051434098], comprimento 52
04:35:48.892080 IP (tos 0x0, ttl 64, id 20577, deslocamento 0, sinalizadores [DF], proto TCP (6), comprimento 52)
192.168.10.16.50272> tl-in-f189.1e100.internet.https: Sinalizadores [.], cksum 0xf898 (correto), seq 1, ack 52, win 63, opções [nop, nop, TS val 3051461952 ecr 13149401], comprimento 0
04:35:50.199754 IP (tos 0x0, ttl 64, id 20578, deslocamento 0, sinalizadores [DF], proto TCP (6), comprimento 88)
192.168.10.16.50272> tl-in-f189.1e100.internet.https: Sinalizadores [P.], cksum 0x2531 (correto), seq 1:37, ack 52, win 63, opções [nop, nop, TS val 3051463260 ecr 13149401], comprimento 36
04:35:50.199809 IP (tos 0x0, ttl 64, id 7014, deslocamento 0, sinalizadores [DF], proto TCP (6), comprimento 88)
192.168.10.16.50434> hkg12s18-in-f14.1e100.internet.https: Sinalizadores [P.], cksum 0xb21e (correto), seq 328391782: 328391818, ack 3599854191, win 63, opções [nop, nop, TS val 3656137742 ecr 2564108387], comprimento 36
4 pacotes capturados
4 pacotes recebidos pelo filtro
0 pacotes descartados pelo kernel

Normalmente, a captura de pacotes TCP resulta em muito tráfego; você pode especificar em detalhes seus requisitos adicionando filtros à captura, como:

Porta
Especifica a porta para monitorar

$ sudo tcpdump -i wlan0 tcp porta 2222

IP fonte
Para ver os pacotes de uma fonte especificada

$ sudo tcpdump -i wlan0 tcp src 192.168.10.2

IP de destino
Para ver os pacotes para um destino especificado

$ sudo tcpdump -i wlan0 tcp dst 192.168.10.2

Salvando captura de pacote em arquivos

Para salvar a captura de pacotes para análise posterior, podemos usar a opção -w de tcpdump que requer um parâmetro de nome de arquivo. Esses arquivos são salvos em um formato de arquivo pcap (captura de pacote), que pode ser usado para salvar ou enviar capturas de pacote.

Por exemplo:

$ sudo tcpdump -C / capturado.pcap

Podemos adicionar filtros se quisermos capturar pacotes TCP, UDP ou ICMP, etc.

Lendo a captura de pacotes de arquivos

Infelizmente, você não pode ler o arquivo salvo por meio de comandos comuns de 'ler arquivo', como cat, etc. A saída é quase sem sentido, e é difícil dizer o que está no arquivo. '-r' é usado para ler os pacotes salvos no .arquivo pcap, armazenado anteriormente por '-w' ou outro software que armazena pcaps:

$ sudo tcpdump -r / saídas.pcap

Isso imprime os dados coletados de pacotes capturados na tela do terminal em um formato legível.

Folha de cheats Tcpdump

O tcpdump pode ser usado com outros comandos do Linux, como grep, sed, etc., para extrair informações úteis. Aqui estão algumas combinações úteis e palavras-chave combinadas em uso com tcpdump para obter informações valiosas.

Extraia agentes de usuário HTTP:

$ sudo tcpdump -n | grep "User-Agent:"

Os URLs solicitados por HTTP podem ser monitorados usando tcpdump, como:

$ sudo tcpdump -v -n | egrep -i "POST / | GET / | Host:"

Você também pode Extraia senhas HTTP em solicitações POST

$ sudo tcpdump -nn -l | egrep -i "POST / | pwd = | passwd = | senha = | Host:"

Os cookies do lado do servidor ou do cliente podem ser extraídos usando:

$ sudo tcpdump -n | egrep -i 'Set-Cookie | Host: | Cookie:'

Capture solicitações e respostas DNS usando:

$ sudo tcpdump -i wlp58s0 -s0 porta 53

Imprima todas as senhas em texto simples:

$ sudo tcpdump port http ou port ftp ou port smtp ou port imap ou port pop3 ou port telnet -l -A | egrep -i -B5 'pass = | pwd = | log = | login = | usuário = | usuário | nome de usuário = | pw = | passw = | passwd = | senha = | pass: | usuário: | nome de usuário: | senha: | login: | pass '

Filtros Tcpdump comuns

  • -UMA Mostra os pacotes em formato ASCII.
  • -c Número de pacotes para capturar.
  • -contar Imprimir contagem de pacotes apenas ao ler um arquivo capturado.
  • -e Imprimir endereços MAC e cabeçalhos de nível de link.
  • -h ou -help Imprime a versão e as informações de uso.
  • -versão Mostra apenas as informações da versão.
  • -eu Especifique a interface de rede para capturar.
  • -K Impedir tentativas de verificar somas de verificação de qualquer pacote. Adiciona velocidade.
  • -m Especifique o módulo a ser usado.
  • -n Não converta endereços (i.e., endereços de host, números de porta, etc.) para nomes.
  • -número Imprima um número de pacote opcional no início de cada linha.
  • -p Proibir a interface de entrar em modo promíscuo.
  • -Q Escolha a direção para os pacotes a serem capturados. Enviar ou receber.
  • -q Saída silenciosa / rápida. Imprime menos informações. As saídas são mais curtas.
  • -r Usado para ler pacotes de um pcap .
  • -t Não imprima um carimbo de data / hora em cada linha de despejo.
  • -v Imprime mais informações sobre a saída.
  • -C Grave os pacotes brutos no arquivo.
  • -x Imprime saída ASCII.
  • -X Imprime ASCII com hexadecimal.
  • -interfaces de lista Mostra todas as interfaces de rede disponíveis onde os pacotes podem ser capturados pelo tcpdump.

Cessação

Tcpdump tem sido uma ferramenta amplamente utilizada na pesquisa e aplicações de Segurança / Redes. A única desvantagem do tcpdump não tem 'GUI', mas é bom demais para ser mantido fora das paradas de sucesso. Como Daniel Miessler escreve, “Analisadores de protocolo como o Wireshark são ótimos, mas se você quiser realmente dominar o packet-fu, deve primeiro se tornar um com o tcpdump.”

Como alterar os botões esquerdo e direito do mouse no PC com Windows 10
É normal que todos os dispositivos de mouse de computador sejam ergonomicamente projetados para usuários destros. Mas existem dispositivos de mouse di...
Emular cliques do mouse passando o mouse usando o mouse sem cliques no Windows 10
Usar um mouse ou teclado na postura errada de uso excessivo pode resultar em muitos problemas de saúde, incluindo tensão, síndrome do túnel do carpo e...
Adicione gestos do mouse ao Windows 10 usando essas ferramentas gratuitas
Nos últimos anos, os computadores e sistemas operacionais evoluíram muito. Houve um tempo em que os usuários tinham que usar comandos para navegar pel...