Como criar um ouvinte TCP?


40

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                       *:*

Em uma nota lateral: é possível encontrar as portas de escuta sem passar por toda essa dança. No Linux: 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.
Lcd047

Respostas:


40

Você pode usar nc -lcomo método para fazer o que está procurando. Algumas implementações de ncpossuem uma -Lopção que permite que as conexões persistam.

Se você precisar apenas deles por um tempo, poderá abrir esse comando em um forloop 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.


11
Em vez de -Lsugerir : -k, --keep-openaceite várias conexões no modo de escuta
Manuel Durando

37

você pode criar um ouvinte de porta usando o Netcat.

root@ubuntu:~# nc -l 5000

você também pode verificar se a porta está aberta ou não usando o comando netstat.

root@vm-ubuntu:~# netstat -tulpen | grep nc
tcp        0      0 0.0.0.0:5000             0.0.0.0:*               LISTEN      0          710327      17533/nc

você também pode verificar com nc:

Ouvinte do Netcat Server:

nc -l localhost 5000

Cliente Netcat:

root@vm-ubuntu:~# nc -v localhost 5000
Connection to localhost 5000 port [tcp/*] succeeded!

se a porta não estiver aberta

root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused

4
Eu tive que especificar a porta com -pou não funcionou:nc -l -p 1234
Leahkim

nc -l 12345 funcionou no ubuntu 16.04
yuen shi 08/10

Para aqueles com /bin/nc --> nc.traditional(por exemplo, debian), use a -popção, como @Leahkim aconselhou, acima.
ankostis

6

Ouça usando o netcat.

# nc -l 5555

Verifique usando ss

# ss -nat|grep 5555
LISTEN     0      1                         *:5555                     *:*
#

0

Note que o netcatpacote Debian tem uma implementação diferente onde (pelo menos) você precisa fornecer a porta através da -popção e a -kopçã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-netcatlugar onde a -kopção funciona.


0

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.

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.