]>
Commit | Line | Data |
---|---|---|
4710c53d | 1 | #! /usr/bin/env python\r |
2 | \r | |
3 | # Remote python server.\r | |
4 | # Execute Python commands remotely and send output back.\r | |
5 | # WARNING: This version has a gaping security hole -- it accepts requests\r | |
6 | # from any host on the Internet!\r | |
7 | \r | |
8 | import sys\r | |
9 | from socket import *\r | |
10 | import StringIO\r | |
11 | import traceback\r | |
12 | \r | |
13 | PORT = 4127\r | |
14 | BUFSIZE = 1024\r | |
15 | \r | |
16 | def main():\r | |
17 | if len(sys.argv) > 1:\r | |
18 | port = int(eval(sys.argv[1]))\r | |
19 | else:\r | |
20 | port = PORT\r | |
21 | s = socket(AF_INET, SOCK_STREAM)\r | |
22 | s.bind(('', port))\r | |
23 | s.listen(1)\r | |
24 | while 1:\r | |
25 | conn, (remotehost, remoteport) = s.accept()\r | |
26 | print 'connected by', remotehost, remoteport\r | |
27 | request = ''\r | |
28 | while 1:\r | |
29 | data = conn.recv(BUFSIZE)\r | |
30 | if not data:\r | |
31 | break\r | |
32 | request = request + data\r | |
33 | reply = execute(request)\r | |
34 | conn.send(reply)\r | |
35 | conn.close()\r | |
36 | \r | |
37 | def execute(request):\r | |
38 | stdout = sys.stdout\r | |
39 | stderr = sys.stderr\r | |
40 | sys.stdout = sys.stderr = fakefile = StringIO.StringIO()\r | |
41 | try:\r | |
42 | try:\r | |
43 | exec request in {}, {}\r | |
44 | except:\r | |
45 | print\r | |
46 | traceback.print_exc(100)\r | |
47 | finally:\r | |
48 | sys.stderr = stderr\r | |
49 | sys.stdout = stdout\r | |
50 | return fakefile.getvalue()\r | |
51 | \r | |
52 | main()\r |