web-dev-qa-db-fra.com

Comment créer un écouteur TCP?

Introduction: J'ai créé une fonction bash qui est capable de vérifier si un port est disponible et l'incrémente de 1 s'il est faux jusqu'à un certain numéro de port maximum. Par exemple, si le port 500 n'est pas disponible, la disponibilité de 501 sera vérifiée jusqu'à 550.

Objectif: Afin de tester cette fonction bash, je dois créer une gamme de ports qui sont en état LISTEN.

Tentatives: Sous Windows, il est possible de créer un port LISTEN à l'aide de ces commandes 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>

Sur cette base, j'essayais de penser à une commande qui pourrait faire la même chose sur CentOS, mais je ne sais pas pourquoi et j'ai commencé à Google sans trouver de solution qui résout ce problème.

Réponse attendue : J'accepterai et voterai la réponse contenant une commande capable de créer un port LISTEN et une fois la commande exécutée, le port devrait rester à l’écoute, c’est-à-dire:

[user@Host ~]$ ss -nat | grep 500
LISTEN     0      128                       *:500                       *:*
46
030

Vous pouvez utiliser nc -l comme méthode pour faire ce que vous cherchez. Certaines implémentations de nc ont un -L option qui permet aux connexions de persister.

Si vous n'en avez besoin que pendant un petit moment, vous pouvez ouvrir cette commande dans une boucle for et avoir un tas de ports ouverts de cette façon.

Si vous en avez besoin plus longtemps, vous pouvez utiliser l'un des super serveurs pour créer un démon.

46
Dana Marble

vous pouvez créer un écouteur de port à l'aide de Netcat.

root@ubuntu:~# nc -l 5000

vous pouvez également vérifier si le port est ouvert ou non à l'aide de la commande 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

vous pouvez également vérifier avec nc:

Écouteur du serveur Netcat:

nc -l localhost 5000

Client Netcat:

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

si le port n'est pas ouvert

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

Écoutez à l'aide de netcat.

# nc -l 5555

Vérifier à l'aide de ss

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

Notez que le paquet netcat de Debian a une implémentation différente où (au moins) vous devez fournir le port via l'option -p Et l'option -k Ne fonctionne pas. Vous pouvez rencontrer ce problème en utilisant Docker.

Sudo apt install -y netcat

nc -l -p 1337

Vous pouvez envisager d'utiliser openbsd-netcat À la place lorsque l'option -k Fonctionne.

0
thisismydesign

Ci-dessous python est utile pour ouvrir un port factice

'''    Simple socket server using threads
'''
import socket
import sys
Host = ''   # Symbolic name, meaning all available interfaces
PORT = 5500 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
#Bind socket to local Host and port
try:
    s.bind((Host, PORT))
except socket.error as msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()
print 'Socket bind complete'
#Start listening on socket
s.listen(10)
print 'Socket now listening'
#now keep talking with the client
while 1:
    #wait to accept a connection - blocking call
    conn, addr = s.accept()
    print 'Connected with ' + addr[0] + ':' + str(addr[1])
s.close()

Enregistrez le fichier et exécutez-le avec la commande python comme indiqué ci-dessous

~]# python portlistener.py
Socket created
Socket bind complete
Socket now listening

Ensuite, vous pouvez vérifier à partir de la machine requise.

0
Rohit