it-swarm.com.de

Überprüfen Sie den Status eines Ports auf dem Remote-Host

Ich benötige eine Befehlszeile, die den Portstatus auf einem Remote-Host überprüfen kann. Ich habe es versucht ping xxx.xxx.xxx.xxx:161 erkennt aber den "Host" nicht. Ich dachte, es sei eine "gute" Antwort, bis ich den gleichen Befehl gegen einen Host ausführte, von dem ich weiß, dass dieser Port offen ist. Dies gilt für eine Batchdatei unter Windows, die den Status des Remote-Ports überprüft und anschließend einen Befehl ausführt, der diesen Remote-Port für Informationen verwendet. Anschließend wird der Befehl zum erneuten Überprüfen des Remote-Ports ausgeführt und anschließend der Befehl, der diesen Port auf dem nächsten Server für Informationen verwendet , und so weiter. Ich habe überall nachgesehen und gedacht, der Ping könnte es tun, aber es muss verschiedene Versionen von Ping geben. Ich nehme an, dass der Server, auf dem ich das tue, diese Option nicht anzeigt.

Nur zum Kichern habe ich einen webbasierten Remote-Port-Checker von einer Website aus versucht - und die Ergebnisse waren sowohl für den "Problem" -Server als auch für den richtigen Server korrekt. Ich kann dies jedoch nicht in einem Batch-Lauf mit mehr als 500 Server-IPs verwenden.

Kann ich etwas tun, das einfach ist? Meine Perl-Kenntnisse sind extrem verrostet (benutze es oder verliere es), ich kenne keine anderen Windows-basierten Sprachen außer Batch. Unix ist meine Fähigkeit, aber dies muss von Windows Server 2003 ausgeführt werden.

151
Sheila

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

Überprüfen Sie beispielsweise eine bekannte IP-Adresse auf Telnet:

nmap -A 192.168.0.5/32 -p 23

Suchen Sie beispielsweise unter Host.example.com nach offenen Ports von 20 bis 30:

nc -z Host.example.com 20-30
142
Glenn

In der Eingabeaufforderung können Sie den Befehl telnet verwenden. Um beispielsweise eine Verbindung mit IP 192.168.10.1 über Port 80 herzustellen,

telnet 192.168.10.1 80

Zum Aktivieren von Telnet in Windows 7 und höher klicken . Aktivieren Sie im verknüpften Artikel Telnet über die Systemsteuerung -> Programme und Funktionen -> Windows-Funktionen -> Telnet-Client, oder führen Sie dies einfach in einer Administrator-Eingabeaufforderung aus:

dism /online /Enable-Feature /FeatureName:TelnetClient
120
Naveen Yedugani

Zu Skriptzwecken habe ich festgestellt, dass der Befehl curl dies zum Beispiel kann:

$ 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 dies nicht für alle Dienste, da curl in einigen Fällen (laut Kommentar) unterschiedliche Fehlercodes zurückgeben kann, sodass das Hinzufügen der folgenden Bedingung auf zuverlässige Weise funktionieren kann:

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

Hinweis: -m5 Hinzugefügt, um das maximale Verbindungszeitlimit von 5 Sekunden festzulegen.

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

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

Führen Sie einfach Folgendes aus, um den zurückgegebenen Fehlercode zu beheben: curl Host:port, Z.

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

Siehe: man curl Für eine vollständige Liste der Beendigungscodes.

25
kenorb

Drücken Sie Windows + R Geben Sie cmd und ein Enter

In Eingabeaufforderung eingeben

telnet "machine name/ip" "port number"

Wenn der Port nicht geöffnet ist, wird folgende Meldung angezeigt:

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

Andernfalls werden Sie zum geöffneten Hafen gebracht (leerer Bildschirm wird angezeigt)

22
Leo

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
18
minhas23

nc oder 'netcat' hat auch einen Scan-Modus, der von Nutzen sein kann.

4
caskey

In Bash können Sie Pseudo-Gerätedateien verwenden, mit denen eine TCP Verbindung zum zugehörigen Socket hergestellt werden kann. Die Syntax lautet /dev/$tcp_udp/$Host_ip/$port.

Hier ist ein einfaches Beispiel, um zu testen, ob Memcached ausgeführt wird:

</dev/tcp/localhost/11211 && echo Port open || echo Port closed

Hier ist ein weiterer Test, um festzustellen, ob eine bestimmte Website zugänglich ist:

$ echo "HEAD / HTTP/1.0" > /dev/tcp/example.com/80 && echo Connection successful.
Connection successful.

Weitere Informationen finden Sie unter: Advanced Bash-Scripting Guide: Kapitel 29. /dev und /proc .

Verwandte: Test, ob ein Port auf einem Remote-System erreichbar ist (ohne Telnet) bei SuperUser.

Weitere Beispiele finden Sie unter: So öffnen Sie einen TCP/UDP-Socket in einer Bash-Shell (Artikel).

2
kenorb

Ich denke, Sie suchen nach Hping ( http://www.hping.org/ ), das eine Windows-Version hat.

"Die Schnittstelle ist an den Unix-Befehl ping (8) angelehnt, aber hping kann nicht nur ICMP-Echoanforderungen senden. Es unterstützt TCP, UDP, ICMP ..."

Es ist auch sehr nützlich, wenn Sie sehen möchten, wo entlang einer Route ein TCP Port blockiert wird (wie von einer Firewall), wo sich ICMP möglicherweise nicht befindet.

2
Trueblood