Last change
on this file was 2, checked in by Yuri Dario, 15 years ago |
Initial import for vendor code.
|
-
Property svn:eol-style
set to
native
|
File size:
1.2 KB
|
Line | |
---|
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()
|
---|
Note:
See
TracBrowser
for help on using the repository browser.