GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Effizient testen, ob ein Port unter Linux offen ist?

Eine Überraschung, die ich kürzlich herausfand, ist, dass Bash nativ TCP-Verbindungen als Dateideskriptoren unterstützt. Zu verwenden:

exec 6<>/dev/tcp/ip.addr.of.server/445
echo -e "GET / HTTP/1.0\n" >&6
cat <&6

Ich verwende 6 als Dateideskriptor, weil 0,1,2 stdin, stdout und stderr sind. 5 wird manchmal von Bash für untergeordnete Prozesse verwendet, daher sollten 3,4,6,7,8 und 9 sicher sein.

Gemäß dem Kommentar unten, um das Abhören auf einem lokalen Server zu testen in einem Skript:

exec 6<>/dev/tcp/127.0.0.1/445 || echo "No one is listening!"
exec 6>&- # close output connection
exec 6<&- # close input connection

Um festzustellen, ob jemand zuhört, versuchen Sie, eine Verbindung per Loopback herzustellen. Wenn dies fehlschlägt, wird der Port geschlossen oder wir haben keinen Zugriff. Schließen Sie danach die Verbindung.

Ändern Sie dies für Ihren Anwendungsfall, z. B. Senden einer E-Mail, Beenden des Skripts bei einem Fehler oder Starten des erforderlichen Dienstes.


Hier gibt es eine sehr kurze Antwort mit "schneller Antwort":How to test if remote TCP port is open from Shell script?

nc -z <host> <port>; echo $?

Ich benutze es mit 127.0.0.1 als "Remote"-Adresse.

dies gibt "0" zurück, wenn der Port offen ist, und "1", wenn der Port geschlossen ist

z. B.

nc -z 127.0.0.1 80; echo $?

-z Gibt an, dass nc nur nach lauschenden Daemons suchen soll, ohne Daten an sie zu senden. Es ist ein Fehler, diese Option in Verbindung mit der Option -l zu verwenden.


Sie können netstat auf diese Weise für viel schnellere Ergebnisse verwenden:

Unter Linux:

netstat -lnt | awk '$6 == "LISTEN" && $4 ~ /\.445$/'

Auf dem Mac:

netstat -anp tcp | awk '$6 == "LISTEN" && $4 ~ /\.445$/'

Dies gibt eine Liste von Prozessen aus, die auf dem Port (in diesem Beispiel 445) lauschen, oder es wird nichts ausgegeben, wenn der Port frei ist.


Sie können dafür netcat verwenden.

nc ip port < /dev/null

verbindet sich mit dem Server und schließt die Verbindung direkt wieder. Wenn netcat keine Verbindung herstellen kann, gibt es einen Exit-Code ungleich Null zurück. Der Exit-Code wird in der Variablen $? gespeichert. Als Beispiel,

nc ip port < /dev/null; echo $?

gibt 0 zurück, wenn und nur wenn netcat sich erfolgreich mit dem Port verbinden konnte.


Linux
  1. Telnet zu einem Port, um die Netzwerkkonnektivität zu testen

  2. So ändern Sie den SSH-Port unter Linux

  3. So öffnen Sie Appimage unter Linux

  4. Linux – Raspberrypi Serielle Schnittstelle?

  5. So überprüfen Sie den offenen Port auf einem Remote-Linux-System

So finden und schließen Sie offene Ports in Linux

So verwenden Sie Netcat zum Scannen offener Ports in Linux

So pingen Sie eine Portnummer in Linux an

So öffnen Sie eine PDF-Datei im Linux-Terminal

Öffnen eines Ports unter Linux

Alle Möglichkeiten, um zu überprüfen, ob ein Port in Linux geöffnet ist