Wie man mit PowerShell prüft, ob ein TCP-Port geöffnet ist – Fallstricke und Details
Wer schon einmal Netzwerkprobleme beheben musste, weiß, wie frustrierend es sein kann, wenn ein Dienst einfach nicht reagiert. Vielleicht blockiert die Firewall eines Servers einen Port, oder eine Netzwerkrichtlinie blendet die offenen Ports aus. PowerShells ` Test-NetConnection` ist hier Gold wert – quasi das Schweizer Taschenmesser für Porttests. Doch nicht immer ist klar, was genau der Befehl bewirkt oder wie die Ergebnisse zu interpretieren sind, insbesondere wenn Probleme auftreten. Es geht nicht nur darum, einen Port anzupingen oder zu prüfen, ob er offen ist; es geht darum, die Ausgabe zu verstehen und zu wissen, wann man welche Parameter verwendet.
Die neue Funktion – die Überprüfung von TCP-Ports – klingt zwar simpel, aber ich bin schon auf Fälle gestoßen, in denen ein Port als offen angezeigt wird, der Dienst aber trotzdem keine Verbindung herstellt. Oder der Befehl selbst schlägt ohne Fehlermeldung fehl. Daher hilft es, die Feinheiten zu verstehen, um solche Momente des Grübelns zu vermeiden, insbesondere an Tagen, an denen die Netzwerkverbindung einfach nicht wie erwartet funktioniert.
Mit PowerShell auf offene TCP-Ports prüfen
Verwendung von Test-NetConnection für Schnellprüfungen
Dies ist die Standardmethode, um zu testen, ob ein bestimmter Port auf einem Remote-Host geöffnet ist. Es ist etwas ungewöhnlich, aber der Befehl lautet:
Test-NetConnection -ComputerName ny-msg01 -Port 25
… zeigt Ihnen sowohl an, ob der Server überhaupt erreichbar ist, als auch, ob der Port Verbindungen akzeptiert. Es versucht zunächst, den Server anzupingen, und prüft dann den TCP-Port. Die Ausgabe sieht folgendermaßen aus:
ComputerName : ny-msg01 RemoteAddress : 10.20.1.7 RemotePort : 25 InterfaceAlias : CORP SourceAddress : 10.20.1.79 PingSucceeded : True PingReplyDetails (RTT) : 0 ms TcpTestSucceeded : True
Wenn „TcpTestSucceeded = True“ angezeigt wird, ist der Port geöffnet und der Server akzeptiert Ihre Verbindung wahrscheinlich. Ist hingegen „PingSucceeded = false“, aber „TcpTestSucceeded = true“, liegt das üblicherweise daran, dass ICMP-Echo-Anfragen (Ping) blockiert wurden, der TCP-Port aber weiterhin erreichbar ist. Dies kann bei Servern hinter Firewalls vorkommen.
Hinweis: Bei manchen Systemen funktioniert dies beim ersten Mal nicht, dann aber nach einem kurzen Neustart oder etwas Wartezeit. Windows kann sich manchmal etwas seltsam verhalten.
Hinzufügen weiterer Informationen und verschiedener Anschlüsse
Wünschen Sie weitere Details? Sie können den Parameter „-InformationLevel Detailed“ hinzufügen, um zusätzliche Informationen anzuzeigen, zum Beispiel so:
TNC 192.168.32.101 -Port 3389 -InformationLevel Detailed
Und wenn Sie bekannte Protokolle anstelle von Portnummern testen, können Sie den Parameter „-CommonTCPPort“ verwenden. Beispiel: Prüfen, ob ein Webserver über HTTP erreichbar ist.
Test-NetConnection -ComputerName woshub.com -CommonTCPPort HTTP
Oder prüfen Sie, ob RDP (Port 3389) geöffnet ist:
Test-NetConnection ny-rds1 -CommonTCPPort RDP
Das ist nützlich, weil es das Testen gängiger Dienste vereinfacht, ohne dass man sich Portnummern merken muss. Denn natürlich muss Windows es unnötig kompliziert machen.
Kurzer Test: Ist der Port offen?
Wenn Sie lediglich ein einfaches Wahr/Falsch-Ergebnis wünschen, können Sie den Schalter -InformationLevel Quiet hinzufügen, der ausgehende Informationen unterdrückt:
TNC ny-msg1 -Port 25 -InformationLevel Quiet
Es liefert einfach „True“, wenn der Port offen ist, und „False“, wenn er geschlossen ist. Schön und unkompliziert.
Wie sieht es mit Skripten und mehreren Hosts aus?
Wenn Sie eine große Anzahl von Servern oder IP-Adressen überprüfen müssen, ist die PowerShell-Pipeline Ihr bester Freund. Angenommen, Sie haben eine Liste von Servern in der Datei servers.txt : Jede Zeile enthält entweder einen Hostnamen oder eine IP-Adresse.
Get-Content c:\ps\servers.txt | Where-Object { -NOT (Test-NetConnection $_ -Port 25 -InformationLevel Quiet)} | Format-Table -AutoSize
So erkennen Sie schnell, welche Server auf Port 25 nicht antworten. Bei manchen Konfigurationen kann es zu Fehlalarmen kommen, wenn Firewalls ICMP blockieren oder der Dienst nur lokale Verbindungen akzeptiert. Auch eine kurze Verzögerung des Skripts aufgrund von Ratenbegrenzungen kann erforderlich sein. Dennoch ist es eine praktische Methode für die Stapelprüfung.
Testen mehrerer Ports und Bereiche
Möchten Sie mehrere Ports überprüfen oder einen schnellen Portscan durchführen? Sie können eine Reihe von Ports durchlaufen:
foreach ($port in 1..1024) { if ((Test-NetConnection -ComputerName srvfs01 -Port $port).TcpTestSucceeded) { Write-Host "Port $port is open!" } }
Es handelt sich dabei nicht um einen vollwertigen Scanner, aber er reicht aus, um offene Ports schnell zu erkennen, ohne dass Tools von Drittanbietern installiert werden müssen.
Auflistung aller offenen Ports an Ihrem Rechner
Wenn Sie unter Windows selbst ein Problem beheben und sehen möchten, welche Prozesse auf Ihrem PC aktiv sind, hilft Ihnen Get-NetTCPConnection. Versuchen Sie Folgendes:
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort | Sort-Object -Property LocalPort | Format-Table
Hier werden alle Listening-Ports angezeigt, was äußerst nützlich ist, um Einstellungen zu überprüfen oder herauszufinden, ob ein Dienst bereits auf dem gewünschten Port läuft.
Und wenn Sie wissen möchten, welcher Prozess hinter einem bestimmten Port (z. B.443) steckt, verwenden Sie Folgendes:
Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess | Select-Object Id, ProcessName, Path
Dies hilft dabei, fehlerhafte Prozesse aufzuspüren oder sicherzustellen, dass der richtige Dienst zuhört.
Fazit: Test-NetConnection ist flexibel, aber nicht perfekt. Manchmal muss man es mit anderen Tools oder Prüfungen (wie netstat oder dem Task-Manager) kombinieren, um ein vollständiges Bild zu erhalten. Dennoch ist es deutlich einfacher als umständliche Vorgehensweisen bei einfachen Porttests, insbesondere auf Remote-Servern oder für Skriptprüfungen.
Zusammenfassung
- Verwenden Sie Test-NetConnection für schnelle TCP-Portprüfungen.
- Hebelwirkung -Informationsstufe: Ausführlich für zusätzliche Informationen
- Verwenden Sie -CommonTCPPort für bekannte Dienste
- Skript für Massenserverprüfungen – PowerShell macht dies überraschend einfach
- Überprüfen Sie die lokalen offenen Ports mit Get-NetTCPConnection.
Zusammenfassung
Die Überprüfung, ob ein Port geöffnet ist, ist nicht immer einfach – Firewalls, Netzwerkgeräte und Serverkonfigurationen können die Sache verkomplizieren. PowerShells ` Test-NetConnection` ist jedoch ein überraschend vielseitiges Tool, insbesondere wenn man seine Eigenheiten kennt. Ob für eine schnelle Überprüfung, ein Skript für einen Scan oder die Fehlerbehebung bei einem hartnäckigen Server – es lohnt sich, es zu beherrschen. Beachten Sie jedoch, dass Firewalls manchmal ICMP blockieren, ohne den Port zu blockieren, oder umgekehrt.Überprüfen Sie die Ergebnisse daher sorgfältig.
Hoffentlich erspart das jemandem so manches Grübeln beim nächsten Netzwerktest. Daumen drücken!