Existe algum comando que eu possa executar a partir do bash que me diga se uma porta já está aberta?
28
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
Esta (netstat) é a solução mais rápida ...
... mas isso lhe dá mais controle (ao custo da velocidade (às vezes muita velocidade)) ...
O exemplo acima, por exemplo, mostra todas as portas TCP abertas e no
LISTEN
estado AND (-a
) pertencente aowww-data
usuário Apache ( ).fonte
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 -O
target
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:
amap
target
1-6000
fonte
Experimentar
Se você obtiver algum resultado, algo está escutando e vinculado, por exemplo
fonte
Mostre as
t
portas cp que estãol
diminuindo, mostren
apenas os umbers (não resolva nomes - torna mais rápido) e mostre op
rocess que está ouvindo (op
único funciona se você for root)Mostre as
u
portas dp que estãol
diminuindo, mostren
apenas umbers (não resolva nomes - torna mais rápido) e mostre op
rocess que está ouvindo (op
único funciona se você for root)Mostre as
u
portas dp que estão abertas, mas não escutam, mostran
apenas umbers (não resolva nomes - torna mais rápido) e mostra op
rocess que está escutando (op
único funciona se você for root)Mostrar
a
ll portas em uso, mostrarn
apenas umbers - não resolva nomespor exemplo
para ver se alguma coisa está escutando na porta localhost 25 / TCP ou
para verificar se há soquetes locais ou remotos, escutando (local) ou conectados (local ou remoto) a qualquer host / interface
fonte
lsof (listar arquivos abertos) é uma boa ferramenta para verificar se um processo está escutando em uma porta
O netstat é uma boa ferramenta para verificar se há alguma conexão ativa.
fonte
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.
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.
fonte
Eu uso o fusor (no pacote psmisc):
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 :)
fonte
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.
fonte
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
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
node
não apenasnodejs
ou altere o programa de acordo)salve o seguinte em um arquivo chamado
check-port
em seu caminho ou em seu projetodefinir permissões
fugir do seu caminho
ou execute a partir do mesmo diretório
até agora está funcionando muito bem.
fonte