17db96d56Sopenharmony_ci#!/usr/bin/env python3 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci""" 47db96d56Sopenharmony_ciRemote python server. 57db96d56Sopenharmony_ciExecute Python commands remotely and send output back. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ciWARNING: This version has a gaping security hole -- it accepts requests 87db96d56Sopenharmony_cifrom any host on the internet! 97db96d56Sopenharmony_ci""" 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ciimport sys 127db96d56Sopenharmony_cifrom socket import socket, AF_INET, SOCK_STREAM 137db96d56Sopenharmony_ciimport io 147db96d56Sopenharmony_ciimport traceback 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciPORT = 4127 177db96d56Sopenharmony_ciBUFSIZE = 1024 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_cidef main(): 207db96d56Sopenharmony_ci if len(sys.argv) > 1: 217db96d56Sopenharmony_ci port = int(sys.argv[1]) 227db96d56Sopenharmony_ci else: 237db96d56Sopenharmony_ci port = PORT 247db96d56Sopenharmony_ci s = socket(AF_INET, SOCK_STREAM) 257db96d56Sopenharmony_ci s.bind(('', port)) 267db96d56Sopenharmony_ci s.listen(1) 277db96d56Sopenharmony_ci while True: 287db96d56Sopenharmony_ci conn, (remotehost, remoteport) = s.accept() 297db96d56Sopenharmony_ci with conn: 307db96d56Sopenharmony_ci print('connection from', remotehost, remoteport) 317db96d56Sopenharmony_ci request = b'' 327db96d56Sopenharmony_ci while True: 337db96d56Sopenharmony_ci data = conn.recv(BUFSIZE) 347db96d56Sopenharmony_ci if not data: 357db96d56Sopenharmony_ci break 367db96d56Sopenharmony_ci request += data 377db96d56Sopenharmony_ci reply = execute(request.decode()) 387db96d56Sopenharmony_ci conn.send(reply.encode()) 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_cidef execute(request): 417db96d56Sopenharmony_ci stdout = sys.stdout 427db96d56Sopenharmony_ci stderr = sys.stderr 437db96d56Sopenharmony_ci sys.stdout = sys.stderr = fakefile = io.StringIO() 447db96d56Sopenharmony_ci try: 457db96d56Sopenharmony_ci try: 467db96d56Sopenharmony_ci exec(request, {}, {}) 477db96d56Sopenharmony_ci except: 487db96d56Sopenharmony_ci print() 497db96d56Sopenharmony_ci traceback.print_exc(100) 507db96d56Sopenharmony_ci finally: 517db96d56Sopenharmony_ci sys.stderr = stderr 527db96d56Sopenharmony_ci sys.stdout = stdout 537db96d56Sopenharmony_ci return fakefile.getvalue() 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_citry: 567db96d56Sopenharmony_ci main() 577db96d56Sopenharmony_ciexcept KeyboardInterrupt: 587db96d56Sopenharmony_ci pass 59