Atualização contínua do Netstat (o relógio altera a saída)

18

Estou usando este comando simples para monitorar conexões (para lidar com alguns ataques recentes de DoS) no meu servidor Debian:

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

Como faço para executá-lo continuamente? Portanto, ele será atualizado uma vez por minuto (ou qualquer quantidade de tempo, é claro). Eu tentei assistir:

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

Mas mudou a saída da lista legal com o número de conexões para algo assim:

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

Portanto, o IP externo não está sendo exibido. Há algo que eu perdi?

É assim que a saída original se parece:

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

E quando digo, [LOCAL IP]quero dizer o IP da minha máquina.

Quando eu corro com -cele apenas congela.

Ruslan Osipov
fonte
Você está executando o watch com privilégios de root? O comando parece bom e parece se comportar como eu esperaria na minha máquina. A execução sem imprimir os endereços e, após 30 segundos, pode imprimir uma mensagem de erro.
@StewartPlatt Eu corro isso na raiz. Eu adicionei a saída do comando original. O problema é que, quando eu assisto, ele gera apenas o meu anúncio de endereço IP que não gera nenhum resultado conectado a mim.

Respostas:

22
netstat -c

pode ajudá-lo se eu não entendi mal o seu problema. -c significa --continuous.

EDIT: lá vai você:

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

Eu adicionei um \ antes de $.

hcg
fonte
já tentei, desculpe, não especifiquei isso em uma pergunta. Ele congela quando adiciono -c.
Eu percebi que, os US $ 5 são removidos na saída do relógio. Talvez haja um problema de aspas. Estou gostando .. ..
obrigado, bom saber sobre escapar caracteres especiais no relógio
1

Basta executar um loop while que dorme por 60 segundos

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

Isso fornecerá a mesma saída a cada 60 segundos

Chris Alderson
fonte