Der kleine Telnet-Client in Powershell


Bei neueren Windowsversionen wird mittlerweile der Telnet-Client eingespart, man kann ihn zwar selbst unter Windows 10 nachinstallieren aber wer macht das schon, wenn es ein besseres Werkzeug gibt! Wer ihn braucht, kann diese Methode verwenden: https://newyear2006.wordpress.com/2011/10/01/telnet-auf-die-schnelle-aktiveren-bzw-deaktivieren/.

Telnet wird oft dazu verwendet, zu prüfen, ob eine Verbindung zu einem bestimmten Port möglich ist. Seit Windows 8 gibt es Test-NetConnection, welches weitaus mächtiger als Telnet ist, da es Ping und Tracert auch noch gleich eingebaut hat.

Ein guter Artikel der die Möglichkeiten von Test-NetConnection beschreibt ist dieser ab Abschnitt Testing Connectivity: http://blogs.technet.com/b/networking/archive/2013/07/31/new-networking-diagnostics-with-powershell-in-windows-server-r2.aspx.

Der wichtigste Punkte aus dem Artikel ist aber dieser:

3. When using TNC to test TCP connectivity, if the connection succeeds, you can access the TCP socket using the TCPClientSocket property. This provides the connected .NET socket for further scripting.

OK, dann gleich mal versucht dies umzusetzen. Zunächst testet man die Verbindung, dann reserviert man die für eine Antwort nötigen Bytes eines Puffers, dann ruft man die verfügbaren Bytes ab und gibt diese aus:

$c=tnc www.myserver.de -Port 21
[byte[]]$buffer= @(0) * $c.TcpClientSocket.Available
$c.TcpClientSocket.Receive($buffer, $c.TcpClientSocket.Available, [System.Net.Sockets.SocketFlags]::None)
[System.Text.Encoding]::UTF8.GetString($buffer)

Als Ergebnis erhält man:

220 Microsoft FTP Service

Genauso wie gegen einen FTP-Port kann man den Test auch gegen einen SMTP-Server laufen lassen, man muss nur Port 25 oder 587 angeben.

Man kann das Thema nun aber auch ausbauen und kann die gesamte Kommunikation skripten:

# Verbindung zu Web.de aufbauen
$c=tnc smtp.web.de -Port 587

# Antwort vom SMTP-Server holen und ausgeben
[byte[]]$buffer= @(0) * $c.TcpClientSocket.Available
$c.TcpClientSocket.Receive($buffer)
[System.Text.Encoding]::ASCII.GetString($buffer)

# Begrüßung durchführen
$buffer=[System.Text.Encoding]::ASCII.GetBytes("EHLO $Env:Computername`r`n")
$c.TcpClientSocket.Send($buffer)
Sleep -Seconds 1

# Antwort vom SMTP-Server holen
[byte[]]$buffer= @(0) * $c.TcpClientSocket.Available
$c.TcpClientSocket.Receive($buffer)
[System.Text.Encoding]::ASCII.GetString($buffer)

# STARTTLS-Anfrage starten
$buffer=[System.Text.Encoding]::ASCII.GetBytes("STARTTLS`r`n")
$c.TcpClientSocket.Send($buffer)
Sleep -Seconds 1

# Bei dieser Antwort sollte 220 rauskommen,
# sonst gibt es ein Problem
[byte[]]$buffer= @(0) * $c.TcpClientSocket.Available
$c.TcpClientSocket.Receive($buffer)
[System.Text.Encoding]::ASCII.GetString($buffer)

Jetzt wäre der TLS Handshake dran, den sparen wir uns für ein anderes Mal auf…

Hier noch das STARTTLS-RFC-Dokument: https://tools.ietf.org/html/rfc3207

Wer einen interaktiven Powershell-Telnet-Client benötigt, der wird hier fündig: http://uglygizmo.blogspot.de/2013/10/a-telnet-client-written-in-powershell.html.

2 Antworten to “Der kleine Telnet-Client in Powershell”

  1. Probleme mit Transportverschlüsselung, Zertifikaten oder Passwörtern bei SMTP-Servern mittels Powershell überprüfen | Das nie endende Chaos! Says:

    […] Aber doch der Versuch etwas Ordnung reinzubringen. « Der kleine Telnet-Client in Powershell […]

  2. Telekom Speedport W 724V und das Problem mit dem E-Mailversand über SMTP, der blockt einfach alle Benutzerdomains | Das nie endende Chaos! Says:

    […] Zum Testen sind diese Artikel hilfreich: https://newyear2006.wordpress.com/2011/10/01/telnet-auf-die-schnelle-aktiveren-bzw-deaktivieren/ https://newyear2006.wordpress.com/2015/08/22/der-kleine-telnet-client-in-powershell/ […]

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: