Espero que esto arroje algo de luz sobre el tema. Desde la página del manual :
Cuando tcpdump termine de capturar paquetes, informará recuentos de:
paquetes capturados (este es el número de paquetes que tcpdump ha recibido y procesado);
paquetes recibidos por filtro (el significado de esto depende del sistema operativo en el que esté ejecutando tcpdump, y posiblemente de la forma en que se configuró el sistema operativo; si se especificó un filtro en la línea de comandos, en algunos sistemas operativos cuenta los paquetes independientemente de si fueron emparejados por la expresión del filtro e, incluso si fueron emparejados por la expresión del filtro, independientemente de si tcpdump los ha leído y procesado todavía, en otros sistemas operativos solo cuenta los paquetes que coincidieron con la expresión del filtro, independientemente de si tcpdump ha leído y los procesó todavía, y en otros sistemas operativos solo cuenta los paquetes que coincidieron con la expresión del filtro y fueron procesados por tcpdump);
paquetes descartados por el núcleo (este es el número de paquetes que fueron descartados, debido a la falta de espacio en el búfer, por el mecanismo de captura de paquetes en el sistema operativo en el que tcpdump se está ejecutando, si el sistema operativo informa esa información a las aplicaciones; si no, será reportado como 0).
Y hay una entrada en la lista de correo de 2009 que explica:
El número de "paquetes recibidos por filtro" es el ps_recv
número de una llamada a pcap_stats()
; con BPF , ese es el bs_recv
número de BIOCGSTATS ioctl
. Ese recuento incluye todos los paquetes que se entregaron a BPF; esos paquetes pueden estar todavía en un búfer que aún no ha sido leído por libpcap (y por lo tanto no entregado a tcpdump), o puede estar en un búfer que ha sido leído por libpcap pero aún no entregado a tcpdump, por lo que puede contar los paquetes que no se informan como "capturados".
Tal vez el proceso se mata demasiado rápido? También hay una -c N
bandera que le dice a tcpdump que salga cuando N
se capturaron paquetes.
Como su problema parece bastante especializado, también puede usarlo libpcap
directamente o mediante uno de los cientos de enlaces de idiomas .
A su pregunta, dado que todo lo que obtiene son los paquetes capturados en el capture.cap
archivo, simplemente puede mirar las ejecuciones donde no está vacío y examinarlas, es decir, uhm, ¿contar las líneas?
tcpdump -r capture.cap | wc -l
Probablemente haya una mejor manera de usar libpcap para devolver el número de entradas en el archivo de captura ...
-w
es genial. Puede, por ejemplo, usar Wireshark con él.