¿Es posible tcpdump
contar (durante un tiempo de configuración) el número de paquetes UDP salientes y entrantes?
No tengo mucha experiencia en tcpdump
, por lo que un consejo sobre cómo hacerlo sería muy útil. Leí que un timeout
elogio es bueno si quiero detener un proceso después de un tiempo determinado, así que estaba pensando en detenerlo tcpdump
después de mi tiempo.
Pero, ¿cómo puedo contar la cantidad de paquetes entrantes y salientes y filtrar solo paquetes UDP?
Respuesta1
No usaría tcpdump
(o tshark
) para esto. En lugar de eso, solía iptables
contar los paquetes durante un período de tiempo.
# 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
Puedes restablecer los contadores al comienzo de tu período de esta manera
# Reset the counters
#
iptables -Z udp_in
iptables -Z udp_out
Puedes leer los contadores al final de tu período así
# 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"
Puede leer un contador y restablecerlo inmediatamente proporcionando la Z
bandera al mismo tiempo. Por ejemplo
packets_in=$(iptables -nvLZ udp_in | awk '/all/{print $1}')
Juntando bits y asumiendo que ya ha creado las cadenas de iptables adicionales necesarias (ver arriba), puede usar algo como esto
# 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."
Respuesta2
man tcpdump
proporciona la información que necesita. La página web tcpdump también proporciona unapágina de manual.
Justo en la DESCRIPCIÓN dice que cuando tcpdump
termina de capturar paquetes, informa los recuentos de paquetes capturados, recibidos por filtro y descartados por kernel.
El filtrado (que es la forma en que solo busca paquetes de un determinado tipo) puede ser mucho más difícil, pero la sección EJEMPLOS debería dar una pista suficiente de que el único filtro que necesita es udp
para su ejemplo.
Entonces, una vez que haya descubierto el filtro correcto, utilícelo tcpdump
con timeout
el cual lo ejecutará durante el tiempo definido, elimine tcpdump
y obtendrá el recuento de paquetes.
timeout 20 tcpdump udp
Esto ejecutará el filtrado de tcpdump para udp y eliminará tcpdump después de 20 segundos.