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.
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
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
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.
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)
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
nc oder 'netcat' hat auch einen Scan-Modus, der von Nutzen sein kann.
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).
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.