Bash snippet para ver se algo está escutando em uma porta?

2

Eu quero ver se algo está escutando em uma porta no host local. Eu ia usar nc e verificar o código de saída.

Algo parecido com isto:

echo "" | nc localhost 14881
echo $?

Alguma outra sugestão?

    
por Rory 06.07.2009 / 15:36

6 respostas

7

lsof-i: 14881

    
por 06.07.2009 / 16:15
2

Se você é root:

netstat -lnp | grep ':14881 '
    
por 06.07.2009 / 15:40
2

Talvez o netstat seja melhor porque a porta pode não estar escutando no host local ou pode estar bloqueada pelo iptables:

netstat -ln  | grep :14881
echo $?

O Grep sairá com 1 se não houver correspondência. Se você quiser apenas tcp e / ou udp, adicione as opções -u ou -t ao netstat.

    
por 06.07.2009 / 15:42
0

netstat -ano | egrep LISTEN | egrep tcp | egrep $ PORTNUMBER

    
por 06.07.2009 / 15:42
0

sudo ss -lntup dirá o que você está ouvindo para as conexões TCP / UDP - você pode filtrar a saída conforme apropriado (por exemplo, ouvir em 127.0.0.1, :: 1, 0.0.0.0).

Se você tem python por perto, você também pode criar um portscanner idiota (só vale a pena para TCP, no entanto):

import socket

for p in range(1,2**16):
   try:
     s = socket.create_connection(('127.0.0.1',p))
     print "Listener on tcp/{}".format(p)
   except:
     continue
    
por 09.03.2017 / 10:43
0

Eu uso isso no bash para sair quando ninguém ouve esta porta.

$port="14881"
if [[ $(netstat -ltn | grep ":${port} " | wc -l) -eq "0" ]] ; then echo "Port $port not listened to" && exit 1; fi
  • Usando colchetes duplos e comparando com o wc para facilitar a leitura.
por 09.03.2017 / 09:25