Jak przechwytywać pakiety ack lub syn przez Tcpdump?

48

Chcę użyć reguły filtrowania do przechwytywania tylko pakietów ack lub syn. Jak mam to zrobic?

Larry
źródło
Osobiście nie zrobiłbym tego. Przechwytuję wszystkie pakiety, a następnie przefiltruję flagi SYN i ACK później. Jeśli rozwiązujesz problemy z TCP, prawie zawsze chcesz zobaczyć całą rozmowę, a nie tylko uścisk dłoni lub potwierdzenie. Jeśli nie interesuje Cię faktyczny ładunek danych, możesz ograniczyć rozmiar pakietu za pomocą tcpdump -s SIZE. Nagłówek TCP może mieć różną długość, więc przechwytywanie -s 128prawdopodobnie zapewni wszystkie możliwe nagłówki i może trochę danych.
suprjami
4
Być może nie rozwiązujesz problemów z TCP. Może chcesz zobaczyć, jak czat jest program i policzyć jego połączenia wychodzące. Teraz jak ja.
Dan Pritts,

Odpowiedzi:

81

Składnia filtr pcap wykorzystywane do tcpdump powinien działać dokładnie tak samo na filtrze przechwytywania Wireshark.

Z tcpdump użyłbym takiego filtra.

tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"

Sprawdź stronę podręcznika tcpdump i zwróć szczególną uwagę na tcpflags.

Koniecznie sprawdź także sekcje na Wiki Wireshark dotyczące filtrów przechwytywania i wyświetlania. Niestety oba typy filtrów używają zupełnie innej składni i różnych nazw dla tej samej rzeczy.

Jeśli zamiast filtru przechwytującego chcesz mieć filtr wyświetlania, prawdopodobnie będziesz musiał zbudować wyrażenie łączące tcp.flags.ack i tcp.flags.syn. Jednak znacznie lepiej znam filtry przechwytywania, więc będziesz musiał je rozwiązać samodzielnie.

Zoredache
źródło
1
Bardziej podoba mi się twoja odpowiedź. Wygląda na to, że podjąłeś wysiłek. Głosuj za ciebie.
Ablue
4
To świetna odpowiedź z dobrymi referencjami, ale pamiętaj, że ta składnia przechwytuje wszystkie pakiety, które mają ustawione flagi SYN lub ACK, nawet jeśli ustawione są również inne flagi. To może, ale nie musi, być zamierzone przez PO. Proszę zobaczyć moją odpowiedź poniżej, aby uzyskać dokładniejszy filtr, jeśli pożądane są tylko pakiety TCP SYN lub ACK. Twoje zdrowie.
JJC,
14

Chociaż odpowiedź @ Zoredache jest ładna i kompletna, pamiętaj, że ta składnia da wszystkie pakiety, które mają ustawioną flagę TCP SYN lub TCP ACK, w tym pakiety, które nie są wyłącznie zwykłymi pakietami „TCP SYN” lub „TCP ACK”, ponieważ mają także ustawione inne flagi. To może być lub nie być to, co zamierzali (lub przyszli czytelnicy). Na przykład ta składnia będzie również przechwytywać pakiety TCP SYN-ACK, TCP FIN-ACK itp. Jeśli chcesz tylko pakietów TCP SYN lub TCP ACK (tj. JUST jedna z tych ustawionych flag), właściwa składnia filtra przechwytywania to:

'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'

Równoważnie:

'tcp[13] == 2 or tcp[13] == 16'

Twoje zdrowie!

JJC
źródło
9

Zrobiłem skrypt, aby zobaczyć najlepszych „synnerów”. W tym celu rozważam tylko początkowy pakiet syn (pierwszy pakiet uzgadniania trzech pakietów). Oznacza to, że syn = 1, ack = 0

while :; do
  date; 
  tcpdump -i eth1 -n -c 100 \
  'tcp[tcpflags] & (tcp-syn) != 0' and 
  'tcp[tcpflags] & (tcp-ack) == 0' 2> /dev/null \
  | awk '{ print $3}' \
  | sort | uniq -c | sort | tail -5;
  echo;
  sleep 1
done
Edward
źródło
5
To dobry przykład. Możesz jeszcze bardziej uprościć filtr przechwytywania tcpdump, zastępując „” tcp [tcpflags] & (tcp-syn)! = 0 'i „tcp [tcpflags] & (tcp-ack) == 0'” po prostu „tcp [tcpflags ] == tcp-syn ”. To automatycznie wyklucza pakiety z ustawionym zestawem ACK. Twoje zdrowie!
JJC,
9
tcpdump 'tcp[13] = 3'

http://danielmiessler.com/study/tcpdump/

zaawansowane

Możesz także filtrować na podstawie określonych części pakietu, a także łączyć wiele warunków w grupy. Pierwszy z nich jest przydatny, gdy na przykład szukasz tylko SYNs lub RSTs, a drugi to jeszcze bardziej zaawansowanej izolacji ruchu.

UAP RSF

[Wskazówka: Anagram dla flag TCP: Niewykwalifikowani atakujący Pester Real Security Folk]

twoja notatka: ...

Pokaż mi wszystkie URGpakiety PILNE ( ) ...

tcpdump 'tcp[13] & 32 != 0'

Pokaż mi wszystkie ACKpakiety ACKNOWLEDGE ( ) ...

tcpdump 'tcp[13] & 16 != 0'

Pokaż mi wszystkie PSHpakiety PUSH ( ) ...

tcpdump 'tcp[13] & 8 != 0'

Pokaż mi wszystkie RSTpakiety RESET ( ) ...

tcpdump 'tcp[13] & 4 != 0'

Pokaż mi wszystkie SYNpakiety SYNCHRONIZE ( ) ...

tcpdump 'tcp[13] & 2 != 0'

Pokaż mi wszystkie FINpakiety FINISH ( ) ...

tcpdump 'tcp[13] & 1 != 0'

Pokaż mi wszystkie SYNACKpakiety SYNCHRONIZE / ACKNOWLEDGE ( ) ...

tcpdump 'tcp[13] = 18'

[ Uwaga: Tylko PSH, RST, SYN, i FINflagi są wyświetlane w polu wyjścia flaga tcpdump. URGs i ACKs są wyświetlane, ale są wyświetlane gdzie indziej na wyjściu, a nie w polu flagi]

kasta
źródło
2
Plagaryzm nie jest dozwolony na stosie wymiany . Edytuj ten post, aby wyjaśnić, że skopiowałeś treść z połączonej witryny. Dziękuję Ci.
Chris S
4

Chciałem sam uzyskać tylko pakiety SYN, użyłem następującego polecenia:

tcpdump -i eth7 'tcp[13] & 2 != 0'

To powinno od razu zadziałać.

Sidharth
źródło
3
Spowoduje to przechwycenie wszystkich pakietów z ustawioną flagą SYN, w tym SYN, SYN-ACK itp. Jeśli chcesz tylko pakietów SYN, użyj zamiast tego „tcp [13] == 2”. Twoje zdrowie!
JJC,
1

powinien pokazać je bez żadnych filtrów lub argumentów.

Niebieski
źródło
Twoja odpowiedź jest prawidłowa pod względem technicznym, ale OP prawdopodobnie chciał zamieścić słowo „tylko” w swoim pytaniu. ;-) Twoje zdrowie!
JJC,