Wie kann ich von der Shell aus prüfen, ob ein entfernter TCP-Port erreichbar ist?
Diese Frage habe ich mir selbst schon mehrmals gestellt. Und mindestens genauso oft wurde sie mir schon von anderen gestellt. Als Antwort kommen hier meist zuerst telnet
oder netcat
(nc
) in den Sinn. Doch in einer RHEL-Minimal-Installation sind diese beiden Programme nicht enthalten und müssen erst nachinstalliert werden. Was tut man in diesem Fall (ohne den Paketmanager zu starten)?
Ich möchte in diesem Artikel mehrere Antworten auf die Eingangsfrage festhalten. Dabei beginne ich mit denen, die ich auf stackoverflow gefunden habe.
Bash und timeout
Von RHEL 6 aufwärts sollte das Programm timeout
in der Minimal-Installation enthalten sein. In Fedora 35 und Debian 11 ist es ebenfalls enthalten. Es stammt aus dem Paket coreutils
, in dem es meines Wissens spätestens seit Version 8.22 enthalten ist.
Kommando
$ timeout $TIMEOUT_SECONDS bash -c "</dev/tcp/${HOST}/${PORT}"; echo $?
Beispiele
Erfolgreicher Verbindungstest
$ HOST=beispiel.de
$ PORT=443
$ timeout 5 bash -c "</dev/tcp/${HOST}/${PORT}"; echo $?
0
Selbstverständlich funktioniert auch folgender Befehl:
$ timeout 5 bash -c "</dev/tcp/beispiel.de/443"; echo $?
0
Fehlgeschlagener Verbindungstest
Jetzt nutze ich einen Port, der nicht erreichbar ist:
$ timeout 5 bash -c "</dev/tcp/beispiel.de/4433"; echo $?
124
Nutzung von nc
Sollte nc
bereits installiert sein, kann man auch dieses Programm für einen Verbindungstest nutzen:
Kommando
$ nc -w $TIMEOUT_SECONDS -v $HOST $PORT </dev/null; echo $?
Beispiele
Erfolgreicher Verbindungstest
$ HOST=beispiel.de
$ PORT=443
$ nc -w 2 -v $HOST $PORT </dev/null; echo $?
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 23.21.157.88:443.
Ncat: 0 bytes sent, 0 bytes received in 0.54 seconds.
0
Fehlgeschlagener Verbindungstest
$ nc -w 2 -v beispiel.de 4433 </dev/null; echo $?
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: TIMEOUT.
1
Zusammenfassung
Mit timeout
und nc
habe ich meine beiden Favoriten festgehalten. Mit beiden lässt sich die Erreichbarkeit von entfernten TCP-Ports testen (die von lokalen TCP-Ports übrigens auch).
Falls ihr noch weitere Möglichkeiten kennt, mit Bordmitteln, die in der Minimal-Installation einer Distribution enthalten sind, um einen Verbindungstest durchzuführen, schreibt sie mir gern in die Kommentare. Ich nehme sie dann gern mit in den Artikel auf.