script para verificar serviços em execução em portas específicas

2

Eu tenho uma tarefa a fazer.

Eu tenho que pesquisar se, existem serviços em execução abaixo dos portos.
portas 53 & 55
Se não, tenho que enviar alertas.
Por favor, corrija minha lógica e sintaxe no código abaixo para uma porta

ntstat='netstat -tulpn | grep :53 | grep LISTEN | awk {'print $4'}'
port="*:53"

#Just to echo for testing
echo $ntstat  
echo $port

if [[ "$ntstat" == "$port" ]];
then
   echo " X Service at port number $port"
else 
   echo " Port is not listing  "
fi

Saída:

127.0.1.1:53
*:53
Port is not listing  

Eu estou lutando para combinar strings (127.0.1.1:53 a *: 53)

    
por Prabash 10.10.2017 / 19:15

3 respostas

0

Você também pode fazer um text-processing para sua saída atual para corresponder à porta. Basta adicionar sed -e 's/.*:/:/g'

#!/bin/bash
ntstat='netstat -tulpn | grep ":53 " | grep LISTEN | awk {'print $4'} | sed -e 's/.*:/:/g''
port=":53 "

#Just to echo for testing
echo $ntstat  
echo $port

if [[ "$ntstat" == "$port" ]]
then
    echo " X Service at port number $port"
else 
    echo " Port is not listing  "
fi 

Por favor, note que eu adicionei um espaço logo após o número da porta para evitar outras portas contendo 53

Como são operadores bash , você deve colocar o shebang #!/bin/bash no topo do seu script para que, quando você executar o script como ./portlisten.sh , ele leve o interpretador como /bin/bash , seja o mesmo se você executar seu script como $ bash portlisten.sh

    
por 10.10.2017 / 20:29
1

Para verificar se há serviços em execução nas portas 53 (ou 55 ), sugiro a seguinte solução otimizada:

port=":53"
if netstat -tulpn | grep --line-buffered -q "$port .*LISTEN"; then
    echo " X Service at port number $port"
else 
    echo " Port is not listing  "
fi
    
por 10.10.2017 / 19:42
0

Não use netstat , pois esse é um comando obsoleto, use ss .

No seu caso, você pode usar algo como:

ss -H -o state listening '( sport = :53 or sport = :55 )' 
    
por 10.10.2017 / 23:13