Espero que isso lance alguma luz sobre o assunto. Na página de manual :
Quando o tcpdump terminar de capturar pacotes, ele relatará contagens de:
pacotes capturados (este é o número de pacotes que o tcpdump recebeu e processou);
pacotes recebidos pelo filtro (o significado disso depende do sistema operacional no qual você está executando o tcpdump e, possivelmente, da maneira como o sistema operacional foi configurado - se um filtro foi especificado na linha de comando, em alguns sistemas operacionais ele conta pacotes independentemente de se eles foram correspondidos pela expressão de filtro e, mesmo se correspondidos pela expressão de filtro, independentemente de o tcpdump já os tenha lido e processado, em outros sistemas operacionais, ele conta apenas pacotes que foram correspondidos pela expressão de filtro, independentemente de o tcpdump ter lido e os processou ainda e, em outros sistemas operacionais, conta apenas pacotes que foram correspondidos pela expressão de filtro e processados pelo tcpdump);
pacotes descartados pelo kernel (este é o número de pacotes descartados, devido à falta de espaço no buffer) pelo mecanismo de captura de pacotes no sistema operacional no qual o tcpdump está sendo executado, se o sistema operacional relatar essas informações para os aplicativos; caso contrário, ele será relatado como 0).
E há uma entrada na lista de discussão de 2009 explicando:
O número de "pacotes recebidos pelo filtro" é o ps_recv
número de uma chamada para pcap_stats()
; com BPF , esse é o bs_recv
número do BIOCGSTATS ioctl
. Essa contagem inclui todos os pacotes que foram entregues ao BPF; esses pacotes ainda podem estar em um buffer que ainda não foi lido pelo libpcap (e, portanto, não foram entregues ao tcpdump) ou podem estar em um buffer que foi lido pelo libpcap, mas ainda não entregue ao tcpdump, para que possa contar pacotes que não são relatados como "capturados".
Talvez o processo seja morto muito rápido? Há também uma -c N
bandeira dizendo ao tcpdump para sair quando os N
pacotes foram capturados.
Como o problema parece bastante especializado, você também pode usar libpcap
diretamente ou através de uma das centenas de ligações de idiomas .
Para sua pergunta, já que tudo que você obtém são os pacotes capturados no capture.cap
arquivo, você pode apenas olhar as execuções onde não estão vazias e examiná-las, ou seja, contar as linhas?
tcpdump -r capture.cap | wc -l
Provavelmente existe uma maneira melhor de usar a libpcap para retornar o número de entradas no arquivo de captura ...