From 4e17b00ce8b5dc9cdac8d2fae8ef925a7c857fa4 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Thu, 13 Mar 2014 23:43:26 +0100 Subject: [PATCH 1/3] order command line options, add disting proxy option group --- libmproxy/cmdline.py | 129 +++++++++++++++++++------------------- libmproxy/proxy/config.py | 5 ++ 2 files changed, 70 insertions(+), 64 deletions(-) diff --git a/libmproxy/cmdline.py b/libmproxy/cmdline.py index d933ba4bb..ed3a8f6b7 100644 --- a/libmproxy/cmdline.py +++ b/libmproxy/cmdline.py @@ -180,11 +180,6 @@ def get_common_options(options): def common_options(parser): - parser.add_argument( - "-b", - action="store", type = str, dest="addr", default='', - help = "Address to bind proxy to (defaults to all interfaces)" - ) parser.add_argument( "--anticache", action="store_true", dest="anticache", default=False, @@ -196,57 +191,10 @@ def common_options(parser): help = "Configuration directory. (~/.mitmproxy)" ) parser.add_argument( - "-n", - action="store_true", dest="no_server", - help="Don't start a proxy server." + "--host", + action="store_true", dest="showhost", default=False, + help="Use the Host header to construct URLs for display." ) - parser.add_argument( - "-p", - action="store", type = int, dest="port", default=8080, - help = "Proxy service port." - ) - # We could make a mutually exclusive group out of -R, -F, -T, but we don't do that because - # - --upstream-server should be in that group as well, but it's already in a different group. - # - our own error messages are more helpful - parser.add_argument( - "-R", - action="store", type=parse_server_spec, dest="reverse_proxy", default=None, - help="Reverse proxy to upstream server: http[s]://host[:port]" - ) - parser.add_argument( - "-F", - action="store", type=parse_server_spec, dest="forward_proxy", default=None, - help="Proxy to unconditionally forward to: http[s]://host[:port]" - ) - parser.add_argument( - "-T", - action="store_true", dest="transparent_proxy", default=False, - help="Set transparent proxy mode." - ) - - group = parser.add_argument_group( - "Advanced Proxy Options", - """ - The following options allow a custom adjustment of the proxy behavior. - Normally, you don't want to use these options directly and use the provided wrappers instead (-R, -F, -T). - """.strip() - ) - group.add_argument( - "--http-form-in", dest="http_form_in", default=None, - action="store", choices=("relative", "absolute"), - help="Override the HTTP request form accepted by the proxy" - ) - group.add_argument( - "--http-form-out", dest="http_form_out", default=None, - action="store", choices=("relative", "absolute"), - help="Override the HTTP request form sent upstream by the proxy" - ) - group.add_argument( - "--upstream-server", dest="manual_upstream_server", default=None, - action="store", type=parse_server_spec, - help="Override the destination server all requests are sent to." - ) - parser.add_argument( "-q", action="store_true", dest="quiet", @@ -295,17 +243,67 @@ def common_options(parser): help="Byte size limit of HTTP request and response bodies."\ " Understands k/m/g suffixes, i.e. 3m for 3 megabytes." ) - parser.add_argument( - "--host", - action="store_true", dest="showhost", default=False, - help="Use the Host header to construct URLs for display." + + + group = parser.add_argument_group("Proxy Options") + # We could make a mutually exclusive group out of -R, -F, -T, but we don't do that because + # - --upstream-server should be in that group as well, but it's already in a different group. + # - our own error messages are more helpful + group.add_argument( + "-b", + action="store", type = str, dest="addr", default='', + help = "Address to bind proxy to (defaults to all interfaces)" + ) + group.add_argument( + "-F", + action="store", type=parse_server_spec, dest="forward_proxy", default=None, + help="Proxy to unconditionally forward to: http[s]://host[:port]" + ) + group.add_argument( + "-n", + action="store_true", dest="no_server", + help="Don't start a proxy server." + ) + group.add_argument( + "-p", + action="store", type = int, dest="port", default=8080, + help = "Proxy service port." + ) + group.add_argument( + "-R", + action="store", type=parse_server_spec, dest="reverse_proxy", default=None, + help="Reverse proxy to upstream server: http[s]://host[:port]" + ) + group.add_argument( + "-T", + action="store_true", dest="transparent_proxy", default=False, + help="Set transparent proxy mode." ) - parser.add_argument( - "--no-upstream-cert", default=False, - action="store_true", dest="no_upstream_cert", - help="Don't connect to upstream server to look up certificate details." + + group = parser.add_argument_group( + "Advanced Proxy Options", + """ + The following options allow a custom adjustment of the proxy behavior. + Normally, you don't want to use these options directly and use the provided wrappers instead (-R, -F, -T). + """.strip() ) + group.add_argument( + "--http-form-in", dest="http_form_in", default=None, + action="store", choices=("relative", "absolute"), + help="Override the HTTP request form accepted by the proxy" + ) + group.add_argument( + "--http-form-out", dest="http_form_out", default=None, + action="store", choices=("relative", "absolute"), + help="Override the HTTP request form sent upstream by the proxy" + ) + group.add_argument( + "--upstream-server", dest="manual_upstream_server", default=None, + action="store", type=parse_server_spec, + help="Override the destination server all requests are sent to." + ) + group = parser.add_argument_group("Web App") group.add_argument( @@ -331,6 +329,7 @@ def common_options(parser): help="Serve the app outside of the proxy." ) + group = parser.add_argument_group("Client Replay") group.add_argument( "-c", @@ -368,6 +367,7 @@ def common_options(parser): "This makes it possible to replay same response multiple times." ) + group = parser.add_argument_group( "Replacements", """ @@ -434,4 +434,5 @@ def common_options(parser): help="Allow access to users specified in an Apache htpasswd file." ) - proxy.config.ssl_option_group(parser) + + proxy.config.ssl_option_group(parser) \ No newline at end of file diff --git a/libmproxy/proxy/config.py b/libmproxy/proxy/config.py index ed0787daa..d3f55f60a 100644 --- a/libmproxy/proxy/config.py +++ b/libmproxy/proxy/config.py @@ -133,3 +133,8 @@ def ssl_option_group(parser): dest="certforward", default=False, help="Simply forward SSL certificates from upstream." ) + group.add_argument( + "--no-upstream-cert", default=False, + action="store_true", dest="no_upstream_cert", + help="Don't connect to upstream server to look up certificate details." + ) \ No newline at end of file From f14eeef6539ac4f104dc37b37fbc74b9ea861965 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Thu, 13 Mar 2014 23:47:02 +0100 Subject: [PATCH 2/3] remove debug switch --- libmproxy/console/__init__.py | 6 +----- mitmproxy | 2 -- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py index 72263c0ee..83145f663 100644 --- a/libmproxy/console/__init__.py +++ b/libmproxy/console/__init__.py @@ -174,8 +174,7 @@ class StatusBar(common.WWrap): r.append("[dest:%s]"%utils.unparse_url(*self.master.server.config.get_upstream_server.dst)) if self.master.scripts: r.append("[scripts:%s]"%len(self.master.scripts)) - if self.master.debug: - r.append("[lt:%0.3f]"%self.master.looptime) + # r.append("[lt:%0.3f]"%self.master.looptime) if self.master.stream: r.append("[W:%s]"%self.master.stream_path) @@ -325,7 +324,6 @@ class Options(object): "anticache", "anticomp", "client_replay", - "debug", "eventlog", "keepserving", "kill", @@ -406,8 +404,6 @@ class ConsoleMaster(flow.FlowMaster): if options.server_replay: self.server_playback_path(options.server_replay) - self.debug = options.debug - if options.scripts: for i in options.scripts: err = self.load_script(i) diff --git a/mitmproxy b/mitmproxy index f227f2018..90f9ce1fc 100755 --- a/mitmproxy +++ b/mitmproxy @@ -17,7 +17,6 @@ if __name__ == '__main__': parser = argparse.ArgumentParser(usage = "%(prog)s [options]") parser.add_argument('--version', action='version', version=libmproxy.version.NAMEVERSION) cmdline.common_options(parser) - parser.add_argument("--debug", dest="debug", default=False, action="store_true") parser.add_argument( "--palette", type=str, default="dark", action="store", dest="palette", @@ -55,7 +54,6 @@ if __name__ == '__main__': opts = console.Options(**cmdline.get_common_options(options)) opts.eventlog = options.eventlog opts.intercept = options.intercept - opts.debug = options.debug opts.palette = options.palette spec = "" From a66913d4a30b2ce2dedc58afcf79ad77faead278 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Fri, 14 Mar 2014 00:02:00 +0100 Subject: [PATCH 3/3] forward proxy -> upstream proxy --- doc-src/_nav.html | 2 +- doc-src/features/index.py | 2 +- doc-src/features/reverseproxy.html | 6 +++--- .../{forwardproxy.html => upstreamproxy.html} | 6 +++--- libmproxy/cmdline.py | 12 ++++++------ libmproxy/proxy/config.py | 10 +++++----- libmproxy/proxy/primitives.py | 2 +- 7 files changed, 20 insertions(+), 20 deletions(-) rename doc-src/features/{forwardproxy.html => upstreamproxy.html} (64%) diff --git a/doc-src/_nav.html b/doc-src/_nav.html index 5460601ff..ddc27dca8 100644 --- a/doc-src/_nav.html +++ b/doc-src/_nav.html @@ -11,7 +11,7 @@ $!nav("anticache.html", this, state)!$ $!nav("clientreplay.html", this, state)!$ $!nav("filters.html", this, state)!$ - $!nav("forwardproxy.html", this, state)!$ + $!nav("upstreamproxy.html", this, state)!$ $!nav("proxyauth.html", this, state)!$ $!nav("replacements.html", this, state)!$ $!nav("serverreplay.html", this, state)!$ diff --git a/doc-src/features/index.py b/doc-src/features/index.py index e15f3311c..0618681f8 100644 --- a/doc-src/features/index.py +++ b/doc-src/features/index.py @@ -4,7 +4,7 @@ pages = [ Page("anticache.html", "Anticache"), Page("clientreplay.html", "Client-side replay"), Page("filters.html", "Filter expressions"), - Page("forwardproxy.html", "Forward proxy mode"), + Page("upstreamproxy.html", "Upstream proxy mode"), Page("setheaders.html", "Set Headers"), Page("serverreplay.html", "Server-side replay"), Page("sticky.html", "Sticky cookies and auth"), diff --git a/doc-src/features/reverseproxy.html b/doc-src/features/reverseproxy.html index 7be02b876..7ad1c26c9 100644 --- a/doc-src/features/reverseproxy.html +++ b/doc-src/features/reverseproxy.html @@ -1,8 +1,8 @@ In reverse proxy mode, mitmproxy accepts standard HTTP requests and forwards -them to the specified upstream server. This is in contrast to forward proxy mode, in which -mitmproxy forwards HTTP proxy requests to an upstream server. +them to the specified upstream server. This is in contrast to +upstream proxy mode, in which +mitmproxy forwards HTTP proxy requests to an upstream proxy server. Note that the displayed URL for flows in this mode will use the value of the __Host__ header field from the request, not the reverse proxy server. diff --git a/doc-src/features/forwardproxy.html b/doc-src/features/upstreamproxy.html similarity index 64% rename from doc-src/features/forwardproxy.html rename to doc-src/features/upstreamproxy.html index 203520d51..5b9c22892 100644 --- a/doc-src/features/forwardproxy.html +++ b/doc-src/features/upstreamproxy.html @@ -1,16 +1,16 @@ In this mode, mitmproxy accepts proxy requests and unconditionally forwards all -requests to a specified upstream server. This is in contrast to reverse proxy mode, in which mitmproxy forwards ordinary HTTP requests to an upstream server. - + - +
command-line -F http[s]://hostname[:port]command-line -U http[s]://hostname[:port]
mitmproxy shortcut Fmitmproxy shortcut U
diff --git a/libmproxy/cmdline.py b/libmproxy/cmdline.py index ed3a8f6b7..22db25fba 100644 --- a/libmproxy/cmdline.py +++ b/libmproxy/cmdline.py @@ -255,9 +255,9 @@ def common_options(parser): help = "Address to bind proxy to (defaults to all interfaces)" ) group.add_argument( - "-F", - action="store", type=parse_server_spec, dest="forward_proxy", default=None, - help="Proxy to unconditionally forward to: http[s]://host[:port]" + "-U", + action="store", type=parse_server_spec, dest="upstream_proxy", default=None, + help="Forward all requests to upstream proxy server: http[s]://host[:port]" ) group.add_argument( "-n", @@ -272,7 +272,7 @@ def common_options(parser): group.add_argument( "-R", action="store", type=parse_server_spec, dest="reverse_proxy", default=None, - help="Reverse proxy to upstream server: http[s]://host[:port]" + help="Forward all requests to upstream HTTP server: http[s][2http[s]]://host[:port]" ) group.add_argument( "-T", @@ -299,9 +299,9 @@ def common_options(parser): help="Override the HTTP request form sent upstream by the proxy" ) group.add_argument( - "--upstream-server", dest="manual_upstream_server", default=None, + "--destination-server", dest="manual_destination_server", default=None, action="store", type=parse_server_spec, - help="Override the destination server all requests are sent to." + help="Override the destination server all requests are sent to: http[s][2http[s]]://host[:port]" ) diff --git a/libmproxy/proxy/config.py b/libmproxy/proxy/config.py index d3f55f60a..067c361d9 100644 --- a/libmproxy/proxy/config.py +++ b/libmproxy/proxy/config.py @@ -44,15 +44,15 @@ def process_proxy_options(parser, options): c += 1 get_upstream_server = ConstUpstreamServerResolver(options.reverse_proxy) http_form_in, http_form_out = "relative", "relative" - if options.forward_proxy: + if options.upstream_proxy: c += 1 - get_upstream_server = ConstUpstreamServerResolver(options.forward_proxy) + get_upstream_server = ConstUpstreamServerResolver(options.upstream_proxy) http_form_in, http_form_out = "absolute", "absolute" - if options.manual_upstream_server: + if options.manual_destination_server: c += 1 - get_upstream_server = ConstUpstreamServerResolver(options.manual_upstream_server) + get_upstream_server = ConstUpstreamServerResolver(options.manual_destination_server) if c > 1: - return parser.error("Transparent mode, reverse mode, forward mode and " + return parser.error("Transparent mode, reverse mode, upstream proxy mode and " "specification of an upstream server are mutually exclusive.") if options.http_form_in: http_form_in = options.http_form_in diff --git a/libmproxy/proxy/primitives.py b/libmproxy/proxy/primitives.py index 0fa5273b9..691db9222 100644 --- a/libmproxy/proxy/primitives.py +++ b/libmproxy/proxy/primitives.py @@ -61,7 +61,7 @@ class AddressPriority(object): MANUALLY_CHANGED = 3 """user changed the target address in the ui""" FROM_SETTINGS = 2 - """upstream server from arguments (reverse proxy, forward proxy or from transparent resolver)""" + """upstream server from arguments (reverse proxy, upstream proxy or from transparent resolver)""" FROM_PROTOCOL = 1 """derived from protocol (e.g. absolute-form http requests)"""