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 *:*
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.
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
Écoutez à l'aide de netcat.
# nc -l 5555
Vérifier à l'aide de ss
# ss -nat|grep 5555
LISTEN 0 1 *:5555 *:*
#
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.
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.