verificando portas estabelecidas

0

O comando que estou usando está errado para verificar se uma porta está estabelecida ou não?

count=$(netstat -an | awk '$4 ~ /:'"$PORT"'$/ && $6 == "ESTABLISHED" {print $0}'| wc -l)

E tomando o $count > 0 como estabelecido?

    
por Anony 16.01.2018 / 05:28

2 respostas

0

Não sei ao certo o que você quer dizer com "considerar $ count > 0 como estalished?", mas isso parece uma contagem válida de conexões estabelecidas para uma determinada porta. Você pode querer restringir a uma determinada interface ou protocolo (então dois serviços diferentes ouvindo na mesma porta, mas em interfaces diferentes, não se misturam).

Além disso, você também pode simplificar um pouco o comando:

count=$(netstat -an | awk -v port=":$PORT\$" '$4 ~ port && $6 == "ESTABLISHED" {count++} END {print count}')

Você também pode usar lsof . lsof -i :$PORT listará as conexões abertas nessa porta e você poderá usar a opção -n (semelhante a -n in netstat ) e -F T (para listar PID, número do descritor de arquivo e apenas os estados TCP) para facilitar a análise:

lsof -ni ":$PORT" -FT | grep -c TST=ESTABLISHED
    
por Olorin 16.01.2018 / 08:55
0

Sua abordagem parece funcionar, mas não é muito elegante. Eu preferiria fazer assim:

if [[ "$(LANG=C netstat -nt | awk -F" +|:" '/ESTABLISHED/{print$5}')" =~ "$PORT" ]]; then
  echo $PORT established
else
  echo $PORT not established
fi

A substituição de comando simplesmente imprime a lista de hosts estabelecidos, independentemente da localidade do usuário, a expressão condicional testa se $PORT está nessa lista e executa a lista then e a lista else se não. / p>     

por dessert 16.01.2018 / 09:04