Actualización continua de Netstat (el reloj cambia la salida)

18

Estoy usando este comando simple para monitorear conexiones (para lidiar con algunos ataques DoS recientes) en mi servidor Debian:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

¿Cómo lo ejecuto continuamente? Por lo tanto, se actualizará una vez por minuto (o cualquier cantidad de tiempo, por supuesto). Intenté mirar:

watch -n 30 "netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n"

Pero cambió la salida de una buena lista con un número de conexiones a algo como esto:

1 tcp        0  10015 [LOCAL IP]
...
1 Proto Recv-Q Send-Q Local Address           Foreign Address         State
1 Active Internet connections (w/o servers)

Por lo tanto, no se muestra la IP externa. ¿Hay algo que me perdí?

Así es como se ve la salida original:

  2 [IP ADDRESS]
  4 [IP ADDRESS]
  4 [IP ADDRESS]
  4 [IP ADDRESS]
  7 [IP ADDRESS]
 16 [IP ADDRESS]
 71 [IP ADDRESS]

Y cuando digo [LOCAL IP]me refiero a la IP de mi máquina.

Cuando lo ejecuto -csimplemente se congela.

Ruslan Osipov
fuente
¿Estás ejecutando watch con privilegios de root? El comando se ve bien y parece comportarse como esperaría en mi máquina. Ejecutar sin no imprimirá las direcciones y, después de 30 segundos, podría imprimir un mensaje de error.
@StewartPlatt Lo ejecuto bajo la raíz. Agregué la salida del comando original. La cuestión es que cuando miro, solo muestra mi dirección IP y no muestra ninguna IP conectada a mí.

Respuestas:

22
netstat -c

puede ayudarte si no he entendido mal tu problema. -c significa - continuo.

EDITAR: ahí vas:

watch -n 30 "netstat -ntu | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -n"

He agregado un \ before $.

hcg
fuente
Ya lo intenté, lo siento, no especifiqué esto en una pregunta. Simplemente se congela cuando agrego -c.
Me di cuenta de que los $ 5 se eliminan en la salida del reloj. Tal vez hay un problema de comillas. Estoy cavando en eso ..
gracias, es bueno saber acerca de escapar caracteres especiales en el reloj
1

Simplemente ejecuta un ciclo while que duerme durante 60 segundos

[root@host] $ while true
> do
> netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
> sleep 60
> done

Esto le dará la misma salida cada 60 segundos.

Chris Alderson
fuente