Telnet is an ancient application protocol for bidirectional clear-text communication. It was designed for interactive text-oriented communications and there is no encrypted or secure version of Telnet.

TELNET is not a perfect match for curl. The protocol is not done to handle plain uploads or downloads so the usual curl paradigms have had to be stretched somewhat to make curl deal with it appropriately.

curl sends received data to stdout and it reads input to send on stdin. The transfer is complete when the connection is dropped or when the user presses control-c.

Historic TELNET

Once upon the time, systems provided telnet access for login. Then you could connect to a server and login to it, much like how you would do it with SSH today. That practice has fortunately now mostly been moved into the museum cabinets due to the insecure nature of the protocol.

The default port number for telnet is 23.

Debugging with TELNET

The fact that TELNET is basically just a simple clear-text TCP connection to the target host and port makes it somewhat useful to debug other protocols and services at times.

Example, connect to your local HTTP server on port 80 and send a (broken) request to it by manually entering GET / and press return twice:

curl telnet://localhost:80

Your web server most probably returns something like this back:

HTTP/1.1 400 Bad Request
Date: Tue, 07 Dec 2021 07:41:16 GMT
Server: softeare/7.8.9
Content-Length: 31
Connection: close
Content-Type: text/html



When curl sets up a TELNET connection to a server, you can ask it to pass on options. You do this with --telnet-option (or -t), and there are three options available to use:

  • TTYPE=<term> sets the "terminal type" for the session to be <term>.
  • XDISPLOC=<X display> sets the X display location
  • NEW_ENV=<var,val> sets the environment variable var to the value val in the remote session

Login to your local machine's telnet server and tell it you use a vt100 terminal:

curl --telnet-option TTYPE=vt100 telnet://localhost

You need to manually enter your name and password when prompted.