Korzystanie z tcpdump na wyświetlanych danych TCP

3

Jeśli

sudo tcpdump -i eth0 -X

daje mi

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
16:16:11.837543 IP cnt62-i386.gci.xxxx.org.ssh > jazz.gci.xxxx.org.49283: Flags [P.], seq 291677310:291677502, ack 4122992911, win 1002, options [nop,nop,TS val 2421999802 ecr 2194736071], length 192
        0x0000:  4510 00f4 7f77 4000 4006 7f84 ac16 f184  E....w@.@.......
        0x0010:  ac16 f146 0016 c083 1162 a47e f5bf e10f  ...F.....b.~....
...

jak filtrować wyświetlane dane (np. początkową wartość szesnastkową 45)?

W szczególności,

sudo tcpdump -i eth0 -X 'tcp[0]=0x45'
sudo tcpdump -i eth0 -X 'tcp[12]=0x45'
sudo tcpdump -i eth0 -X 'tcp[14]=0x45'
sudo tcpdump -i eth0 -X 'tcp[20]=0x45'

wszystkie nie dają żadnych dopasowań (przy użyciu różnych odsunięć od losowo i bezsensownie googlujących się).

Andrzej Cooke
źródło

Odpowiedzi:

2

Filtruj za pomocą ipzamiast tcp. Na przykład:

sudo tcpdump -i eth0 -X 'ip[0] = 0x45'
Joel Taylor
źródło
ah! doskonały. więc od czego zaczyna się tcp [0]? czy w tcp jest przesunięcie, którego mogę użyć, czy jest tcp tylko dla nagłówka? dzięki! czy jestem zdezorientowany - czy to nie był pakiet tcp?
Andrew Cooke
2
„5” w „45” to długość nagłówka IP, w jednostkach 4-bajtowych, czyli 20 bajtów. Dlatego tcp[0]po 20 bajtach ip[0]jest 0x00, następnie 0x16, następnie 0xc0, a następnie 0x83. Jest to jednak HEADER TCP , a nie TCP PAYLOAD , więc jeśli chcesz filtrować dane przesyłane przez TCP, musisz pominąć nagłówek TCP (który ma zmienną długość, podobnie jak nagłówek IP).
dzięki. okazuje się, że miałem tego sporo (chociaż nie byłem tego pewien). ale brakowało mi nagłówka tcp o zmiennej długości (tak naprawdę szukam czegoś w ładunku tcp, a przy powyższym wszystko ma teraz sens).
Andrew Cooke