| #! /usr/bin/env python | 
 |  | 
 | # Remote python server. | 
 | # Execute Python commands remotely and send output back. | 
 | # WARNING: This version has a gaping security hole -- it accepts requests | 
 | # from any host on the Internet! | 
 |  | 
 | import sys | 
 | from socket import * | 
 | import StringIO | 
 | import traceback | 
 |  | 
 | PORT = 4127 | 
 | BUFSIZE = 1024 | 
 |  | 
 | def main(): | 
 | 	if len(sys.argv) > 1: | 
 | 		port = int(eval(sys.argv[1])) | 
 | 	else: | 
 | 		port = PORT | 
 | 	s = socket(AF_INET, SOCK_STREAM) | 
 | 	s.bind('', port) | 
 | 	s.listen(1) | 
 | 	while 1: | 
 | 		conn, (remotehost, remoteport) = s.accept() | 
 | 		print 'connected by', remotehost, remoteport | 
 | 		request = '' | 
 | 		while 1: | 
 | 			data = conn.recv(BUFSIZE) | 
 | 			if not data: | 
 | 				break | 
 | 			request = request + data | 
 | 		reply = execute(request) | 
 | 		conn.send(reply) | 
 | 		conn.close() | 
 |  | 
 | def execute(request): | 
 | 	stdout = sys.stdout | 
 | 	stderr = sys.stderr | 
 | 	sys.stdout = sys.stderr = fakefile = StringIO.StringIO() | 
 | 	try: | 
 | 		try: | 
 | 			exec request in {}, {} | 
 | 		except: | 
 | 			print | 
 | 			traceback.print_exc(100) | 
 | 	finally: | 
 | 		sys.stderr = stderr | 
 | 		sys.stdout = stdout | 
 | 	return fakefile.getvalue() | 
 |  | 
 | main() |