Telnet mit der PowerShell

Im letzten Blogeintrag haben wir uns angesehen, wie man den ping Befehl aus der CMD Shell mit der PowerShell ablösen kann.

In diesem Blogeintrag schauen wir uns an, wie man den telnet Befehl aus der CMD Shell mit der PowerShell ablösen kann.

Das Telnet Protokoll (Telnet steht für Teletype Network) ist ein sehr altes Netzwerkprotokoll und dient dem Remote Zugriff auf Systeme. Es wurde 1969 zusammen mit dem ARPANET (dem Vorgänger des heutigen Internets) entwickelt.

Da das Protokoll unverschlüsselte Verbindungen aufbaut, über die auch Benutzername und Kennwort für das Remote System übertragen werden, sollte man dieses Protokoll heute nicht mehr einsetzen und idealerweise komplett deaktivieren. (Erstaunlicherweise ist bis heute bei vielen Netzwerkkomponenten und Managementkarten das Protokoll in der Standardkonfiguration aktiv)

Unabhängig vom Telnet-Dienst wird der Telnet-Client gerne zum Überprüfen von Netzwerkports genutzt (lauscht auf dem Netzwerkport ein Dienst, der über TCP Daten austauschen möchte). Der Client selber stellt auch kein Sicherheitsproblem da, solange ihn man nicht für Sitzungen zu einem telnet-Server nutzt.

Folgendermaßen kann ich zum Beispiel überprüfen, ob für die Adresse www.powershell-user.de auf Port 80  (HTTP) ein Dienst lauscht.

telnet www.powershell-user.de 80

Nach Ausführen des Befehls sehe ich einen blinkenden Strich, d.h. die Gegenseite hat die Verbindung angenommen. Der Port 80 ist erreichbar. Es läuft dort ein Dienst und keine Firewall blockiert den Datenverkehr.

Wenn ich möchte, kann ich jetzt mit dem passenden Befehl eine http Kommunikation simulieren und eine Antwort provozieren.

GET /index.html

 

In der PowerShell gibt es keinen nativen Befehl, um den Telnet-Client nachzubilden.

Ich kann aber mit der PowerShell ein individuelles Objekt erstellen. Individuelle Objekte können .NET Framework oder COM Objekte sein. Und die .NET Framework Bibliothek beinhaltet die Klasse System.Net.Sockets.TCPClient.

Folgendermaßen erzeuge ich das neue Objekt:

New-Object -TypeName System.Net.Sockets.TCPClient -ArgumentList "www.powershell-user.de",80

Client              : System.Net.Sockets.Socket

Available           : 0

Connected           : True

ExclusiveAddressUse : False

ReceiveBufferSize   : 65536

SendBufferSize      : 65536

ReceiveTimeout      : 0

SendTimeout         : 0

LingerState         : System.Net.Sockets.LingerOption

NoDelay             : False

In der Antwort hat das Attribut “Connected” den Wert “True”, d.h. der Port 80 ist erreichbar. Es läuft dort ein Dienst und keine Firewall blockiert den Datenverkehr.

In einem Script könnte man das folgendermaßen einbauen.

Wir nehmen die try/catch Funktion, um auch die Nichterreichbarkeit sauber abzufangen, die ansonsten einen Fehler auswerfen würde.

$uri = "www.powershell-user.de"

$port = 80

try {
            New-Object -TypeName System.Net.Sockets.TCPClient -ArgumentList $uri,$port |Out-Null
            Write-Output "URI: $uri ist auf Port $port erreichbar"
            }
catch
            {
            Write-Output "URI: $uri ist auf Port $port nicht erreichbar"
            }

 

Jetzt wird das einmal mit Port 80 (erreichbar) und einmal mit Port 81 (nicht erreichbar) getestet.

 

 

Im nächsten Blogeintrag beschäftigen wir uns damit, wie man den nslookup Befehl mit der PowerShell umsetzen kann.

 

Was denken Sie?

Pflichtfelder sind mit einem * markiert.