| #! /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()
|