Como posso verificar quais portas estão ocupadas e quais portas estão livres na minha máquina Linux?

25

Existe algum comando de linha de comando ou qualquer outra maneira de encontrar e listar os números de porta ocupados e livres na minha máquina Linux?

    
por Jeegar Patel 23.12.2011 / 13:49

4 respostas

39

O comando

netstat -antu

mostrará todas as portas tcp e udp em uso. A saída será algo como isto:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN

O número após os dois pontos no campo Local Address mostra a porta em uso. Se o estado for "LISTEN", significa uma porta que está sendo usada para conexões de entrada. Se o endereço IP no campo Local Address for 0.0.0.0 , significa que conexões de entrada serão aceitas em qualquer endereço IP atribuído a uma interface - portanto, isso significa conexões originadas fora de sua máquina.

Se dissesse localhost ou 127.0.0.1 , estaria aceitando apenas conexões da sua máquina.

Além disso, se você adicionar o parâmetro -p e executá-lo como root, ele mostrará o processo que abriu a porta:

$ sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN      860/rpc.statd

Qualquer coisa que não esteja em uso é gratuita, no entanto, os usuários (contas sem privilégios) só podem abrir portas acima de 1023.

    
por 23.12.2011 / 14:11
11

Eu mesmo compilei uma pequena lista .

Alguns dos meus favoritos são:

netstat -tulpn
lsof -i -n -P
    
por 12.10.2012 / 08:02
7

Uma maneira boa e confiável de verificar portas abertas é usar ss (substituição para os obsoletos netstat ), podem ser usados em um script sem exigir privilégios elevados (por exemplo, sudo ).

Uso: opção -l para portas de escuta, opção -n para ignorar a resolução de DNS e o filtro na porta de origem NN : src :NN (substitua NN pela porta que você deseja monitorar). Para mais opções, consulte man ss

ss -ln src :NN

Exemplos:

[user@server ~]# ss -ln src :80
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port
LISTEN      0      128                      *:80                *:*
[user@server ~]# ss -ln src :81
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port

E em um script, usando o grep, podemos testar se a saída contém a porta que solicitamos. Exemplo com a porta 80 em uso (veja acima):

myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 80 is in use (result == 1)

Exemplo com porta 81 não em uso (veja acima)

myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 81 is NOT in use (result == 0)
    
por 23.11.2015 / 16:35
3

Outra maneira:

telnet localhost <PORT_NUMBER>

Se a porta estiver livre, você receberá um erro. Se a porta estiver em uso, o telnet se conectará.

(encontrado em link )

    
por 30.06.2014 / 10:25