Como descubro se uma porta está disponível no Ubuntu 8.04?

28

Existe algum comando que eu possa executar a partir do bash que me diga se uma porta já está aberta?

Codebeef
fonte

Respostas:

37

Use "netstat" para verificar as portas atualmente em uso.

netstat -antp

Proto Recv-Q Send-Q Endereço Local Estado Estrangeiro Estado Nome do PID / Programa
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* LISTEN 16297 / nomeado     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named     
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 16297 / named     
Lagarta
fonte
2
"netstat -antp | grep 80", em que 80 é o número da porta a ser pesquisada.
Umair A.
13

Esta (netstat) é a solução mais rápida ...

netstat -lnt

... mas isso lhe dá mais controle (ao custo da velocidade (às vezes muita velocidade)) ...

lsof -n -i -a -u www-data

O exemplo acima, por exemplo, mostra todas as portas TCP abertas e no LISTENestado AND ( -a) pertencente ao www-datausuário Apache ( ).

Xerxes
fonte
8

Todas boas respostas.

No entanto, você não menciona se está conectado ao computador em questão. ; P

Caso contrário, o nmap é seu amigo.

para iniciantes, tente:

nmap -Otarget

O amap também é uma boa opção, que também tentará adivinhar o software do servidor, agarrando páginas de banner.

para iniciantes, tente:

amaptarget1-6000

Mateus
fonte
7

Experimentar

lsof -i :<port number>

Se você obtiver algum resultado, algo está escutando e vinculado, por exemplo

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
Dave Cheney
fonte
4
netstat -tlnp  

Mostre as tportas cp que estão ldiminuindo, mostre napenas os umbers (não resolva nomes - torna mais rápido) e mostre o process que está ouvindo (o púnico funciona se você for root)

netstat -ulnp  

Mostre as uportas dp que estão ldiminuindo, mostre napenas umbers (não resolva nomes - torna mais rápido) e mostre o process que está ouvindo (o púnico funciona se você for root)

netstat -unp  

Mostre as uportas dp que estão abertas, mas não escutam, mostra napenas umbers (não resolva nomes - torna mais rápido) e mostra o process que está escutando (o púnico funciona se você for root)

netstat -an

Mostrar all portas em uso, mostrar napenas umbers - não resolva nomes

lsof -i <proto>@<host>:<port>

por exemplo

lsof -i tcp@localhost:25

para ver se alguma coisa está escutando na porta localhost 25 / TCP ou

lsof -i tcp@0.0.0.0:636 

para verificar se há soquetes locais ou remotos, escutando (local) ou conectados (local ou remoto) a qualquer host / interface

Jason Tan
fonte
2

lsof (listar arquivos abertos) é uma boa ferramenta para verificar se um processo está escutando em uma porta

lsof -P | grep: <número da porta>

O netstat é uma boa ferramenta para verificar se há alguma conexão ativa.

netstat -n | grep: <número da porta>

Jamie
fonte
2

Você não menciona qual protocolo deseja usar, como TCP ou UDP - e também é importante perceber que "porta" não é tão granular que o sistema suporta para desambiguar soquetes. Por exemplo, se o seu sistema possui vários endereços IP, a porta 80 pode estar em uso em todos os endereços IP (o aplicativo está vinculado a "0.0.0.0" ou "::" ou a cada endereço IP em sucessão) ou pode estar em use somente em um subconjunto desses endereços IP.

A melhor e mais segura maneira de determinar se uma porta / endereço está livre e disponível é tentar vinculá-la. O Netcat é útil para isso.

nc -l [-s abcd] -p NN

tentará ligar à porta TCP NN em (opcional, o padrão será todos os endereços) abcd Adicione a opção -u para fazer o mesmo no UDP.

Em seguida, para saber se a porta está realmente "aberta" como você pede - você precisa começar a examinar as possíveis regras de firewall. Novamente, o mais fácil é tentar se conectar à porta. Use o netcat como acima, no servidor e, a partir de um cliente, use o netcat para tentar conectar-se à porta que você abriu.

nc [-u] abcd NN

se conectará à porta NN no abcd, usando UDP se o sinalizador -u for especificado. Você pode digitar a entrada no final do cliente e ela deve aparecer no servidor. Caso contrário, é necessário analisar as ferramentas específicas do sistema e da rede.

colmmacc
fonte
2

Eu uso o fusor (no pacote psmisc):

fusor -n tcp PORT

Retorna o pid do processo vinculado a essa porta.

Se é para saber se uma porta está escutando, o bom e velho telnet faz o truque :)

porta telnet 127.0.0.1

Out
fonte
2

Este one-liner fornece uma lista de todas as portas TCP em uso. Ele funciona no bash no Ubuntu e no OS X.

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

A lista terá uma porta por linha sem nenhuma informação extra.

Josiah Johnston
fonte
Adoro! Gret for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done
aparece
0

Muitas maneiras de fazer isso me causaram problemas porque eles não funcionavam no Linux e no OSX e / ou porque não mostravam as portas usadas pelo docker ou processos pertencentes ao root. Agora eu apenas uso este programa javascript:

(certifique-se de ter o nó instalado e que ele funcione nodenão apenas nodejsou altere o programa de acordo)

salve o seguinte em um arquivo chamado check-portem seu caminho ou em seu projeto

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

definir permissões

chmod +x path/to/check-port

fugir do seu caminho

check-port 8080

ou execute a partir do mesmo diretório

./check-port 8080

até agora está funcionando muito bem.

Alex028502
fonte