#!/usr/bin/pythonI am assuming that a web browser will connect to my server, the server will then 'echo' the request back to the browser allowing the browser to display the request. As you can see the input is received via stdin and output is returned via stdout.
import sys
request = ''
while True:
data = sys.stdin.readline().strip()
request = request + data + '<br>'
if data == "":
print 'HTTP/1.0 200 OK'
print ''
print '<html><body><p>'+request+'</p></body></html>'
sys.stdout.flush()
break;
If xinetd is not already installed then you will obviously have to install it first. Since I am doing this on Ubuntu the following works for me:
sudo apt-get install xinetdAfter installing xinetd you need to create a config file for the service. I called my service http_echo and my config file (located in /etc/xinetd.d) is named similarly; http_echo. My configuration file looks like this:
service http_echoMost of this file is quite self explanatory. Please refer to the xinetd documentation for more information.The port property should make the service run on the specified port without having to add an entry in the services file (/etc/services) . I have had to add an entry in my services file to make this setup work:
{
protocol = tcp
disable = no
port = 9991
flags = REUSE
socket_type = stream
wait = no
user = johan
server = /home/johan/code/http_echo/http_echo
log_on_failure += USERID
}
http_echo 9991/tcpThen simply restart the xinetd service:
sudo /etc/init.d/xinetd restartPointing a browser to the server on the specified port (9991), will yield the pleasing results below:
GET / HTTP/1.1And that is how simple it is to write a service in Python that runs under xinetd.
Host: localhost:9991
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.33 Safari/532.0
Cache-Control: max-age=0
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
No comments:
Post a Comment