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

28

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

    
por Codebeef 29.05.2009 / 12:59

10 respostas

37

Use "netstat" para verificar as portas atualmente usando.

netstat -antp

Proto Recv-Q Send-Q Local Address        Foreign Address   State    PID/Program name
tcp        0      0 xxx.xxx.xxx.xxx      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 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     
    
por 29.05.2009 / 13:08
13

Este (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 mostra por exemplo todas as portas TCP abertas e no estado LISTEN , E ( -a ) pertencente ao usuário Apache ( www-data ).

    
por 29.05.2009 / 13:23
8

Todas as boas respostas.

No entanto, você não menciona se você fez logon no computador em questão. ; P

Se não, então nmap é seu amigo.

para começar, tente:

nmap -O target

O

amap também é uma boa escolha, que também tentará adivinhar o software do servidor, capturando páginas de banners.

para começar, tente:

amap target 1-6000

    
por 29.05.2009 / 13:35
7

Tente

lsof -i :<port number>

Se você obtiver algum resultado, algo está sendo ouvido 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)
    
por 29.05.2009 / 13:04
4
netstat -tlnp  

Mostrar t cp portas que estão l aparecendo, mostrar n umbers somente (não resolver nomes - faz com que seja mais rápido) e mostrar o p rocess que está fazendo a escuta ( p só funciona se você for root)

netstat -ulnp  

Mostrar as portas u dp que estão l istening, mostrar n umbers apenas (não resolver nomes - faz com que seja mais rápido) e mostrar o p rocess que está fazendo a escuta ( p só funciona se você for root)

netstat -unp  

Mostre as portas u dp que estão abertas, mas que não estão escutando, mostre apenas n umbers (não resolva nomes - faça com que seja mais rápido) e mostre o p rocess que está ouvindo ( p só funciona se você for root)

netstat -an

Mostrar a ll portas em uso, mostrar apenas n umbers - não resolver nomes

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

por exemplo

lsof -i tcp@localhost:25

para ver se há algo escutando na porta localhost 25 / TCP, ou

lsof -i [email protected]:636 

para ver se há algum soquete local ou remoto ou escutando (local) ou conectado (local ou remoto) para qualquer host / interface

    
por 29.05.2009 / 18:21
2

lsof (lista de arquivos abertos) é uma boa ferramenta para ver se um processo está escutando em uma porta

lsof -P | grep :<port-number>

netstat é uma boa ferramenta para ver se há conexões ativas.

netstat -n | grep :<port-number>

    
por 29.05.2009 / 13:06
2

Você não menciona qual protocolo deseja usar, ou seja, TCP ou UDP - e também é importante perceber que a "porta" não é tão granular que o sistema suporta para desambiguar sockets. Por exemplo. Se o seu sistema tiver vários endereços IP, a porta 80 pode estar em uso em todos os endereços IP (o aplicativo foi ligado a "0.0.0.0" ou "::" ou a cada endereço IP em seqüência) ou pode estar em uso. somente em um subconjunto desses endereços IP.

A melhor e mais segura forma de determinar se uma porta / endereço é livre e está disponível para tentar se ligar a ela. O Netcat é útil para isso.

nc -l [-s a.b.c.d] -p NN

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

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

nc [-u] a.b.c.d NN

se conectará à porta NN em a.b.c.d, usando UDP se o sinalizador -u for especificado. Você pode digitar a entrada no final do cliente e ela deve aparecer no servidor. Se isso não acontecer, você precisa examinar as ferramentas específicas do sistema e da rede.

    
por 29.05.2009 / 15:20
2

Eu uso fuser (no pacote psmisc):

fuser -n tcp PORT

Traz de volta o pid do processo ligado a essa porta.

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

telnet 127.0.0.1 PORT

    
por 29.05.2009 / 18:05
2

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

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

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

    
por 27.06.2011 / 21:30
0

Muitas maneiras de fazer isso me causaram problemas porque não funcionavam no linux e osx, e / ou porque não mostravam as portas usadas pelo docker, ou processos que eram de propriedade do root. Agora eu só uso esse programa de javascript:

(verifique se você tem o nó instalado e se ele funciona com node não apenas nodejs ou altere o programa de acordo)

salve o seguinte em um arquivo chamado check-port em 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

execute a partir do seu caminho

check-port 8080

ou execute a partir do mesmo diretório

./check-port 8080

até agora está funcionando muito bem.

    
por 02.02.2018 / 12:07