¿Cómo crear un escucha TCP?

40

Introducción: he creado una función bash que puede verificar si un puerto está disponible y lo incrementa en 1 si es falso hasta cierto número de puerto máximo. Por ejemplo, si el puerto 500 no está disponible, se comprobará la disponibilidad de 501 hasta 550.

Objetivo: para probar esta función bash, necesito crear un rango de puertos que estén en estado LISTEN.

Intentos: en Windows es posible crear un puerto ESCUCHAR usando estos comandos de 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>

En base a esto, estaba tratando de pensar en un comando que pudiera hacer lo mismo en CentOS, pero no sé por qué y comencé a buscar en Google sin encontrar una solución que resuelva este problema.

Respuesta esperada : aceptaré y votaré la respuesta que contiene un comando que puede crear un puerto LISTEN y una vez que el comando se haya ejecutado, el puerto debe permanecer en estado LISTEN, es decir:

[user@host ~]$ ss -nat | grep 500
LISTEN     0      128                       *:500                       *:*
030
fuente
Como nota al margen: es posible encontrar los puertos de escucha sin pasar por todo este baile. En Linux: netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu. En * BSD: netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu.
lcd047

Respuestas:

40

Puede utilizarlo nc -lcomo método para hacer lo que está buscando. Algunas implementaciones denc tienen una -Lopción que permite que las conexiones persistan.

Si solo los necesita por un tiempo, puede abrir este comando en un for bucle y tener un montón de puertos abiertos de esa manera.

Si necesita abrirlos por más tiempo, puede usar uno de los súper servidores para crear un demonio.

Dana Marble
fuente
1
En lugar de -Lque sugeriría: -k, --keep-openaceptar varias conexiones en modo de escucha
Manuel Durando
37

puede crear un escucha de puerto con Netcat.

root@ubuntu:~# nc -l 5000

También puede verificar si el puerto está abierto o no utilizando el 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

también puedes consultar con nc:

Oyente del servidor Netcat:

nc -l localhost 5000

Cliente Netcat:

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

si el puerto no está abierto

root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused
sameh Ammar
fuente
44
Tuve que especificar el puerto -po no funcionó:nc -l -p 1234
Leahkim
nc -l 12345 trabajó en ubuntu 16.04
yuen shi
Para aquellos con /bin/nc --> nc.traditional(por ejemplo, debian), use la -popción, como aconsejó @Leahkim, arriba.
Ankostis
6

Escucha usando netcat.

# nc -l 5555

Verificar usando ss

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

Tenga en cuenta que el netcatpaquete de Debian tiene una implementación diferente donde (al menos) necesita proporcionar el puerto a través de la -popción y la -kopción no funciona. Puede encontrar este problema con Docker.

sudo apt install -y netcat

nc -l -p 1337

Puede considerar usar en su openbsd-netcatlugar donde funciona la -kopción.

este es mi diseño
fuente
0

El siguiente código de Python es útil para abrir un puerto ficticio

'' 'Servidor de socket simple usando hilos' '' import socket import sys HOST = '' # Nombre simbólico, lo que significa todas las interfaces disponibles PORT = 5500 # Puerto arbitrario no privilegiado s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) imprimir 'Enchufe creado'

Enlace socket al host local y puerto

intente: s.bind ((HOST, PORT)) excepto socket.error como msg: print 'Error de enlace. Código de error: '+ str (msg [0]) +' Mensaje '+ msg [1] sys.exit () print' Enlace de socket completado '

Comience a escuchar en el zócalo

s.listen (10) print 'Enchufe ahora escuchando'

ahora sigue hablando con el cliente

mientras que 1: # espera para aceptar una conexión, bloquea la conexión de llamadas, addr = s.accept () imprime 'Conectado con' + addr [0] + ':' + str (addr [1]) s.close ()

Guarde el archivo y ejecútelo con el comando python como se muestra a continuación

~] # python portlistener.py Socket creado Socket bind complete Socket ahora escucha

Luego puede verificar desde la máquina requerida.

Rohit
fuente