home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / pyos2bin.zip / Demo / sockets / rpythond.py < prev    next >
Text File  |  1996-11-27  |  1KB  |  53 lines

  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.