def client_info(self): """ Get information about the client host machine to identify the session """ header_size = struct.calcsize("!L") header = self.connection.recv(header_size) msg_size = struct.unpack("!L", header)[0] msg = self.connection.recv(msg_size) data = security.decrypt_aes(msg, self.key) info = json.loads(data) for key, val in info.items(): if str(val).startswith("_b64"): info[key] = base64.b64decode(val[6:]).decode('ascii') return info
def recv_task(self): """ Receive and decrypt incoming task from server :returns dict task: :attr str uid: task ID assigned by server :attr str session: client ID assigned by server :attr str task: task assigned by server :attr str result: task result completed by client :attr datetime issued: time task was issued by server :attr datetime completed: time task was completed by client """ header_size = struct.calcsize('!L') header = self.connection.recv(header_size) if len(header) == 4: msg_size = struct.unpack('!L', header)[0] msg = self.connection.recv(8192) try: data = security.decrypt_aes(msg, self.key) return json.loads(data) except Exception as e: util.log("{0} error: {1}".format(self.recv_task.__name__, str(e))) return { "uid": uuid.uuid4().hex, "session": self.info.get('uid'), "task": "", "result": "Error: client returned invalid response", "issued": datetime.utcnow().__str__(), "completed": "" } else: # empty header; peer down, scan or recon. Drop. return 0