Ich hoffe, dies wirft ein Licht auf das Thema. Aus der Manpage :
Wenn tcpdump die Erfassung von Paketen abgeschlossen hat, werden die folgenden Werte gemeldet:
erfasste Pakete (dies ist die Anzahl der Pakete, die tcpdump empfangen und verarbeitet hat);
Vom Filter empfangene Pakete (die Bedeutung hängt vom Betriebssystem ab, auf dem Sie tcpdump ausführen, und möglicherweise von der Art und Weise, wie das Betriebssystem konfiguriert wurde. Wenn in der Befehlszeile ein Filter angegeben wurde, zählt er auf einigen Betriebssystemen Pakete, unabhängig davon, ob Sie wurden vom Filterausdruck abgeglichen, und selbst wenn sie vom Filterausdruck abgeglichen wurden, zählt es auf anderen Betriebssystemen nur Pakete, die vom Filterausdruck abgeglichen wurden, unabhängig davon, ob tcpdump gelesen hat, unabhängig davon, ob tcpdump sie gelesen und verarbeitet hat und verarbeitete sie noch, und auf anderen Betriebssystemen zählt es nur Pakete, die mit dem Filterausdruck übereinstimmten und von tcpdump verarbeitet wurden);
Vom Kernel verworfene Pakete (Dies ist die Anzahl der Pakete, die aufgrund eines Mangels an Pufferplatz durch den Paketerfassungsmechanismus in dem Betriebssystem verworfen wurden, auf dem tcpdump ausgeführt wird, wenn das Betriebssystem diese Informationen an Anwendungen meldet. Wenn nicht, diese wird als 0) gemeldet.
Und es gibt einen Mailinglisteneintrag aus dem Jahr 2009, der erklärt:
Die Nummer "Vom Filter empfangene Pakete" ist die ps_recv
Nummer von einem Anruf an pcap_stats()
; mit BPF ist das die bs_recv
Nummer von der BIOCGSTATS ioctl
. Diese Zählung umfasst alle Pakete, die an BPF übergeben wurden. Diese Pakete befinden sich möglicherweise noch in einem Puffer, der noch nicht von libpcap gelesen wurde (und daher nicht an tcpdump übergeben wurde), oder in einem Puffer, der von libpcap gelesen, aber noch nicht an tcpdump übergeben wurde, sodass Pakete gezählt werden können werden nicht als "gefangen" gemeldet.
Vielleicht wird der Prozess zu schnell beendet? Es gibt auch ein -c N
Flag, das tcpdump anweist, zu beenden, wenn N
Pakete erfasst wurden.
Da Sie Ausgabe ziemlich spezialisiert zu sein scheint, könnte man auch verwenden , libpcap
direkt oder über eine der Hunderte von Sprachbindungen .
Zu Ihrer Frage, da Sie nur die erfassten Pakete in der capture.cap
Datei erhalten, können Sie sich einfach die Läufe ansehen, in denen sie nicht leer sind, und diese untersuchen, dh ähm, die Zeilen zählen?
tcpdump -r capture.cap | wc -l
Es gibt wahrscheinlich eine bessere Möglichkeit, libpcap zu verwenden, um die Anzahl der Einträge in der Erfassungsdatei zurückzugeben ...