def do_cmds(self, msg): if (msg.startswith("recv")): return self.recv_file(msg) elif (msg.startswith("send")): local_file = msg.split('#')[1] return self.send_file(local_file, local_file, True) elif (msg.startswith("cmd")): cmd,shell = self.parse_cmd_args(msg) ctl = Command() if (shell == 'shell'): ret_info = ctl.run_sys_cmd(cmd) return self.send_msg(self.sock, Message.MSG_CTRL, ret_info) elif (shell == 'update'): args = sys.argv[:] args.insert(0, sys.executable) os.chdir(os._startup_cwd) msg = 'success' self.send_msg(self.sock, Message.MSG_CTRL, msg) self.sock.close() Log.logmsg("Update self:%s,%s" % (args, os._startup_cwd)) os.execv(sys.executable, args) #no return else: Log.logerr("Invalid cmd!%s" % msg) return False
def do_work(self): while (True): header = self.readn(self.sock, 8) if not header: return True version, machine, type, length = Message.parse_msg_header(header) if (version != Message.version or machine != Message.TYPE_HYDRA): Log.logerr("Server check message header failed!") return False msg = self.readn(self.sock, length) if (type == Message.MSG_CTRL): Log.logmsg("Server try execute cmd :%s" % msg) if self.do_cmds(msg): Log.logmsg("Server execute cmd :%s, success" % msg) return True else: Log.logmsg("Server execute cmd :%s, success" % msg) else: Log.logerr("unknown cmd:%d %s" % (type, msg)) return False