Saya harap ini menjelaskan masalah ini. Dari halaman manual :
Ketika tcpdump selesai menangkap paket, ia akan melaporkan jumlah:
paket yang ditangkap (ini adalah jumlah paket yang diterima dan diproses oleh tcpdump);
paket yang diterima oleh filter (artinya tergantung pada OS tempat Anda menjalankan tcpdump, dan mungkin pada cara OS dikonfigurasikan - jika filter ditentukan pada baris perintah, pada beberapa OS ia menghitung paket terlepas dari apakah mereka dicocokkan dengan ekspresi filter dan, bahkan jika mereka cocok dengan ekspresi filter, terlepas dari apakah tcpdump telah membaca dan memprosesnya, pada OS lain itu hanya menghitung paket yang cocok dengan ekspresi filter terlepas dari apakah tcpdump telah membaca dan memprosesnya, dan pada OS lain hanya menghitung paket yang cocok dengan ekspresi filter dan diproses oleh tcpdump);
paket yang dijatuhkan oleh kernel (ini adalah jumlah paket yang dijatuhkan, karena kurangnya ruang buffer, oleh mekanisme penangkapan paket di OS di mana tcpdump berjalan, jika OS melaporkan informasi itu ke aplikasi; jika tidak, itu akan dilaporkan sebagai 0).
Dan ada entri milis dari tahun 2009 yang menjelaskan:
Nomor "paket yang diterima oleh filter" adalah ps_recv
nomor dari panggilan ke pcap_stats()
; dengan BPF , itu bs_recv
nomor dari BIOCGSTATS ioctl
. Hitungan itu termasuk semua paket yang diserahkan ke BPF; paket-paket itu mungkin masih dalam buffer yang belum dibaca oleh libpcap (dan karenanya tidak diserahkan ke tcpdump), atau mungkin dalam buffer yang telah dibaca oleh libpcap tetapi belum diserahkan ke tcpdump, sehingga dapat menghitung paket-paket yang tidak dilaporkan sebagai "ditangkap".
Mungkin prosesnya terbunuh terlalu cepat? Ada juga -c N
flag yang memberitahu tcpdump untuk keluar ketika N
paket ditangkap.
Karena masalah Anda tampaknya sangat terspesialisasi, Anda juga dapat menggunakan libpcap
secara langsung atau melalui salah satu dari ratusan ikatan bahasa .
Untuk pertanyaan Anda, karena semua yang Anda dapatkan adalah paket yang diambil dalam capture.cap
file, Anda bisa melihat run yang tidak kosong dan memeriksa ini, yaitu, uhm, menghitung baris?
tcpdump -r capture.cap | wc -l
Mungkin ada cara yang lebih baik menggunakan libpcap untuk mengembalikan jumlah entri dalam file tangkap ...