allow server replay functionality to run on a different port

By providing the "server_replay_ignore_port" configuration value we're
able to run mitmproxy in server replay mode on a different port than
the web server in the flows was originally running. This is also useful
in case multiple ports are present in a flow (I suspect).
This commit is contained in:
Jurriaan Bremer 2018-04-29 16:53:11 +02:00 committed by Maximilian Hils
parent be2865cd79
commit a5412ab136

View File

@ -68,6 +68,13 @@ class ServerPlayback:
to replay. to replay.
""" """
) )
loader.add_option(
"server_replay_ignore_port", bool, False,
"""
Ignore request's destination port while searching for a saved flow
to replay.
"""
)
@command.command("replay.server") @command.command("replay.server")
def load_flows(self, flows: typing.Sequence[flow.Flow]) -> None: def load_flows(self, flows: typing.Sequence[flow.Flow]) -> None:
@ -110,7 +117,7 @@ class ServerPlayback:
_, _, path, _, query, _ = urllib.parse.urlparse(r.url) _, _, path, _, query, _ = urllib.parse.urlparse(r.url)
queriesArray = urllib.parse.parse_qsl(query, keep_blank_values=True) queriesArray = urllib.parse.parse_qsl(query, keep_blank_values=True)
key: typing.List[typing.Any] = [str(r.port), str(r.scheme), str(r.method), str(path)] key: typing.List[typing.Any] = [str(r.scheme), str(r.method), str(path)]
if not ctx.options.server_replay_ignore_content: if not ctx.options.server_replay_ignore_content:
if ctx.options.server_replay_ignore_payload_params and r.multipart_form: if ctx.options.server_replay_ignore_payload_params and r.multipart_form:
key.extend( key.extend(
@ -129,6 +136,8 @@ class ServerPlayback:
if not ctx.options.server_replay_ignore_host: if not ctx.options.server_replay_ignore_host:
key.append(r.host) key.append(r.host)
if not ctx.options.server_replay_ignore_port:
key.append(r.port)
filtered = [] filtered = []
ignore_params = ctx.options.server_replay_ignore_params or [] ignore_params = ctx.options.server_replay_ignore_params or []