diff options
Diffstat (limited to 'mitmproxy/tools')
-rw-r--r-- | mitmproxy/tools/cmdline.py | 17 | ||||
-rw-r--r-- | mitmproxy/tools/console/flowdetailview.py | 12 | ||||
-rw-r--r-- | mitmproxy/tools/console/master.py | 20 |
3 files changed, 38 insertions, 11 deletions
diff --git a/mitmproxy/tools/cmdline.py b/mitmproxy/tools/cmdline.py index 1ad521b5..d5a43f28 100644 --- a/mitmproxy/tools/cmdline.py +++ b/mitmproxy/tools/cmdline.py @@ -256,7 +256,7 @@ def get_common_options(args): no_upstream_cert = args.no_upstream_cert, spoof_source_address = args.spoof_source_address, rawtcp = args.rawtcp, - websockets = args.websockets, + websocket = args.websocket, upstream_server = upstream_server, upstream_auth = args.upstream_auth, ssl_version_client = args.ssl_version_client, @@ -459,6 +459,12 @@ def proxy_options(parser): If your OpenSSL version supports ALPN, HTTP/2 is enabled by default. """ ) + group.add_argument( + "--no-websocket", + action="store_false", dest="websocket", + help="Explicitly disable WebSocket support." + ) + parser.add_argument( "--upstream-auth", action="store", dest="upstream_auth", default=None, @@ -468,6 +474,7 @@ def proxy_options(parser): requests. Format: username:password """ ) + rawtcp = group.add_mutually_exclusive_group() rawtcp.add_argument("--raw-tcp", action="store_true", dest="rawtcp") rawtcp.add_argument("--no-raw-tcp", action="store_false", dest="rawtcp", @@ -475,13 +482,7 @@ def proxy_options(parser): "Disabled by default. " "Default value will change in a future version." ) - websockets = group.add_mutually_exclusive_group() - websockets.add_argument("--websockets", action="store_true", dest="websockets") - websockets.add_argument("--no-websockets", action="store_false", dest="websockets", - help="Explicitly enable/disable experimental WebSocket support. " - "Disabled by default as messages are only printed to the event log and not retained. " - "Default value will change in a future version." - ) + group.add_argument( "--spoof-source-address", action="store_true", dest="spoof_source_address", diff --git a/mitmproxy/tools/console/flowdetailview.py b/mitmproxy/tools/console/flowdetailview.py index 6e6ca1eb..7677efe4 100644 --- a/mitmproxy/tools/console/flowdetailview.py +++ b/mitmproxy/tools/console/flowdetailview.py @@ -14,10 +14,16 @@ def maybe_timestamp(base, attr): def flowdetails(state, flow): text = [] - cc = flow.client_conn sc = flow.server_conn + cc = flow.client_conn req = flow.request resp = flow.response + metadata = flow.metadata + + if metadata is not None and len(metadata.items()) > 0: + parts = [[str(k), repr(v)] for k, v in metadata.items()] + text.append(urwid.Text([("head", "Metadata:")])) + text.extend(common.format_keyvals(parts, key="key", val="text", indent=4)) if sc is not None: text.append(urwid.Text([("head", "Server Connection:")])) @@ -109,6 +115,7 @@ def flowdetails(state, flow): maybe_timestamp(cc, "timestamp_ssl_setup") ] ) + if sc is not None and sc.timestamp_start: parts.append( [ @@ -129,6 +136,7 @@ def flowdetails(state, flow): maybe_timestamp(sc, "timestamp_ssl_setup") ] ) + if req is not None and req.timestamp_start: parts.append( [ @@ -142,6 +150,7 @@ def flowdetails(state, flow): maybe_timestamp(req, "timestamp_end") ] ) + if resp is not None and resp.timestamp_start: parts.append( [ @@ -162,4 +171,5 @@ def flowdetails(state, flow): text.append(urwid.Text([("head", "Timing:")])) text.extend(common.format_keyvals(parts, key="key", val="text", indent=4)) + return searchable.Searchable(state, text) diff --git a/mitmproxy/tools/console/master.py b/mitmproxy/tools/console/master.py index f8850404..184038ef 100644 --- a/mitmproxy/tools/console/master.py +++ b/mitmproxy/tools/console/master.py @@ -447,16 +447,32 @@ class ConsoleMaster(master.Master): # Handlers @controller.handler + def websocket_message(self, f): + super().websocket_message(f) + message = f.messages[-1] + signals.add_log(message.info, "info") + signals.add_log(strutils.bytes_to_escaped_str(message.content), "debug") + + @controller.handler + def websocket_end(self, f): + super().websocket_end(f) + signals.add_log("WebSocket connection closed by {}: {} {}, {}".format( + f.close_sender, + f.close_code, + f.close_message, + f.close_reason), "info") + + @controller.handler def tcp_message(self, f): super().tcp_message(f) message = f.messages[-1] direction = "->" if message.from_client else "<-" - self.add_log("{client} {direction} tcp {direction} {server}".format( + signals.add_log("{client} {direction} tcp {direction} {server}".format( client=repr(f.client_conn.address), server=repr(f.server_conn.address), direction=direction, ), "info") - self.add_log(strutils.bytes_to_escaped_str(message.content), "debug") + signals.add_log(strutils.bytes_to_escaped_str(message.content), "debug") @controller.handler def log(self, evt): |