Sadece ack veya syn paketlerini yakalamak için bir filtre kuralı kullanmak istiyorum. Bunu nasıl yaparım?
Sadece ack veya syn paketlerini yakalamak için bir filtre kuralı kullanmak istiyorum. Bunu nasıl yaparım?
Yanıtlar:
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.
@ 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!
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
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 SYN
s veya RST
daha 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 FIN
bayraklar tcpdump bayrak alan çıktıda gösterilir. URG
s ve ACK
s görüntülenir, ancak bayraklar alanında değil, çıktıda başka bir yerde gösterilirler]
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.
tcpdump -s SIZE
. TCP başlığı değişken uzunlukta olabilir, bu nedenle yakalama-s 128
muhtemelen tüm olası başlıkları ve belki de biraz veriyi alacaktır.