| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #!/usr/bin/env python3
- """
- 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 socket, AF_INET, SOCK_STREAM
- import io
- import traceback
- PORT = 4127
- BUFSIZE = 1024
- def main():
- if len(sys.argv) > 1:
- port = int(sys.argv[1])
- else:
- port = PORT
- s = socket(AF_INET, SOCK_STREAM)
- s.bind(('', port))
- s.listen(1)
- while True:
- conn, (remotehost, remoteport) = s.accept()
- print('connection from', remotehost, remoteport)
- request = b''
- while 1:
- data = conn.recv(BUFSIZE)
- if not data:
- break
- request += data
- reply = execute(request.decode())
- conn.send(reply.encode())
- conn.close()
- def execute(request):
- stdout = sys.stdout
- stderr = sys.stderr
- sys.stdout = sys.stderr = fakefile = io.StringIO()
- try:
- try:
- exec(request, {}, {})
- except:
- print()
- traceback.print_exc(100)
- finally:
- sys.stderr = stderr
- sys.stdout = stdout
- return fakefile.getvalue()
- try:
- main()
- except KeyboardInterrupt:
- pass
|