tcpdump

tcpdump: Co musí každý síťař znát!

Pozn.:
Tento článek nepopisuje základní funkcionalitu,obsluhu ani princip fungování nástroje tcpdump.

Tcpdump je “dědeček” v oblasti paketových analyzátorů, fungující na příkazové řádce, dostupný pro většinu unix systémů i Windows, postavený na C/C++ knihovně libpcap.

Používá se pro odchycení (sniff) a analýzu komunikace v počítačových sítích, orientuje se především na protokoly tcp/ip (nikoliv výhradně), jedná se o jeden ze základních nástroj pro diagnostiku problémů, každý “síťař” ho musí znát, protože nikdo “nevidí” do kabelů.

Tcpdump vznik k roce 1987 v Berkeley Laboratory Network Research Group v USA v Kalifornii, jaká to náhoda.

Připomeňme si v rychlosti strukturu IP hlavičky.

IP-Header

Základní primitiva pro tcpdump filter, jsou vcelku jednoduchá (zdrojový/cílový host, síť, port, protokol) ,lze je přehlední najít v manuálových stránkých nebo online zde či manuál.

Pojďme se nyní podívat na některé záludnější konstrukce, co jsem posbíral za dosavadní činnost v oblasti síťí.

DHCP

# filtruje DHCP klienta s MAC d4:3d:7e:27:79:fc
root@havel-machine:~# tcpdump -i eth0 -vvv -s 1500 '((port 67 or port 68) and (udp[38:6] = 0xd43d7e2779fc))'
# filtruje DHCP DISCOVER, REQUEST, INFORM
root@havel-machine:~# tcpdump -i eth0 -vvv -s 1500 '((port 67 or port 68) and (udp[8:1] = 0x1))'

Spanning tree

root@havel-machine:~# tcpdump -i eth0 -vvv ether[14:1] = 0x42
# výstup, lze vidět surová data BPDU
root@havel-machine:~# tcpdump -i eth0 -vvv -e -l -xX -ttt -c 3 multicast

VLAN/CDP/LLDP

# běhá nám tam správná vlan/cdp
root@havel-machine:~# tcpdump -i eth0 -n -vvv -s 1500 -c 1 'ether[20:2] == 0x2000'
# pro LLDP použijte ether proto 0x88cc

TCP příznaky (flags)

#URG příznak root@havel-machine:~# tcpdump 'tcp[13] & 32 != 0' 
# ACK příznak 
root@havel-machine:~# tcpdump 'tcp[13] & 16 != 0' 
# PSH příznak 
root@havel-machine:~# tcpdump 'tcp[13] & 8 != 0' # RST příznak 
root@havel-machine:~# tcpdump 'tcp[13] & 4 != 0' # SYN příznak 
root@havel-machine:~# tcpdump 'tcp[13] & 2 != 0' # FIN příznak 
root@havel-machine:~# tcpdump 'tcp[13] & 1 != 0' # SYN-ACK příznak 
root@havel-machine:~# tcpdump 'tcp[13] = 18'

HTTP POST

root@havel-machine:~# tcpdump tcp[2:2] = 80 and \(tcp[20:4] = 1347375956
or tcp[24:4] = 1347375956 or tcp[28:4] = 1347375956 or tcp[32:4] = 1347375956 or tcp[36:4] = 1347375956 or tcp[40:4] = 1347375956 or tcp[44:4] = 1347375956 or tcp[48:4] = 1347375956 or tcp[52:4] = 1347375956 or tcp[56:4] = 1347375956 or tcp[60:4] = 1347375956\)

Pro filtrování IPSEC použijte v protokolech esp či ah, multicast lze odfiltrovat pomoci proto igmp nebo pim.

Ucelený přehled filtrů pro tcpdump v TXT formátu naleznete např. zde.

A nakonec dáme jednu škaredou, podobných kouskem jsem se v dřevních dobách bavili na průmyslové škole v době kdy switche nebyly vůbec standardem a huby s koaxem kralovaly, bohužel za to přišlo podmínečné vyloučení, ale to jsme jinde.

root@havel-machine:~# tcpdump port http or port ftp or port smtp or port imap or port pop3 -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user ' --color=auto --line-buffered -B20

Díky za Váš čas. František Havel