Home | History | Annotate | Download | only in sockets
      1 #! /usr/bin/env python

      2 
      3 # Remote python server.

      4 # Execute Python commands remotely and send output back.

      5 # WARNING: This version has a gaping security hole -- it accepts requests

      6 # from any host on the Internet!

      7 
      8 import sys
      9 from socket import *
     10 import StringIO
     11 import traceback
     12 
     13 PORT = 4127
     14 BUFSIZE = 1024
     15 
     16 def main():
     17     if len(sys.argv) > 1:
     18         port = int(eval(sys.argv[1]))
     19     else:
     20         port = PORT
     21     s = socket(AF_INET, SOCK_STREAM)
     22     s.bind(('', port))
     23     s.listen(1)
     24     while 1:
     25         conn, (remotehost, remoteport) = s.accept()
     26         print 'connected by', remotehost, remoteport
     27         request = ''
     28         while 1:
     29             data = conn.recv(BUFSIZE)
     30             if not data:
     31                 break
     32             request = request + data
     33         reply = execute(request)
     34         conn.send(reply)
     35         conn.close()
     36 
     37 def execute(request):
     38     stdout = sys.stdout
     39     stderr = sys.stderr
     40     sys.stdout = sys.stderr = fakefile = StringIO.StringIO()
     41     try:
     42         try:
     43             exec request in {}, {}
     44         except:
     45             print
     46             traceback.print_exc(100)
     47     finally:
     48         sys.stderr = stderr
     49         sys.stdout = stdout
     50     return fakefile.getvalue()
     51 
     52 main()
     53