#! /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: | |
traceback.print_exc(100) | |
finally: | |
sys.stderr = stderr | |
sys.stdout = stdout | |
return fakefile.getvalue() | |
main() |