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 8import sys 9from socket import * 10import StringIO 11import traceback 12 13PORT = 4127 14BUFSIZE = 1024 15 16def 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 37def 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 52main() 53