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
aber es erkennt den "Host" nicht. Ich dachte, es wäre 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 dann einen Befehl ausführt, der diesen Remote-Port zur Information verwendet, dann den Befehl zum Überprüfen des Remote-Ports erneut und dann den Befehl, der diesen Port auf dem nächsten Server zur Information verwendet , und so weiter. Ich habe überall gesucht und gedacht, dass der Ping es tun könnte, aber es muss verschiedene Versionen von Ping geben, ich nehme an, da der Server, auf dem ich dies mache, diese Option nicht anzeigt.
Nur zum Lachen habe ich einen webbasierten Remote-Port-Checker von einer Website aus ausprobiert - 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), kenne keine anderen Windows-basierten Sprachen außer Batch. Unix ist meine Fähigkeit, aber dies muss von Widows Server 2003 ausgeführt werden.
quelle
ps> tnc xxx.xxx.xxx.xxx -port 161
Antworten:
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:
Suchen Sie beispielsweise auf host.example.com nach offenen Ports von 20 bis 30:
quelle
nc -zv host.example.com 20-30
. Andernfalls erfolgt keine Ausgabe-z
fürnc
ist unter Linux nicht verfügbar.In der Eingabeaufforderung können Sie den Befehl telnet verwenden. Zum Beispiel, um über Port 80 eine Verbindung zu IP 192.168.10.1 herzustellen.
Um Telnet in Windows 7 und höher zu aktivieren, klicken Sie auf . Aktivieren Sie im verlinkten Artikel Telnet über die Systemsteuerung -> Programme und Funktionen -> Windows-Funktionen -> Telnet-Client oder führen Sie dies einfach in einer Administrator-Eingabeaufforderung aus:
quelle
Für Skriptzwecke habe ich festgestellt, dass der
curl
Befehl dies kann, zum Beispiel:Möglicherweise funktioniert es nicht für alle Dienste, da
curl
in einigen Fällen (gemäß Kommentar) unterschiedliche Fehlercodes zurückgegeben werden können. Das Hinzufügen der folgenden Bedingung kann daher zuverlässig funktionieren:Hinweis: Hinzugefügt
-m5
, um ein maximales Verbindungszeitlimit von 5 Sekunden festzulegen.Wenn Sie auch überprüfen möchten, ob der Host gültig ist, müssen Sie auch nach dem
6
Exit-Code suchen:Führen Sie einfach Folgendes aus, um den zurückgegebenen Fehlercode zu beheben:
curl host:port
z.Siehe:
man curl
für eine vollständige Liste der Exit-Codes.quelle
curl $IP:$PORT
ergibt:curl: (52) Empty reply from server
(versuscurl: (7) Failed to connect
) aber ähnlichnc
kann ich| grep Empty
für diese Ausgabeanweisungen nicht, wie man es erwarten könnte (etwas über Zeilenumbrüche oder fehlende sofortige Ausgabe?). Ich nehme an, Ihre Leitung ist eine Bedingung, die auf dem Exit-Code basiert, oder? Ich bin auf El Cap; Vielleicht wird in anderen Versionen oder Betriebssystemen der Fehlerstatus-1
eher beendet als52
?curl -s $IP:$PORT >/dev/null; if [ $? -eq 52 ]; then echo "Connected."; else echo "Fail."; fi
Drücken Sie Windows+ RArt
cmd
undEnterGeben Sie in der Eingabeaufforderung ein
Wenn der Port nicht geöffnet ist, wird folgende Meldung angezeigt:
Andernfalls werden Sie zum geöffneten Port weitergeleitet (leerer Bildschirm wird angezeigt)
quelle
Verwenden Sie den Befehl nc.
Sie können auch den Telnet-Befehl verwenden
quelle
nc oder 'netcat' hat auch einen Scan-Modus, der von Nutzen sein kann.
quelle
Ich denke, Sie suchen nach Hping ( http://www.hping.org/ ), das eine Windows-Version hat.
Dies ist auch sehr nützlich, wenn Sie sehen möchten, wo entlang einer Route ein TCP-Port blockiert wird (z. B. durch eine Firewall), wo sich ICMP möglicherweise nicht befindet.
quelle
In Bash können Sie Pseudo-Gerätedateien verwenden, die eine TCP-Verbindung zum zugehörigen Socket herstellen können. Die Syntax lautet
/dev/$tcp_udp/$host_ip/$port
.Hier ist ein einfaches Beispiel, um zu testen, ob Memcached ausgeführt wird:
Hier ist ein weiterer Test, um festzustellen, ob auf eine bestimmte Website zugegriffen werden kann:
Weitere Informationen finden Sie unter: Advanced Bash-Scripting Guide: Kapitel 29.
/dev
und/proc
.Verwandte Themen : Testen Sie, ob ein Port auf einem Remote-System (ohne Telnet) bei SuperUser erreichbar ist.
Weitere Beispiele finden Sie unter: Öffnen eines TCP / UDP-Sockets in einer Bash-Shell (Artikel).
quelle