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.
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