The Telnet client is a simple command-line program that is used to connect to socket servers and exchange messages. The following is an example of how to use Telnet to connect to https://www.google.com and fetch the homepage:
$ telnet www.google.com 80
This command will connect to www.google.com
on port 80
.
$ telnet www.google.com 80 Trying 74.125.236.69... Connected to www.google.com. Escape character is '^]'
Now that it is connected, the Telnet command can take user input and send it to the respective server, and whatever the server replies will be displayed in the terminal. For example, send the HTTP GET
command in the following format and hit Enter twice:
GET / HTTP/1.1
Sending this will generate a response from the server. Now we will make a similar Telnet program. The program is simple: we will implement a program that takes user input and fetches results from the remote server in parallel using the threads. One thread will keep receiving messages from the server and another will keep taking in user input. But there is another way to do this apart from threads: the select()
function. This function allows you to monitor multiple sockets or streams for readability and will generate an event if any of the sockets are ready.
The code for it is as follows:
import socket, select, string, sys #main function if __name__ == "__main__": if(len(sys.argv) < 3) : sys.exit() host = sys.argv[1] port = int(sys.argv[2]) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(2) # connect to remote host try : s.connect((host, port)) except : print 'Unable to connect' sys.exit() print 'Connected to remote host' while 1: socket_list = [sys.stdin, s] # Get the list sockets which are readable read_sockets, write_sockets, error_sockets = select.select(socket_list , [], []) for sock in read_sockets: #incoming message from remote server if sock == s: data = sock.recv(4096) if not data : print 'Connection closed' sys.exit() else : #print data sys.stdout.write(data) #user entered a message else : msg = sys.stdin.readline() s.send(msg)
The execution of this program is shown here. It connects to the remote host google.com
.
$ python telnet.py google.com 80 Connected to remote host
Once connected, it shows the appropriate connected message. Once the message is displayed, type in some message to send to the remote server. Type the same GET message and send it by hitting Enter twice. A response will be generated.