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