Program tcpdump jest oczywiście szczegółowo opisany w manualu man tcpdump (pinfo tcpdump). Tu jedynie najbardziej potrzebne opcje.

Tcpdump może pracować w 'on-line' (przetwarzając pakiety pozyskane z z interfejsu sieciowego) lub 'off-line'(przetwarzając pakiety, a właściwie ich początkowe n bajtów - gdzie n jest parametrem - zapisane w pliku zwanym zrzutem). Oczywiście zrzuty można tworzyć także za pomocą tcpdump-a. By korzystać z tcpdump-a 'on-line', pod Linuxem zasadniczo trzeba być rootem.

Po uruchomieniu tcpdump 'on-line' uzyskuje się wynik podobny w formie do poniższego


        
$ sudo /usr/sbin/tcpdump
tcpdump: listening on eth0
      
14:14:20.694588 7.00:00:5a:99:cd:38.453 > 7.ff:ff:ff:ff:ff:ff.453:ipx-rip-resp 9/1.1 6/1.1 5/1.1 18/1.1
14:14:21.246301 dhcp2-213.mimuw.edu.pl.32782 > intra-ns.mimuw.edu.pl.domain:  11712+ AAAA? duch.mimuw.edu.pl. (35) (DF)
14:14:21.247657 intra-ns.mimuw.edu.pl.domain > dhcp2-213.mimuw.edu.pl.32782:  11712* 0/1/0 (91) (DF)
14:14:21.247832 dhcp2-213.mimuw.edu.pl.32782 > intra-ns.mimuw.edu.pl.domain:  11713+ AAAA? duch. (22) (DF)
14:14:21.248907 intra-ns.mimuw.edu.pl.domain > dhcp2-213.mimuw.edu.pl.32782:  11713 NXDomain 0/1/0 (97) (DF)
14:14:21.257564 dhcp2-213.mimuw.edu.pl.32782 > intra-ns.mimuw.edu.pl.domain:  11714+ A? duch.mimuw.edu.pl. (35) (DF)
14:14:21.259651 intra-ns.mimuw.edu.pl.domain > dhcp2-213.mimuw.edu.pl.32782:  11714* 1/4/4 A duch.mimuw.edu.pl (199) (DF)
14:14:21.259936 dhcp2-213.mimuw.edu.pl.33884 > duch.mimuw.edu.pl.ssh: S 1439770130:1439770130(0) win 5840 <mss 1460,sackOK,timestamp 1090123 0,nop,wscale 0> (DF)
14:14:21.261134 duch.mimuw.edu.pl.ssh > dhcp2-213.mimuw.edu.pl.33884: S 3678305061:3678305061(0) ack 1439770131 win 5792 <mss 1460,sackOK,timestamp 198279237 1090123,nop,wscale 0> (DF)
14:14:21.261180 dhcp2-213.mimuw.edu.pl.33884 > duch.mimuw.edu.pl.ssh: . ack 1 win 5840 <nop,nop,timestamp 1090123 198279237> (DF)
14:14:21.266405 duch.mimuw.edu.pl.ssh > dhcp2-213.mimuw.edu.pl.33884: P 1:26(25) ack 1 win 5792 <nop,nop,timestamp 198279237 1090123> (DF)
14:14:21.266490 dhcp2-213.mimuw.edu.pl.33884 > duch.mimuw.edu.pl.ssh: . ack 26 win 5840 <nop,nop,timestamp 1090123 198279237> (DF)

12 packets received by filter
0 packets dropped by kernel

Można odczytać następujące informacje:

Opcje wywołania (wybór)

Wypisywanie nazw wymaga konwersji (korzystania z DNS), można tego uniknąć za pomocą opcji -n (-nn wypisze numery protokołów zamiast ich nazw) Za pomocą opcji -vvv dostajemy więcej informacji, za pomocą opcji -c n wypisujemy n pakietów. Tak więc w poprzednim przypadku otrzymalibyśmy:

[kedar@dhcp2-213 kedar]$ sudo /usr/sbin/tcpdump -n -vvv -c 12 
14:14:20.694588 7.00:00:5a:99:cd:38.453 > 7.ff:ff:ff:ff:ff:ff.453:ipx-rip-resp 9/1.1 6/1.1 5/1.1 18/1.1
14:14:21.246301 10.1.2.213.32782 > 10.1.3.1.domain: [udp sum ok]  11712+ AAAA? duch.mimuw.edu.pl. (35) (DF) (ttl 64, id 41545, len 63)
14:14:21.247657 10.1.3.1.domain > 10.1.2.213.32782:  11712* q: AAAA? duch.mimuw.edu.pl. 0/1/0 ns: mimuw.edu.pl. SOA[|domain] (DF) (ttl 63, id 0, len 119)
14:14:21.247832 10.1.2.213.32782 > 10.1.3.1.domain: [udp sum ok]  11713+ AAAA? duch. (22) (DF) (ttl 64, id 41545, len 50)
14:14:21.248907 10.1.3.1.domain > 10.1.2.213.32782:  11713 NXDomain q: AAAA? duch. 0/1/0 ns: . SOA[|domain] (DF) (ttl 63, id 0, len 125)
14:14:21.257564 10.1.2.213.32782 > 10.1.3.1.domain: [udp sum ok]  11714+ A? duch.mimuw.edu.pl. (35) (DF) (ttl 64, id 41546, len 63)
14:14:21.259651 10.1.3.1.domain > 10.1.2.213.32782:  11714* q: A? duch.mimuw.edu.pl. 1/4/4 duch.mimuw.edu.pl. A 10.1.3.2 ns: mimuw.edu.pl.[|domain] (DF) (ttl 63, id 0, len 227)
14:14:21.259936 10.1.2.213.33884 > 10.1.3.2.ssh: S [tcp sum ok] 1439770130:1439770130(0) win 5840 <mss 1460,sackOK,timestamp 1090123 0,nop,wscale 0> (DF) (ttl 64, id 33881, len 60)
14:14:21.261134 10.1.3.2.ssh > 10.1.2.213.33884: S [tcp sum ok] 3678305061:3678305061(0) ack 1439770131 win 5792 <mss 1460,sackOK,timestamp 198279237 1090123,nop,wscale 0> (DF) (ttl 63, id 0, len 60)
14:14:21.261180 10.1.2.213.33884 > 10.1.3.2.ssh: . [tcp sum ok] 1:1(0) ack 1 win 5840 <nop,nop,timestamp 1090123 198279237> (DF) (ttl 64, id 33882, len 52)
14:14:21.266405 10.1.3.2.ssh > 10.1.2.213.33884: P [tcp sum ok] 1:26(25) ack 1 win 5792 <nop,nop,timestamp 198279237 1090123> (DF) (ttl 63, id 64355, len 77)
14:14:21.266490 10.1.2.213.33884 > 10.1.3.2.ssh: . [tcp sum ok] 1:1(0) ack 26 win 5840 <nop,nop,timestamp 1090123 198279237> (DF) (ttl 64, id 33883, len 52)

Za pomocą opcji -w zapisujemy zrzut do pliku, a za pomocą -r czytamy zrzut z pliku zamiast z interfejsu (to ostatnie nie wymaga praw root-a)

/usr/sbin/tcpdump -n -vvv -c 12 -r zrzut15031004.06
da powyższy rezultat.

Opcja -S daje na wyjściu absolutne, czyli takie jak zapisano w nagłówku TCP numery sekwencyjne (a nie od 2 pakietu tcpdump liczonym od 0 - dodawanie pozostawiając nam).

Domyślnie przechwytywanych jest 68 bajtów z początku pakietu, to czasem za mało (np. znacznik [|domain] wskazuje, że nie wszystko z dnsa się zmieściło) i można to zmienić za pomocą -s liczba bajtów.

Można wpisywać wyrażenia filtrujące np.

tcpdump dst port 80
zwróci nam tylko pakiety tcp i udp, których portem docelowym jest port 80 (zazwyczaj http), a
 
tcpdump 'dst host 216.239.37.99 && port 80'
pozwoli nam obejrzeć część ruchu HTTP skierowanego z sieci lokalnej do Googla. Nawiasy są konieczne przez wzgląd na basha i znaczki && (można pisać and).