tcpdump: “yakalanan paketler” ve “filtreden alınan paketler”


11

Çağıran bir senaryomuz var

tcpdump -v src host <IP address> and port <port number> >>out.txt 2>>err.txt -w capture.cap

betiğin diğer bölümleri arka planda bir miktar trafik başlatırken birden çok IP'de. Paketlerin bize geri dönüp dönmediğini kontrol etmek istiyoruz ve sadece paket aldığımızda bu durumları manuel olarak incelemek istiyoruz. tcpdump'ın hata çıktısı ilk başta bunun için iyi görünüyordu, ancak.

Soru, konunun da belirttiği gibi, "ele geçirilen paketler" ile "filtre tarafından alınan paketler" arasındaki fark nedir? Herhangi bir paket kaydetmeyen yakalamalar vardır, ancak "0 paket yakalandı, filtre ile alınan 2 paket" çıktısı çelişkili gibi görünüyor, çünkü hiçbir paket yakalanmadıysa, 2 tanesi nasıl filtrelendi? İlk başta, "filtre tarafından alınan 0 paket" arıyorduk, ancak hiçbir paket alınmadığında hata çıkışına yazılmadı. Peki bu rakamlar ne gösteriyor?

Herhangi bir yanıt paketi alınmadığında bu durumları filtrelemek istiyorsak neleri arayacağımı bilmem gerekiyor.

Yanıtlar:


12

Umarım bu konuya ışık tutar. Gönderen man :

Tcpdump paketleri yakalamayı bitirdiğinde, şu sayıları rapor eder:

yakalanan paketler (bu, tcpdump tarafından alınan ve işlenen paketlerin sayısıdır);

filtre tarafından alınan paketler (bunun anlamı, tcpdump'ı çalıştırdığınız işletim sistemine ve muhtemelen işletim sisteminin yapılandırılma şekline bağlıdır - komut satırında bir filtre belirtilmişse, bazı işletim sistemlerinde paketleri sayar veya filtre ifadesi ile eşleştirildiler ve filtre ifadesi ile eşleşseler bile, tcpdump'ın henüz okumuş ve işleyip işlemediğine bakılmaksızın, diğer işletim sistemlerinde yalnızca tcpdump'ın okumuş olup olmadığına bakılmaksızın sadece filtre ifadesi ile eşleşen paketleri sayar ve bunları henüz işledi ve diğer işletim sistemlerinde yalnızca filtre ifadesi ile eşleşen ve tcpdump tarafından işlenen paketleri sayar);

çekirdek tarafından bırakılan paketler (bu, işletim sistemi bu bilgileri uygulamalara bildirirse, tcpdump'ın çalıştığı işletim sistemindeki paket yakalama mekanizması tarafından, arabellek alanı eksikliği nedeniyle bırakılan paketlerin sayısıdır; değilse, 0 olarak rapor edilecektir).

Ve 2009'dan itibaren aşağıdakileri açıklayan bir posta listesi girişi var :

"Filtre ile alınan paketler" numarası, yapılan ps_recvçağrıdan gelen numaradır pcap_stats(); ile BPF , işte bs_recvnumara BIOCGSTATS ioctl. Bu sayı BPF'ye verilen tüm paketleri içerir; bu paketler hala libpcap tarafından okunmamış bir arabellekte (ve dolayısıyla tcpdump'a teslim edilmemiş) olabilir veya libpcap tarafından okunan ancak henüz tcpdump'a teslim edilmeyen bir arabellekte olabilir. "ele geçirilmiş" olarak bildirilmez.

Belki süreç çok çabuk öldürülür? Ayrıca -c N, Npaketler yakalandığında tcpdump komutunun çıkmasını söyleyen bir bayrak da vardır .

Sorununuz oldukça özel göründüğünden, doğrudan veya yüzlerce dil bağından birini kullanarak da kullanabilirsinizlibpcap .

Sorunuza göre, elde ettiğiniz tek şey dosyadaki yakalanan paketler olduğundan, capture.capboş olmayan çalışmalara bakabilir ve bunları inceleyebilirsiniz, yani uhm, satırları sayabilir misiniz?

tcpdump -r capture.cap | wc -l

Muhtemelen yakalama dosyasındaki giriş sayısını döndürmek için libpcap kullanmanın daha iyi bir yolu var ...


1
Ayrıca, paket kullanımı yavaşsa, paketlerin çekirdek tarafından görülmeden önce NIC donanımına bırakılması mümkündür.
Craig

@Craig: Bu komut dosyasını çalıştıran kutu sanallaştırılmıştır, bu yüzden NIC hızını bilmiyorum.
Alex Biro

@sr_: çizgilerle iyi fikir, çok kolay :) Sanırım -w anahtarını kullanmak zorunda değiliz, ancak çıktıyı bir dosyaya yönlendirin ve satır numaralarını sayın. ASAP kontrol edecek.
Alex Biro

@ tuareg85: yakalanan paketleri analiz etmek -wharika. Wireshark'ı bununla birlikte kullanabilirsiniz.
sr_

1
Süreci çok erken öldürmek sorun değil, çünkü trafiği durdurduktan sonra 3 saniye beklediğimiz için bunun yeterli olması gerektiğini düşünüyorum. Ayrıca tcpdump hata çıkışını da bitirmek için zamana sahiptir ve çekirdek tarafından bırakılan paketler her zaman 0'dır.
Alex Biro
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.