Advertisement
asteroidsteam

RC Script

Feb 2nd, 2020
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.76 KB | None | 0 0
  1. import socket
  2. import threading
  3. import subprocess
  4.  
  5. HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
  6. PORT = 1234        # Port to listen on (non-privileged ports are > 1023)
  7.  
  8. def exec(cmd, sSock):
  9.     process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
  10.     for line in iter(process.stdout.readline, b''):
  11.         sSock.write('   '+line.decode())
  12.        
  13. # START COMMAND DEFINITION #
  14.  
  15. def help(args, sSock):
  16.     sSock.print("""Command : Description : Arguments - [] = optional, <> = required
  17.    help : Display's this menu         : [command]
  18.    bash : Remotely run a bash command : <command> [opt args]
  19.    say  : Make computer say something : <message>""")
  20.  
  21. def bash(args, sSock):
  22.     if (len(args) < 1):
  23.         sSock.print("Usage: bash <command> [opt args]")
  24.         return
  25.     sSock.print("Executing command: {}...\n".format(' '.join(args)))
  26.     exec(args, sSock)
  27.     sSock.print("\nExecution Completed.")
  28.  
  29. def say(args, sSock):
  30.     if (len(args) < 1):
  31.         sSock.print("Usage: say <message>")
  32.         return
  33.     message = ' '.join(args)
  34.     sSock.print("Saying: {}".format(message))
  35.     exec(['say', message], sSock)
  36.     sSock.print("Execution Completed.")
  37.  
  38. commands = {
  39.     'help': help,
  40.     'bash': bash,
  41.     'say': say
  42. }
  43.  
  44. # END COMMAND DEFINITION #
  45.  
  46. def recvall(sock):
  47.     BUFF_SIZE = 4096 # 4 KiB
  48.     data = b''
  49.     while True:
  50.         part = sock.recv(BUFF_SIZE)
  51.         data += part
  52.         if len(part) < BUFF_SIZE:
  53.             # either 0 or end of data
  54.             break
  55.     return data
  56.  
  57. class sFunc():
  58.     def __init__(
  59.         self,
  60.         conn
  61.     ):
  62.         self.conn = conn
  63.     def sbytes(self,str):
  64.         return str.encode()
  65.     def print(self,str):
  66.         str += '\n'
  67.         self.conn.sendall(self.sbytes(str))
  68.     def write(self,str):
  69.         self.conn.sendall(self.sbytes(str))
  70.     def input(self,prompt):
  71.         self.write(prompt)
  72.         ret = recvall(self.conn)
  73.         return ret.decode()
  74.  
  75. def processCommand(cmd, args, sSock):
  76.     if cmd in commands:
  77.         commands[cmd](args, sSock)
  78.     else:
  79.         sSock.print("Unknown Command: {}, type help for help.".format(cmd))
  80.  
  81. def clientThread(conn, addr):
  82.     sSock = sFunc(conn)
  83.     while True:
  84.         command = sSock.input("Enter a command: ").rstrip()
  85.         args = command.split(' ')[1:]
  86.         command = command.split(' ')[0]
  87.         processCommand(command,args,sSock)
  88.  
  89. with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
  90.     s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  91.     s.bind((HOST, PORT))
  92.     s.listen()
  93.     while True:
  94.         conn, addr = s.accept()
  95.         threading.Thread(
  96.             target=clientThread,
  97.             args=[conn,addr],
  98.             daemon=True
  99.         ).start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement