Obtenha uma lista de portas abertas no Linux


191

Eu preciso de um comando Linux para listar todas as portas abertas gratuitas para uso em um aplicativo

lsof -i TCP| fgrep LISTEN

Não parece estar ajudando, pois as portas listadas não são necessariamente gratuitas para uso. Como listar portas abertas gratuitas que não estão em uso?

Respostas:


258
netstat -lntu

conforme respondido por @askmish, fornecerá uma lista de serviços em execução no seu sistema nas portas TCP e UDP onde

  • -l = apenas serviços que estão escutando em alguma porta
  • -n = mostre o número da porta, não tente resolver o nome do serviço
  • -t = portas tcp
  • -u = portas udp
  • -p = nome do programa

Você não precisa do parâmetro 'p', pois está interessado apenas em obter quais portas são gratuitas e não em qual programa está sendo executado.

No entanto, isso mostra apenas quais portas do seu sistema estão esgotadas. Isso não informa o status da sua rede, por exemplo, se você está atrás do NAT e deseja que alguns serviços sejam acessíveis externamente. Ou se o firewall estiver bloqueando a porta para visitantes externos. Nesse caso, o nmap vem em socorro. AVISO: Use o nmap apenas em redes que estão sob seu controle. Além disso, existem regras de firewall que podem bloquear pings do nmap, você terá que mexer nas opções para obter resultados corretos.


19
Observe que netstatestá obsoleto em muitos sistemas e ssdeve ser usado.
Johu

1
mas se você estiver no busybox ssnão está incluído
jcollum 07/06

90

Como net-toolsestá obsoleto , você pode usar o sscomando em vez de netstatse netstatnão estiver presente em sua máquina:

ss -lntu

deve funcionar de maneira semelhante a

netstat -lntu

de acordo com a ajuda integrada:

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets

3
Outro sinalizador útil é -p, que mostra a identificação do processo do soquete.
Talespin_Kit

21

Este comando listará as portas de rede abertas e os processos que as possuem:

netstat -lnptu

posteriormente, você pode filtrar os resultados com suas especificações exatas.

Você também pode usar nmappara obter resultados mais detalhados sobre portas.


2
O sinalizador -p exige privilégios de root para alguns processos, de modo que seriasudo netstat -lnptu
Klaus se

5

Todas as portas abertas, incluindo tráfego de resposta:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l

3
Uma lista de apenas números de porta exclusivos e apenas IPv4:netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
Aaron C. de Bruyn

+1 para mostrar como filtrar e extrair os números do resultado. Editado para remover a saída stderr do netstat (que adiciona um cabeçalho ao resultado no Ubuntu).
Datashaman 04/04

Hmm, pensando melhor. -1 por não responder à pergunta.
Datashaman 4/04/16

1

Minha opinião sobre a questão original era que ele estava perguntando sobre as portas não utilizadas, não as portas atualmente conectadas aos serviços. Se for esse o caso, não há uma maneira específica de listá-las, exceto listar as portas usadas e assumir que as outras não estão sendo usadas.

Um ponto adicional a ser lembrado: como usuário, você não poderá abrir uma porta com menos de 1024 (precisará de permissões de root para isso).


0

O comando a seguir funcionará em qualquer Unix que saia no mesmo formato que Ubuntu / Debian - onde o endereço local está na coluna 4 e a saída inclui um cabeçalho de 2 linhas na parte superior. Se um desses números for diferente, ajuste o comando awk abaixo.

Se você deseja apenas IPv4:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

Se você deseja apenas IPv6:

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

Se você quer os dois juntos:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

O comando gera uma lista de números de porta que estão escutando em todas as interfaces. Se você deseja listar todas as portas que estão escutando na interface localhost, use algo como isto:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq

0

Experimentar

sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' |  awk 'NR>2{print $7}' | sort -n  | uniq

e veja isso.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.