Einführung: Ich habe eine Bash-Funktion erstellt, mit der überprüft werden kann, ob ein Port verfügbar ist, und die bis zu einer bestimmten maximalen Portnummer um 1 erhöht wird, wenn false. Wenn beispielsweise Port 500 nicht verfügbar ist, wird die Verfügbarkeit von 501 bis 550 überprüft.
Ziel: Um diese Bash-Funktion zu testen, muss eine Reihe von Ports erstellt werden, die sich im Status LISTEN befinden.
Versuche: Unter Windows ist es möglich, einen LISTEN-Port mit diesen PowerShell-Befehlen zu erstellen :
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>
Auf dieser Grundlage habe ich versucht, über einen Befehl nachzudenken, der dasselbe auf CentOS ausführen kann, aber ich weiß nicht warum und habe mit Google begonnen, ohne eine Lösung zu finden, die dieses Problem löst.
Erwartete Antwort : Ich akzeptiere die Antwort mit einem Befehl, mit dem ein LISTEN-Port erstellt werden kann, und stimme ihr zu. Sobald der Befehl ausgeführt wurde, sollte der Port im LISTEN-Status bleiben, dh:
[user@host ~]$ ss -nat | grep 500
LISTEN 0 128 *:500 *:*
quelle
netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu
. Ein * BSD:netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu
.Antworten:
Sie könnten
nc -l
als Methode verwenden, um das zu tun, wonach Sie suchen. Einige Implementierungen vonnc
haben eine-L
Option, mit der die Verbindungen bestehen bleiben.Wenn Sie sie nur für kurze Zeit benötigen, können Sie diesen Befehl in einer
for
Schleife öffnen und eine Reihe von Ports auf diese Weise öffnen.Wenn Sie diese länger öffnen müssen, können Sie einen der Super-Server verwenden, um einen Daemon zu erstellen.
quelle
-L
würde ich vorschlagen:-k
,--keep-open
akzeptieren mehrere Verbindungen im Modus hörenSie können mit Netcat einen Port-Listener erstellen.
Sie können auch mit dem Befehl netstat prüfen, ob der Port geöffnet ist oder nicht.
Sie können auch mit nc überprüfen:
Netcat Server Listener:
Netcat Client:
wenn der Port nicht offen ist
quelle
-p
oder es hat nicht funktioniert:nc -l -p 1234
/bin/nc --> nc.traditional
Verwenden Sie für diejenigen mit (z. B. Debian) die-p
Option, wie oben von @Leahkim empfohlen.Hören Sie mit Netcat.
Überprüfen Sie mit ss
quelle
Beachten Sie, dass das Debian-
netcat
Paket eine andere Implementierung hat, bei der Sie (zumindest) den Port über die-p
Option bereitstellen müssen und die-k
Option nicht funktioniert. Dieses Problem tritt möglicherweise mit Docker auf.sudo apt install -y netcat
nc -l -p 1337
Sie können
openbsd-netcat
stattdessen verwenden, wo die-k
Option funktioniert.quelle
Der folgende Python-Code ist hilfreich, um einen Dummy-Port zu öffnen
'' 'Einfacher Socketserver mit Threads' '' importieren Socket importieren sys HOST = '' # Symbolischer Name, dh alle verfügbaren Schnittstellen PORT = 5500 # Beliebiger nicht privilegierter Port s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Socket erstellt'
Binden Sie den Socket an den lokalen Host und den Port
versuche: an bind ((HOST, PORT)) außer socket.error als msg: print 'Bind fehlgeschlagen. Fehlercode: '+ str (msg [0]) +' Message '+ msg [1] sys.exit () print' Socket bind complete '
Hör auf die Buchse
s.listen (10) print 'Socket hört zu'
Sprechen Sie jetzt weiter mit dem Kunden
während 1: #warten, bis eine Verbindung akzeptiert wird - Anruf blockieren conn, addr = s.accept () print 'Verbunden mit' + addr [0] + ':' + str (addr [1]) s.close ()
Speichern Sie die Datei und führen Sie sie mit dem Python-Befehl wie unten gezeigt aus
~] # python portlistener.py Socket erstellt Socket binden abgeschlossen Socket hört jetzt zu
Dann können Sie von der erforderlichen Maschine überprüfen.
quelle