Para quem não conhece, tcpdump é um analisador de tráfego de rede. Por “escutar” o que passa pela placa de rede, você precisa executá-lo com usuário root.
O objetivo não é estender muito sobre ele, mas apenas descrever algumas informações importantes.
Primeiramente vamos rever os tipos de possíveis flags nos pacotes de rede com a sigla que aparece na análise:
S (SYN), F (FIN), P (PUSH), R (RST), W (ECN CWR), E (ECN-Echo)
Caso nenhum flag esteja definido, apenas um ponto ‘.’ aparece, exemplo: “Flags [.]”.
Ao executar o comando tcpdump sem argumentos, uma captura é iniciada sem filtros utilizando a placa de rede primária. Exemplo especificando outra placa de rede:
tcpdump -i lo
Além de visualizar os resultados na tela, também é possível salvá-lo em um arquivo para futura análise:
tcpdump -w /tmp/dump
Para abrir o arquivo salvo:
tcpdump -r /tmp/dump
Um argumento interessante a utilizar é o “-A” que tenta abrir os pacotes para exibir o conteúdo, exemplo:
$ tcpdump -A host 10.0.0.1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 14:48:11.162477 IP server1.corp.33951 > server2.corp.wap-wsp: Flags [P.], seq 1:189, ack 1, win 115, options [nop,nop,TS val 2116848677 ecr 826203350], length 188 E.....@.@..) ... .....#...r.1w.....sQ...... ~,.%1>..GET /_search?pf.nome=diego HTTP/1.1 User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 Host: server2:9200 Accept: */*
Outros argumentos interessantes:
-nn: numérico (não resolve nome de host ou porta)
-vv: verboso (mais informações)
-XX: exibe o conteúdo em hexadecimal e ASCII
Filtros interessantes:
host (servidor de origem ou destino)
tcp port
Exemplo:
$ tcpdump -nnvvXX host 10.0.0.1 and tcp port 9200 tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 14:56:51.724354 IP (tos 0x0, ttl 64, id 50362, offset 0, flags [DF], proto TCP (6), length 422) 10.0.0.2.33954 > 10.0.0.1.9200: Flags [P.], cksum 0x5163 (correct), seq 1:371, ack 1, win 115, options [nop,nop,TS val 2117369239 ecr 826723912], length 370 0x0000: 0050 56b3 1263 0050 56b3 8ab4 0800 4500 .PV..c.PV.....E. 0x0010: 01a6 c4ba 4000 4006 244c 0a14 1e11 0a14 ....@.@.$L...... 0x0020: 1e13 84a2 23f0 6ab5 b930 8d28 46fe 8018 ....#.j..0.(F... 0x0030: 0073 5163 0000 0101 080a 7e34 7d97 3146 .sQc......~4}.1F 0x0040: ce48 504f 5354 202f 5f73 6561 7263 6820 .HPOST./_search. 0x0050: 4854 5450 2f31 2e31 0d0a 5573 6572 2d41 HTTP/1.1..User-A 0x0060: 6765 6e74 3a20 6375 726c 2f37 2e31 392e gent:.curl/7.19. 0x0070: 3720 2878 3836 5f36 342d 7265 6468 6174 7.(x86_64-redhat 0x0080: 2d6c 696e 7578 2d67 6e75 2920 6c69 6263 -linux-gnu).libc 0x0090: 7572 6c2f 372e 3139 2e37 204e 5353 2f33 url/7.19.7.NSS/3 0x00a0: 2e31 352e 3320 7a6c 6962 2f31 2e32 2e33 .15.3.zlib/1.2.3 0x00b0: 206c 6962 6964 6e2f 312e 3138 206c 6962 .libidn/1.18.lib 0x00c0: 7373 6832 2f31 2e34 2e32 0d0a 486f 7374 ssh2/1.4.2..Host 0x00d0: 3a20 6170 7065 6c73 3031 703a 3932 3030 :.server01p:9200 0x00e0: 0d0a 4163 6365 7074 3a20 2a2f 2a0d 0a43 ..Accept:.*/*