Tcpdump - Zählen ausgehender und eingehender UDP-Pakete

Tcpdump - Zählen ausgehender und eingehender UDP-Pakete

Ist es möglich, tcpdump(für eine bestimmte Zeit) die Anzahl der ausgehenden und eingehenden UDP-Pakete zu zählen?

Ich habe nicht viel Erfahrung mit tcpdump, daher wäre ein Ratschlag, wie das geht, sehr hilfreich. Ich habe gelesen, dass ein timeoutBefehl gut ist, wenn ich einen Prozess nach einer bestimmten Zeit stoppen möchte, also dachte ich daran, ihn einfach tcpdumpnach meiner Zeit zu stoppen.

Aber wie kann ich die Anzahl der ausgehenden und eingehenden Pakete zählen und nur UDP-Pakete filtern?

Antwort1

Ich würde hierfür nicht tcpdump(oder ) verwenden . Stattdessen würde ich verwenden , um die Pakete über einen bestimmten Zeitraum zu zählentsharkiptables

# Prepare two sets of counters and set up the rules
#
iptables -N udp_in
iptables -N udp_out
iptables -A udp_in
iptables -A udp_out

iptables -A OUTPUT --protocol udp -j udp_out
iptables -A INPUT --protocol udp -j udp_in

So können Sie die Zähler zu Beginn Ihrer Periode zurücksetzen

# Reset the counters
#
iptables -Z udp_in
iptables -Z udp_out

So können Sie die Zähler am Ende Ihrer Periode ablesen

# Look at the counters
#
packets_in=$(iptables -nvL udp_in | awk '/all/{print $1}')
packets_out=$(iptables -nvL udp_out | awk '/all/{print $1}')
echo "in=$packets_in, out=$packets_out"

Sie können einen Zähler auslesen und ihn sofort zurücksetzen, indem Sie Zgleichzeitig das Flag angeben. Zum Beispiel

packets_in=$(iptables -nvLZ udp_in | awk '/all/{print $1}')

Wenn Sie die Teile zusammenfügen und davon ausgehen, dass Sie bereits die erforderlichen zusätzlichen iptables-Ketten erstellt haben (siehe oben), können Sie so etwas verwenden

# Reset the counters
#
iptables -Z udp_in
iptables -Z udp_out

# Wait 10 seconds
#
period=10
sleep "$period"

# Look at the counters
#
packets_in=$(iptables -nvL udp_in | awk '/all/{print $1}')
packets_out=$(iptables -nvL udp_out | awk '/all/{print $1}')

# Report the results
#
echo "During the last $period seconds we saw $packets_in UDP packet(s) in and $packets_out UDP packet(s) out."

Antwort2

man tcpdumpliefert die Informationen, die Sie benötigen. Die tcpdump-Webseite bietet auch einemanpage.

Direkt in der BESCHREIBUNG heißt es tcpdump, dass nach Abschluss der Paketerfassung die Anzahl der erfassten, vom Filter empfangenen und vom Kernel gelöschten Pakete gemeldet wird.

Das Filtern (also die Suche nach Paketen eines bestimmten Typs) kann wesentlich schwieriger sein, aber der Abschnitt „Beispiele“ sollte genügend Hinweise darauf geben, dass Sie udpfür Ihr Beispiel nur einen Filter benötigen.

Wenn Sie also den richtigen Filter herausgefunden haben, verwenden Sie „ tcpdumpmit timeout“, um ihn für die von Ihnen festgelegte Zeit auszuführen, „kill“ tcpdump, und Sie erhalten die Anzahl der Pakete.

timeout 20 tcpdump udp

Dadurch wird die TCPdump-Filterung für UDP ausgeführt und TCPdump nach 20 Sekunden beendet.

verwandte Informationen