2011-12-23 12:49:28 +0000 2011-12-23 12:49:28 +0000
31
31

Como posso verificar que portos estão ocupados e que portos estão livres na minha máquina Linux?

Existe algum comando de linha de comando ou qualquer outra forma de encontrar e listar os números de portas ocupadas e livres na minha máquina Linux?

Respostas (4)

42
42
42
2011-12-23 13:11:39 +0000

O comando

netstat -antu

mostrará todas as portas tcp e udp em uso. A saída será algo parecido com 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 Endereço Local mostra a porta em uso. Se o estado for “OUVIR” significa uma porta que está a ser utilizada para ligações de entrada. Se o endereço IP no campo Local Address for 0.0.0.0 significa que as ligações de entrada serão aceites em qualquer endereço IP atribuído a uma interface - portanto isto significa a partir de ligações com origem fora da sua máquina.

Se dissesse localhost ou 127.0.0.1 estaria apenas a aceitar ligações a partir da sua máquina.

Adicionalmente, se adicionar o parâmetro -p, e o executar como raiz, 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 seja mostrada como estando em uso é gratuita, contudo os utilizadores (contas sem privilégios) só podem abrir portas acima de 1023.

13
13
13
2012-10-12 06:02:01 +0000

Compilei uma pequena lista eu próprio.

Alguns dos meus favoritos são:

netstat -tulpn
lsof -i -n -P
7
7
7
2015-11-23 15:35:42 +0000

Uma forma boa e fiável de verificar as portas abertas é utilizando ss (substituto do depreciado netstat), é utilizável num guião sem exigir privilégios elevados (isto é, sudo).

Utilização: opção -l para portas de escuta, opção -n para contornar a resolução DNS, e o filtro na porta de origem NN: src :NN (substituir NN pela porta que se pretende monitorizar). Para mais opções, ver 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 num guião, usando grep, podemos testar se a saída contém a porta que pedimos. Exemplo com a porta 80 em uso (ver 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 a porta 81 não em uso (ver 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)
3
3
3
2014-06-30 08:25:41 +0000

Outra forma:

telnet localhost <PORT_NUMBER>

Se o porto estiver livre, receberá um erro. Se a porta estiver em uso, o telnet ligar-se-á.

(encontrado em http://www.unix.com/unix-for-dummies-questions-and-answers/8456-how-know-whether-particular-port-number-free-not.html )