Replacing Telnet.exe (now removed from Vista)

Probably the most useful network tool on any operating system is Telnet.  Not for connecting to Telnet servers, of course, as the Telnet protocol is about as insecure as they come.  Instead, it’s useful for debugging connection problems with arbitrary ports and arbitrary protocols.


Debugging an HTTP problem?  You can Telnet into port 80 to help you resolve it.
Debugging a mail retrieval issue?  You can Telnet into port 110 to help you resolve it.
Debugging a mail sending issue?  You can Telnet into port 25 to help you resolve it.
<etc>


Unfortunately, this workhorse was removed from Vista’s default installation.  Here’s a simple PowerShell replacement script.  It’s great for debugging, but useless (of course) for terminal emulation:


 




## Connect-Computer.ps1
## Interact with a service on a remote TCP port
param(
    [string] $remoteHost = “localhost”,
    [int] $port = 80
     )

## Open the socket, and connect to the computer on the specified port
write-host “Connecting to $remoteHost on port $port”
$socket = new-object System.Net.Sockets.TcpClient($remoteHost, $port)
if($socket -eq $null) { return; }

write-host “Connected.  Press ^D followed by [ENTER] to exit.`n”

$stream = $socket.GetStream()
$writer = new-object System.IO.StreamWriter($stream)

$buffer = new-object System.Byte[] 1024
$encoding = new-object System.Text.AsciiEncoding

while($true)
{
   ## Allow data to buffer for a bit
   start-sleep -m 500

   ## Read all the data available from the stream, writing it to the
   ## screen when done.
   while($stream.DataAvailable) 
   { 
      $read = $stream.Read($buffer, 01024)   
      write-host -n ($encoding.GetString($buffer, 0, $read)) 
   }

   ## Read the user’s command, quitting if they hit ^D
   $command = read-host
   if($command -eq ([char4)) { break; }
 
   ## Write their command to the remote host     
   $writer.WriteLine($command)
   $writer.Flush()
}

## Close the streams
$writer.Close()
$stream.Close()

6 Responses to “Replacing Telnet.exe (now removed from Vista)”

  1. Steve Maine writes:

    Vista has both a Telnet client and a Telnet server built-in. They’re just off by default.

    You can find them in the "Turn Windows Features On or Off" dialog inside the Programs control panel.

  2. Stéphane de Luca writes:

    Hi,

    I wrote for myself a Web service to telnet very simply any server. As t proved to be very useful, I propose it to everyone on the web: http://browseas.com/telnet.php

  3. Lee writes:

    Nice job! It hung when I tried to use any interactive protocols, though :)

  4. L. Dopa writes:

    Well, AbsoluteTelnet is indeed a good one, but it’s not commandline-based and it’s not free.
    You might wanna consider PuTTY instead, or just enable it again in Vista …

  5. PT writes:

    start – run – "start /w ocsetup TelnetClient"
    voila! telnet installed, problem solved.

  6. Cool PowerShell Script Replicates Telnet « Brian Reiter's Thoughtful Code writes:

    [...] 8, 2011 by Brian Reiter Leave a Comment Lee Holmes has a cool script to reproduce telnet-like functionality via the TcpClient object in [...]

Leave a Reply