aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/tools
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/tools')
-rw-r--r--mitmproxy/tools/cmdline.py17
-rw-r--r--mitmproxy/tools/console/flowdetailview.py12
-rw-r--r--mitmproxy/tools/console/master.py20
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):