tcpdump: "Pakete erfasst" vs "Pakete vom Filter empfangen"


11

Wir haben ein Skript, das aufruft

tcpdump -v src host <IP address> and port <port number> >>out.txt 2>>err.txt -w capture.cap

bei mehreren IP-Adressen, während die anderen Teile des Skripts im Hintergrund Datenverkehr initiieren. Wir möchten prüfen, ob Pakete zu uns zurückkehren, und nur die Fälle manuell prüfen, in denen wir Pakete erhalten. Die Fehlerausgabe von tcpdump schien zunächst in Ordnung zu sein, aber.

Die Frage ist, wie das Thema andeutet, was der Unterschied zwischen "erfassten Paketen" und "vom Filter empfangenen Paketen" ist. Es gibt Captures, die keine Pakete aufgezeichnet haben, aber "0 Pakete erfasst, 2 Pakete vom Filter empfangen" ausgegeben haben, was sich wie ein Widerspruch anhört, denn wenn keine Pakete erfasst wurden, wie wurden 2 davon gefiltert? Zuerst hatten wir nach "0 vom Filter empfangenen Paketen" gesucht, aber das wird nicht immer in die Fehlerausgabe geschrieben, wenn keine Pakete empfangen wurden. Was zeigen diese Zahlen?

Ich muss wissen, wonach ich suchen muss, wenn wir diese Fälle filtern möchten, in denen keine Antwortpakete empfangen wurden.

Antworten:


12

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_recvNummer von einem Anruf an pcap_stats(); mit BPF ist das die bs_recvNummer 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 NFlag, das tcpdump anweist, zu beenden, wenn NPakete erfasst wurden.

Da Sie Ausgabe ziemlich spezialisiert zu sein scheint, könnte man auch verwenden , libpcapdirekt oder über eine der Hunderte von Sprachbindungen .

Zu Ihrer Frage, da Sie nur die erfassten Pakete in der capture.capDatei 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 ...


1
Wenn die Paketverarbeitung langsam ist, ist es auch möglich, dass die Pakete in der NIC-Hardware verworfen werden, bevor sie jemals vom Kernel gesehen werden.
Craig

@Craig: Die Box, in der dieses Skript ausgeführt wird, ist virtualisiert, daher weiß ich nichts über die Geschwindigkeit der Netzwerkkarte.
Alex Biro

@sr_: gute Idee mit den Zeilen, zu einfach :) Ich denke, dann müssen wir nicht den Schalter -w verwenden, sondern die Ausgabe einfach in eine Datei umleiten und die Zeilennummern zählen. Wird das so schnell wie möglich überprüfen.
Alex Biro

@ tuareg85: Die erfassten Pakete zu analysieren, -wist großartig. Sie können zB Wireshark damit verwenden.
sr_

1
Den Prozess zu früh zu beenden ist wahrscheinlich nicht das Problem, da wir 3 Sekunden warten, nachdem wir den Verkehr gestoppt haben. Ich denke, das sollte ausreichen. Auch tcpdump hat Zeit, um die Fehlerausgabe zu beenden, und Pakete, die vom Kernel verworfen wurden, waren immer 0.
Alex Biro
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.