PageRenderTime 193ms CodeModel.GetById 91ms app.highlight 4ms RepoModel.GetById 96ms app.codeStats 0ms

/Demo/sockets/rpythond.py

http://unladen-swallow.googlecode.com/
Python | 52 lines | 43 code | 4 blank | 5 comment | 1 complexity | 4ae1762958ecbbcf82c5f72ef9721674 MD5 | raw file
 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()