Tcpdump tarafından ack veya syn paketleri nasıl yakalanır?


48

Sadece ack veya syn paketlerini yakalamak için bir filtre kuralı kullanmak istiyorum. Bunu nasıl yaparım?


Şahsen ben bunu yapmazdım. Tüm paketleri yakalar, daha sonra SYN ve ACK bayraklarını süzerdim. TCP ile ilgili sorunları gideriyorsanız, sadece bir el sıkışma veya ACK değil, neredeyse her zaman bir görüşme görmek istersiniz. Gerçek veri yükü ile ilgilenmiyorsanız, paket boyutunu ile sınırlayabilirsiniz tcpdump -s SIZE. TCP başlığı değişken uzunlukta olabilir, bu nedenle yakalama -s 128muhtemelen tüm olası başlıkları ve belki de biraz veriyi alacaktır.
Suprjami

4
Belki de TCP ile ilgili sorun gidermiyorsunuzdur. Belki bir programın ne kadar konuşkan olduğunu görmek istersiniz ve giden bağlantılarını saymak istersiniz. Benim gibi, şimdi.
Dan Pritts,

Yanıtlar:


81

Pcap filtre sözdizimi tcpdump için kullanılan Wireshark yakalama filtresinde tam olarak aynı şekilde çalışması gerekir.

Tcpdump ile bunun gibi bir filtre kullanırdım.

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

Check out tcpdump adam sayfasını ve tcpflags yakın ilgi.

Wireshark Wiki'deki yakalama ve görüntüleme filtreleriyle ilgili bölümleri de kontrol ettiğinizden emin olun. Ne yazık ki, iki filtre türü tamamen farklı bir sözdizimi ve aynı şey için farklı isimler kullanır.

Yakalama filtresi yerine ekran filtresi kullanmak istiyorsanız, muhtemelen tcp.flags.ack ve tcp.flags.syn öğelerini birleştiren bir ifade oluşturmanız gerekir. Yakalama filtrelerine daha aşinayım, bu yüzden kendi başınıza halletmeniz gerekecek.


1
Cevabınızı daha çok seviyorum. Bir çabaya girmiş gibisin. Senin için oy kullan.
Ablue

4
Bu, iyi referanslarla verilen harika bir cevaptır, ancak bu sözdiziminin, başka bayraklar ayarlanmış olsa bile, SYN veya ACK bayraklarını ayarlayan paketleri yakalayacağını lütfen unutmayın. OP'nin amaçladığı gibi olabilir veya olmayabilir. Yalnızca TCP SYN veya ACK paketleri isteniyorsa, daha katı bir filtre için lütfen aşağıdaki cevabımı inceleyin. Şerefe.
JJC

14

@ Zoredache'ın cevabı güzel ve eksiksiz olsa da, sözdiziminin kesinlikle sadece düz olmayan "TCP SYN" veya "TCP ACK" paketleri olmayan düz paketler de dahil olmak üzere TCP SYN veya TCP ACK bayrağı ayarlanmış herhangi bir paket vereceğini unutmayın. ayrıca başka bayraklar ayarlanmış. Bu, sizin (veya gelecekteki okuyucuların) amaçladığı şey olabilir veya olmayabilir. Örneğin, bu sözdizimi aynı zamanda TCP SYN-ACK paketlerini, TCP FIN-ACK vs.'yi de yakalayacaktır. Yalnızca TCP SYN veya TCP ACK paketlerini (örneğin, bu bayrakların ayarlandığı SADECE biri) istiyorsanız , uygun yakalama filtresi sözdizimi:

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

eşdeğer bir:

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

Şerefe!


9

En iyi "eşleştiricileri" görmek için bir komut dosyası yaptım. Bunun için sadece ilk syn paketini (üç paketin el sıkışmasının ilk paketi) düşünüyorum. Yani, 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

5
Bu güzel bir örnek. "'Tcp [tcpflags] & (tcp-syn)! = 0' ve 'tcp [tcpflags] & (tcp-ack) == 0'" yerine sadece 'tcp [tcpflags) == 0' yazarak tcpdump yakalama filtrenizi daha da basitleştirebilirsiniz. ] == tcp-syn '. Bu, ACK ayarlı paketleri otomatik olarak hariç tutacaktır. Şerefe!
JJC

9
tcpdump 'tcp[13] = 3'

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

ileri

Bir paketin belirli bölümlerine göre filtreleyebilir, ayrıca birden çok koşulu gruplara ayırabilirsiniz. İlki , örneğin yalnızca SYNs veya RSTdaha gelişmiş trafik yalıtımı için ikincisi ararken yararlıdır .

UAP RSF

[İpucu: TCP bayrakları için bir anagram: Beceriksiz Saldırganlar Gerçek Güvenlik Halkını Pester]

notunuz: ...

Tüm URGENT ( URG) paketlerini göster ...

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

Bana tüm ACKNOWLEDGE ( ACK) paketlerini göster ...

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

Bana tüm PUSH ( PSH) paketlerini göster ...

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

Bana tüm RESET ( RST) paketlerini göster ...

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

Bana tüm SYNCHRONIZE ( SYN) paketlerini göster ...

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

Bana tüm FINISH ( FIN) paketlerini göster ...

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

Bana tüm SYNCHRONIZE / ACKNOWLEDGE ( SYNACK) paketlerini göster ...

tcpdump 'tcp[13] = 18'

[ Not: Sadece PSH, RST, SYN, ve FINbayraklar tcpdump bayrak alan çıktıda gösterilir. URGs ve ACKs görüntülenir, ancak bayraklar alanında değil, çıktıda başka bir yerde gösterilirler]


2
Plagarizm Stack Exchange'de izin vermiyor . Lütfen bu yazıyı, içeriği bağlı siteden kopyaladığınızdan emin olmak için düzenleyin. Teşekkür ederim.
Chris S

4

Sadece SYN paketleri kendim almak istedim, aşağıdaki komutu kullandım:

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

Bu hemen sizin için çalışması gerekir.


3
Bu, SYN, SYN-ACK, vb. Dahil olmak üzere SYN bayrağı ayarlanmış paketleri yakalar. Yalnızca SYN paketleri istiyorsanız, bunun yerine 'tcp [13] == 2' kullanın. Şerefe!
JJC

1

onlara herhangi bir filtre veya argüman olmadan göstermelidir.


Cevabınız teknik olarak doğru, ancak OP muhtemelen sorusuna "sadece" kelimesini dahil etmeyi amaçlıyordu. ;-) Şerefe!
JJC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.