How to send text with telnet in Terminal?

Solution 1:

Here's a simple Python server:

#!/usr/bin/env python

import socket


TCP_IP = '127.0.0.1'
TCP_PORT = 5005
BUFFER_SIZE = 10  # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print 'Connection address:', addr
while 1:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print "received data:", data
    conn.send(data)  # echo
conn.close()

Source

Save it as server.py, and run it python server.py.

Then try to connect using the terminal

telnet 127.0.0.1 5005

Then just type anything and press return

The server print the data in the console and send it back to you.

That way, you'll know what you have to do to send data via telnet.

Solution 2:

When you typing the text in telnet, by default it operates in Linemode which send the packets per line, so you just need to press Enter to send the command to the remote host (since terminal character processing on the client side). This is in order to reduce network traffic and it is very useful for long delay networks while typing the command line. If you need to send packets per character typed, then you need to switch to binary mode.


To test Telnet in Linemode, you can run the dummy server to be listening on the local port, e.g. by using netcat (install if needed):

nc -vl localhost 1234

then in another terminal connect to your server by:

telnet localhost 1234

and start entering some text to check when the data is received.

Hit Control-] (^]) and type quit to finish.


It is also possible to send data using Bash shell by the following command:

cat > /dev/tcp/127.0.0.1/1234

then start entering text. When finished, hit Control-D.

Solution 3:

The answer depends on what the remote end supports:

  1. Newer Line Mode where character processing is done locally while the remote only sends and receives control packets during typing and receives whole line when entering some end-of-line char (e.g hitting ENTER).
  2. Character-at-a-time where each char is transmitted as it is typed.
  3. Old line-at-a-time - fully completed lines are transmitted.

What the remote end does with the received input, depends on the remote end. Most server processes (HTTP, SMTP, POP, IMAP) tend to wait for end-of-line (EOL, newline) char before processing input. Some others may wait for end-of-file (EOF, ^D) before starting to process the input.