def netcat(self, run_state, port, message, reply): """ Write `message` (string) to port of bundle with uuid and read the response. Returns a stream with the response contents (bytes). """ # TODO: handle this in a thread since this could take a while container_ip = docker_utils.get_container_ip( self.worker_docker_network.name, run_state.container ) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((container_ip, port)) s.sendall(message.encode()) total_data = [] while True: data = s.recv(LocalRunManager.NETCAT_BUFFER_SIZE) if not data: break total_data.append(data) s.close() reply(None, {}, b''.join(total_data))
def netcat_fn(): try: run_state = self.runs[uuid] container_ip = docker_utils.get_container_ip( self.worker_docker_network.name, run_state.container) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((container_ip, port)) s.sendall(message.encode()) total_data = [] while True: data = s.recv(Worker.NETCAT_BUFFER_SIZE) if not data: break total_data.append(data) s.close() reply(None, {}, b''.join(total_data)) except BundleServiceException: traceback.print_exc() except Exception as e: traceback.print_exc() err = (http.client.INTERNAL_SERVER_ERROR, str(e)) reply(err)