Spero che questo faccia luce sulla questione. Dalla manpage :
Quando tcpdump termina di acquisire i pacchetti, riporterà i conteggi di:
pacchetti acquisiti (questo è il numero di pacchetti che tcpdump ha ricevuto ed elaborato);
pacchetti ricevuti dal filtro (il significato di ciò dipende dal sistema operativo su cui stai eseguendo tcpdump, e possibilmente dal modo in cui è stato configurato il sistema operativo - se un filtro è stato specificato sulla riga di comando, su alcuni sistemi operativi conta i pacchetti indipendentemente dal fatto che sono stati abbinati dall'espressione del filtro e, anche se sono stati abbinati dall'espressione del filtro, indipendentemente dal fatto che tcpdump li abbia ancora letti ed elaborati, su altri sistemi operativi conta solo i pacchetti che sono stati abbinati dall'espressione del filtro indipendentemente dal fatto che tcpdump abbia letto e li ha ancora elaborati e su altri sistemi operativi conta solo i pacchetti che sono stati abbinati dall'espressione del filtro e sono stati elaborati da tcpdump);
pacchetti rilasciati dal kernel (questo è il numero di pacchetti che sono stati eliminati, a causa della mancanza di spazio nel buffer, dal meccanismo di acquisizione dei pacchetti nel sistema operativo su cui è in esecuzione tcpdump, se il sistema operativo riporta tali informazioni alle applicazioni; in caso contrario, esso verrà segnalato come 0).
E c'è una voce della mailing list del 2009 che spiega:
Il numero "pacchetti ricevuti dal filtro" è il ps_recv
numero da una chiamata a pcap_stats()
; con BPF , questo è il bs_recv
numero dal BIOCGSTATS ioctl
. Questo conteggio include tutti i pacchetti che sono stati consegnati a BPF; quei pacchetti potrebbero essere ancora in un buffer che non è stato ancora letto da libpcap (e quindi non consegnato a tcpdump), oppure potrebbero essere in un buffer letto da libpcap ma non ancora consegnato a tcpdump, quindi può contare i pacchetti che non vengono segnalati come "acquisiti".
Forse il processo viene interrotto troppo in fretta? C'è anche una -c N
bandiera che dice a tcpdump di uscire quando i N
pacchetti sono stati catturati.
Poiché il tuo problema sembra piuttosto specializzato, puoi anche utilizzare libpcap
direttamente o tramite una delle centinaia di associazioni linguistiche .
Alla tua domanda, dato che tutto ciò che ottieni sono i pacchetti catturati nel capture.cap
file, potresti semplicemente guardare le piste in cui non è vuota ed esaminare queste, cioè uhm, contare le linee?
tcpdump -r capture.cap | wc -l
Probabilmente esiste un modo migliore di usare libpcap per restituire il numero di voci nel file di acquisizione ...