169 Stimmen

Status eines Ports auf einem entfernten Host überprüfen

Ich benötige eine Befehlszeile, die den Port-Status auf einem entfernten Host überprüfen kann. Ich habe versucht ping xxx.xxx.xxx.xxx:161 aber er erkennt den "Host" nicht. Ich dachte, das sei eine "gute" Antwort, bis ich den gleichen Befehl gegen einen Host ausführte, von dem ich weiß, dass er diesen Port offen hat. Dies ist für eine Batch-Datei unter Windows, die den Status des Remote-Ports prüft und dann einen Befehl ausführt, der diesen Remote-Port für Informationen verwendet, dann wieder den Befehl zur Prüfung des Remote-Ports, dann den Befehl, der diesen Port auf dem nächsten Server für Informationen verwendet, und so weiter. Ich habe überall nachgeschaut und dachte, ping könnte das machen, aber es muss verschiedene Versionen von ping geben, da der Server, auf dem ich das mache, diese Option nicht anzeigt.

Zum Spaß habe ich einen webbasierten Remote-Port-Checker von einer Website ausprobiert - und die Ergebnisse waren sowohl für den "Problem"-Server als auch für den richtigen Server korrekt. Allerdings kann ich das nicht in einem Batch-Lauf mit über 500 Server-IPs verwenden.

Gibt es etwas, das ich einfach tun kann? Meine Perl-Kenntnisse sind extrem eingerostet (use it or lose it), ich kenne keine anderen Windows-basierten Sprachen außer Batch. Unix ist meine Stärke, aber dies muss von Widows Server 2003 aus ausgeführt werden.

163voto

Glenn Punkte 6315

Sie scheinen nach einem Port-Scanner zu suchen, wie z.B. nmap o netcat , die beide für Windows, Linux und Mac OS X verfügbar sind.

Prüfen Sie zum Beispiel, ob telnet auf einer bekannten IP-Adresse verfügbar ist:

nmap -A 192.168.0.5/32 -p 23

Suchen Sie zum Beispiel nach offenen Ports von 20 bis 30 auf host.example.com:

nc -z host.example.com 20-30

133voto

Naveen Yedugani Punkte 1426

In der Eingabeaufforderung können Sie den Befehl telnet.. verwenden. Zum Beispiel, um eine Verbindung zur IP 192.168.10.1 mit Port 80 herzustellen,

telnet 192.168.10.1 80

So aktivieren Sie Telnet in Windows 7 und höher anklicken. . Aktivieren Sie Telnet über die Systemsteuerung -> Programme und Funktionen -> Windows-Funktionen -> Telnet-Client, oder führen Sie dies einfach in einer Eingabeaufforderung aus:

dism /online /Enable-Feature /FeatureName:TelnetClient

29voto

kenorb Punkte 134883

Für Skripting-Zwecke habe ich festgestellt, dass curl Befehl kann dies zum Beispiel tun:

$ curl -s localhost:80 >/dev/null && echo Connected. || echo Fail.
Connected.
$ curl -s localhost:123 >/dev/null && echo Connected. || echo Fail.
Fail.

Möglicherweise funktioniert es nicht bei allen Diensten, da curl kann in einigen Fällen unterschiedliche Fehlercodes zurückgeben (siehe Kommentar), so dass das Hinzufügen der folgenden Bedingung auf zuverlässige Weise funktionieren könnte:

[ "$(curl -sm5 localhost:8080 >/dev/null; echo $?)" != 7 ] && echo OK || echo FAIL

Anmerkung: Hinzugefügt -m5 um den maximalen Verbindungs-Timeout von 5 Sekunden einzustellen.

Wenn Sie auch prüfen möchten, ob der Host gültig ist, müssen Sie prüfen, ob 6 auch den Exit-Code:

$ curl -m5 foo:123; [ $? != 6 -a $? != 7 ] && echo OK || echo FAIL
curl: (6) Could not resolve host: foo
FAIL

Um den zurückgegebenen Fehlercode zu beheben, führen Sie ihn einfach aus: curl host:port , z.B.:

$ curl localhost:80
curl: (7) Failed to connect to localhost port 80: Connection refused

Siehe: man curl für die vollständige Liste der Exit-Codes.

25voto

Leo Punkte 389

Pulse Windows + R Typ cmd y Enter

Geben Sie in der Eingabeaufforderung

telnet "machine name/ip" "port number"

Wenn der Anschluss nicht offen ist, wird diese Meldung angezeigt:

"Connecting To "machine name"...Could not open connection to the host, on port "port number":

Andernfalls werden Sie zu einem geöffneten Anschluss geführt (ein leerer Bildschirm wird angezeigt).

22voto

minhas23 Punkte 8655

Verwenden Sie den Befehl nc,

nc -zv <hostname/ip> <port/port range>

For example,
nc -zv localhost 27017-27019
or
nc -zv localhost 27017

Sie können auch den Befehl telnet verwenden

telnet <ip/host> port

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X