Introdução: Criei uma função bash que é capaz de verificar se uma porta está disponível e a incrementa em 1 se for falso até um determinado número máximo de portas. Por exemplo, se a porta 500 estiver indisponível, a disponibilidade de 501 será verificada até 550.
Objetivo: Para testar esta função bash, preciso criar um intervalo de portas que estão no estado LISTEN.
Tentativas: No Windows, é possível criar uma porta LISTEN usando estes comandos do PowerShell :
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u> $listener = [System.Net.Sockets.TcpListener]1234
PS C:\Users\u> $listener.Start();
PS C:\Users\u> netstat -nat | grep 1234
TCP 0.0.0.0:1234 0.0.0.0:0 LISTENING InHost
PS C:\Users\u> $listener.Stop();
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u>
Com base nisso, eu estava tentando pensar em um comando que pudesse fazer o mesmo no CentOS, mas não sei por que e comecei a pesquisar no Google sem encontrar uma solução que resolvesse esse problema.
Resposta esperada : vou aceitar e aprovar a resposta que contém um comando capaz de criar uma porta LISTEN e, uma vez executado o comando, a porta deve permanecer no estado LISTEN, ou seja:
[user@host ~]$ ss -nat | grep 500
LISTEN 0 128 *:500 *:*
fonte
netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu
. On * BSD:netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu
.Respostas:
Você pode usar
nc -l
como método para fazer o que está procurando. Algumas implementações denc
possuem uma-L
opção que permite que as conexões persistam.Se você precisar apenas deles por um tempo, poderá abrir esse comando em um
for
loop e ter várias portas abertas dessa maneira.Se você precisar deles abertos por mais tempo, poderá usar um dos super servidores para criar um daemon.
fonte
-L
sugerir :-k
,--keep-open
aceite várias conexões no modo de escutavocê pode criar um ouvinte de porta usando o Netcat.
você também pode verificar se a porta está aberta ou não usando o comando netstat.
você também pode verificar com nc:
Ouvinte do Netcat Server:
Cliente Netcat:
se a porta não estiver aberta
fonte
-p
ou não funcionou:nc -l -p 1234
/bin/nc --> nc.traditional
(por exemplo, debian), use a-p
opção, como @Leahkim aconselhou, acima.Ouça usando o netcat.
Verifique usando ss
fonte
Note que o
netcat
pacote Debian tem uma implementação diferente onde (pelo menos) você precisa fornecer a porta através da-p
opção e a-k
opção não funciona. Você pode enfrentar esse problema usando o Docker.sudo apt install -y netcat
nc -l -p 1337
Você pode usar o
openbsd-netcat
lugar onde a-k
opção funciona.fonte
Abaixo, o código python é útil para abrir uma porta fictícia
'' 'Servidor de soquete simples usando threads' '' import socket import sys HOST = '' # Nome simbólico, significando todas as interfaces disponíveis PORT = 5500 # Porta arbitrária não privilegiada s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Soquete criado'
Ligar o soquete ao host e porta local
try: s.bind ((HOST, PORT)), exceto socket.error como msg: print 'Falha na ligação. Código de erro: '+ str (msg [0]) +' Message '+ msg [1] sys.exit () print' Socket bind complete '
Comece a ouvir no soquete
s.listen (10) print 'Soquete agora escutando'
agora continue falando com o cliente
Enquanto 1: # espera para aceitar uma conexão - bloqueando a conexão conn, addr = s.accept () imprime 'Conectado com' + addr [0] + ':' + str (addr [1]) s.close ()
Salve o arquivo e execute-o com o comando python, como mostrado abaixo
~] # python portlistener.py Socket criado Socket bind completo Socket agora escutando
Então você pode verificar na máquina necessária.
fonte