Introduction: J'ai créé une fonction bash capable de vérifier si un port est disponible et l'incrémente de 1 si elle est fausse jusqu'à un certain numéro de port maximum. Par exemple, si le port 500 est indisponible, 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 à l'état LISTEN.
Tentatives: Sous Windows, il est possible de créer un port LISTEN à l’aide des commandes PowerShell suivantes :
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é à utiliser Google sans trouver de solution permettant de résoudre ce problème.
Réponse attendue : j'accepterai 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'état LISTEN, c'est-à-dire:
[user@host ~]$ ss -nat | grep 500
LISTEN 0 128 *:500 *:*
la source
netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu
. Sur * BSD:netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu
.Réponses:
Vous pouvez utiliser
nc -l
comme méthode pour faire ce que vous recherchez. Certaines implémentations denc
ont une-L
option qui permet aux connexions de persister.Si vous n'en avez besoin que pendant un petit moment, vous pouvez ouvrir cette commande en
for
boucle et ouvrir un grand nombre de ports de cette façon.Si vous avez besoin d'ouvrir plus longtemps, vous pouvez utiliser l'un des super serveurs pour créer un démon.
la source
-L
je suggère:-k
,--keep-open
accepter plusieurs connexions en mode écoutevous pouvez créer un port d'écoute à l'aide de Netcat.
vous pouvez également vérifier si le port est ouvert ou non à l'aide de la commande netstat.
vous pouvez aussi vérifier avec nc:
Écouteur Netcat Server:
Client Netcat:
si le port n'est pas ouvert
la source
-p
ou cela ne fonctionnait pas:nc -l -p 1234
/bin/nc --> nc.traditional
(par exemple, debian), utilisez l'-p
option, comme @Leahkim l'a conseillé ci-dessus.Écoutez en utilisant netcat.
Vérifier en utilisant ss
la source
Notez que le
netcat
paquet Debian a une implémentation différente où (au moins) vous devez fournir le port via l'-p
option et l'-k
option 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 à la
openbsd-netcat
place où l'-k
option fonctionne.la source
Le code python ci-dessous est utile pour ouvrir un port factice
'' 'Serveur de socket simple utilisant des threads' '' importation de sockets import sys HOST = '' # Nom symbolique, signifiant toutes les interfaces disponibles PORT = 5500 # Port non privilégié arbitraire s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Socket created'
Lier le socket à l'hôte local et au port
try: s.bind ((HOST, PORT)) sauf socket.error en tant que msg: print 'La liaison a échoué. Code d'erreur: '+ str (msg [0]) +' Message '+ msg [1] sys.exit () print' Socket bind complete '
Commencer à écouter sur la prise
s.listen (10) print 'Socket now listening'
maintenant continue à parler avec le client
tandis que 1: # attend pour accepter une connexion - blocage de la communication, addr = s.accept () print 'Connecté avec' + 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 créé Socket bind Socket complet Socket en cours d'écoute
Ensuite, vous pouvez vérifier à partir de la machine requise.
la source