def write(self, flow): request = assemble_request(flow.request) response = assemble_response(flow.response) self._file.writestr("raw/{session}_c.txt".format(session=self._count), request) self._file.writestr("raw/{session}_s.txt".format(session=self._count), response) metadata = self._create_metadata(flow) if metadata: self._file.writestr("raw/{session}_m.xml".format(session=self._count), metadata) self._count += 1
def handle(self): self.log("clientconnect", "info") root_layer = self._create_root_layer() try: root_layer = self.channel.ask("clientconnect", root_layer) root_layer() except exceptions.Kill: self.log("Connection killed", "info") except exceptions.ProtocolException as e: if isinstance(e, exceptions.ClientHandshakeException): self.log( "Client Handshake failed. " "The client may not trust the proxy's certificate for {}.". format(e.server), "warn") self.log(repr(e), "debug") elif isinstance(e, exceptions.InvalidServerCertificate): self.log(str(e), "warn") self.log( "Invalid certificate, closing connection. Pass --insecure to disable validation.", "warn") else: self.log(str(e), "warn") self.log(traceback.format_exc(), "debug") # If an error propagates to the topmost level, # we send an HTTP error response, which is both # understandable by HTTP clients and humans. try: error_response = models.make_error_response(502, repr(e)) self.client_conn.send(http1.assemble_response(error_response)) except netlib.exceptions.TcpException: pass except Exception: self.log(traceback.format_exc(), "error") print(traceback.format_exc(), file=sys.stderr) print("mitmproxy has crashed!", file=sys.stderr) print( "Please lodge a bug report at: https://github.com/mitmproxy/mitmproxy", file=sys.stderr) self.log("clientdisconnect", "info") self.channel.tell("clientdisconnect", root_layer) self.client_conn.finish()
def handle(self): self.log("clientconnect", "info") root_layer = self._create_root_layer() root_layer = self.channel.ask("clientconnect", root_layer) if root_layer == Kill: def root_layer(): raise Kill() try: root_layer() except Kill: self.log("Connection killed", "info") except ProtocolException as e: if isinstance(e, ClientHandshakeException): self.log( "Client Handshake failed. " "The client may not trust the proxy's certificate for {}.".format(e.server), "error" ) self.log(repr(e), "debug") else: self.log(repr(e), "error") self.log(traceback.format_exc(), "debug") if not self.config.invisible: # If an error propagates to the topmost level, # we send an HTTP error response, which is both # understandable by HTTP clients and humans. try: self.log("VAR: sending error response 502", "info") error_response = make_error_response(502, repr(e)) self.client_conn.send(assemble_response(error_response)) except TcpException: pass except Exception: self.log(traceback.format_exc(), "error") print(traceback.format_exc(), file=sys.stderr) print("mitmproxy has crashed!", file=sys.stderr) print("Please lodge a bug report at: https://github.com/mitmproxy/mitmproxy", file=sys.stderr) self.log("clientdisconnect", "info") self.channel.tell("clientdisconnect", root_layer) self.client_conn.finish()
def handle(self): self.log("clientconnect", "info") root_layer = self._create_root_layer() try: root_layer = self.channel.ask("clientconnect", root_layer) root_layer() except exceptions.Kill: self.log("Connection killed", "info") except exceptions.ProtocolException as e: if isinstance(e, exceptions.ClientHandshakeException): self.log( "Client Handshake failed. " "The client may not trust the proxy's certificate for {}.".format(e.server), "warn" ) self.log(repr(e), "debug") elif isinstance(e, exceptions.InvalidServerCertificate): self.log(str(e), "warn") self.log("Invalid certificate, closing connection. Pass --insecure to disable validation.", "warn") else: self.log(repr(e), "warn") self.log(traceback.format_exc(), "debug") # If an error propagates to the topmost level, # we send an HTTP error response, which is both # understandable by HTTP clients and humans. try: error_response = models.make_error_response(502, repr(e)) self.client_conn.send(http1.assemble_response(error_response)) except netlib.exceptions.TcpException: pass except Exception: self.log(traceback.format_exc(), "error") print(traceback.format_exc(), file=sys.stderr) print("mitmproxy has crashed!", file=sys.stderr) print("Please lodge a bug report at: https://github.com/mitmproxy/mitmproxy", file=sys.stderr) self.log("clientdisconnect", "info") self.channel.tell("clientdisconnect", root_layer) self.client_conn.finish()