def test_common(): parser = argparse.ArgumentParser() cmdline.common_options(parser) opts = parser.parse_args(args=[]) assert cmdline.get_common_options(opts) opts.stickycookie_filt = "foo" opts.stickyauth_filt = "foo" v = cmdline.get_common_options(opts) assert v["stickycookie"] == "foo" assert v["stickyauth"] == "foo" opts.setheader = ["/foo/bar/voing"] v = cmdline.get_common_options(opts) assert v["setheaders"] == [("foo", "bar", "voing")] opts.setheader = ["//"] tutils.raises( "empty clause", cmdline.get_common_options, opts ) opts.setheader = [] opts.replace = ["/foo/bar/voing"] v = cmdline.get_common_options(opts) assert v["replacements"] == [("foo", "bar", "voing")] opts.replace = ["//"] tutils.raises( "empty clause", cmdline.get_common_options, opts ) opts.replace = [] opts.replace_file = [("/foo/bar/nonexistent")] tutils.raises( "could not read replace file", cmdline.get_common_options, opts ) opts.replace_file = [("/~/bar/nonexistent")] tutils.raises( "filter pattern", cmdline.get_common_options, opts ) p = tutils.test_data.path("mitmproxy/data/replace") opts.replace_file = [("/foo/bar/%s" % p)] v = cmdline.get_common_options(opts)["replacements"] assert len(v) == 1 assert v[0][2].strip() == b"replacecontents"
def test_common(): parser = argparse.ArgumentParser() cmdline.common_options(parser) opts = parser.parse_args(args=[]) assert cmdline.get_common_options(opts) opts.stickycookie_filt = "foo" opts.stickyauth_filt = "foo" v = cmdline.get_common_options(opts) assert v["stickycookie"] == "foo" assert v["stickyauth"] == "foo"
def p(self, *args): parser = MockParser() cmdline.common_options(parser) args = parser.parse_args(args=args) opts = cmdline.get_common_options(args) pconf = config.ProxyConfig(options.Options(**opts)) return parser, pconf
def mitmdump(args=None): # pragma: no cover from mitmproxy.tools import dump version_check.check_pyopenssl_version() parser = cmdline.mitmdump() args = parser.parse_args(args) if args.quiet: args.flow_detail = 0 master = None try: dump_options = dump.Options(**cmdline.get_common_options(args)) dump_options.flow_detail = args.flow_detail dump_options.keepserving = args.keepserving dump_options.filtstr = " ".join(args.filter) if args.filter else None server = process_options(parser, dump_options, args) master = dump.DumpMaster(dump_options, server) def cleankill(*args, **kwargs): master.shutdown() signal.signal(signal.SIGTERM, cleankill) master.run() except (dump.DumpError, exceptions.OptionsError) as e: print("mitmdump: %s" % e, file=sys.stderr) sys.exit(1) except (KeyboardInterrupt, RuntimeError): pass if master is None or master.has_errored: print("mitmdump: errors occurred during run", file=sys.stderr) sys.exit(1)
def mitmproxy(args=None): # pragma: no cover if os.name == "nt": print("Error: mitmproxy's console interface is not supported on Windows. " "You can run mitmdump or mitmweb instead.", file=sys.stderr) sys.exit(1) from mitmproxy.tools import console version_check.check_pyopenssl_version() assert_utf8_env() parser = cmdline.mitmproxy() args = parser.parse_args(args) try: console_options = console.master.Options( **cmdline.get_common_options(args) ) console_options.palette = args.palette console_options.palette_transparent = args.palette_transparent console_options.eventlog = args.eventlog console_options.focus_follow = args.focus_follow console_options.intercept = args.intercept console_options.filter = args.filter console_options.no_mouse = args.no_mouse console_options.order = args.order server = process_options(parser, console_options, args) m = console.master.ConsoleMaster(console_options, server) except exceptions.OptionsError as e: print("mitmproxy: %s" % e, file=sys.stderr) sys.exit(1) try: m.run() except (KeyboardInterrupt, RuntimeError): pass
def mitmweb(args=None): # pragma: no cover from mitmproxy.tools import web version_check.check_pyopenssl_version() parser = cmdline.mitmweb() args = parser.parse_args(args) try: web_options = web.master.Options(**cmdline.get_common_options(args)) web_options.intercept = args.intercept web_options.open_browser = args.open_browser web_options.wdebug = args.wdebug web_options.wiface = args.wiface web_options.wport = args.wport server = process_options(parser, web_options, args) m = web.master.WebMaster(web_options, server) except exceptions.OptionsError as e: print("mitmweb: %s" % e, file=sys.stderr) sys.exit(1) try: m.run() except (KeyboardInterrupt, RuntimeError): pass
def setup_proxy(self, args): parser = cmdline.mitmdump() args = parser.parse_args(args) if args.quiet: args.flow_detail = 0 dump_options = options.Options() dump_options.load_paths(args.conf) dump_options.merge(cmdline.get_common_options(args)) dump_options.merge( dict( flow_detail = args.flow_detail, keepserving = args.keepserving, filtstr = " ".join(args.filter) if args.filter else None, ) ) dump_options.listen_host = self.proxy_host dump_options.listen_port = self.proxy_port pconf = config.ProxyConfig(dump_options) proxy_server = server.ProxyServer(pconf) master = dump.DumpMaster(dump_options, proxy_server) self.proxy_master = master
def mitmweb(args=None): # pragma: no cover from mitmproxy.tools import web version_check.check_pyopenssl_version() parser = cmdline.mitmweb() args = parser.parse_args(args) try: web_options = options.Options() web_options.load_paths(args.conf) web_options.merge(cmdline.get_common_options(args)) web_options.merge( dict( intercept = args.intercept, web_open_browser = args.web_open_browser, web_debug = args.web_debug, web_iface = args.web_iface, web_port = args.web_port, ) ) server = process_options(parser, web_options, args) m = web.master.WebMaster(web_options, server) except exceptions.OptionsError as e: print("mitmweb: %s" % e, file=sys.stderr) sys.exit(1) try: m.run() except (KeyboardInterrupt, RuntimeError): pass
def mitmdump(args=None): # pragma: no cover from mitmproxy.tools import dump version_check.check_pyopenssl_version() parser = cmdline.mitmdump() args = parser.parse_args(args) if args.quiet: args.flow_detail = 0 master = None try: dump_options = dump.Options(**cmdline.get_common_options(args)) dump_options.flow_detail = args.flow_detail dump_options.keepserving = args.keepserving dump_options.filtstr = " ".join(args.args) if args.args else None server = process_options(parser, dump_options, args) master = dump.DumpMaster(dump_options, server) def cleankill(*args, **kwargs): master.shutdown() signal.signal(signal.SIGTERM, cleankill) master.run() except (dump.DumpError, exceptions.OptionsError) as e: print("mitmdump: %s" % e, file=sys.stderr) sys.exit(1) except (KeyboardInterrupt, RuntimeError): pass if master is None or master.has_errored: print("mitmdump: errors occurred during run", file=sys.stderr) sys.exit(1)
def mitmweb(args=None): # pragma: no cover from mitmproxy.tools import web version_check.check_pyopenssl_version() parser = cmdline.mitmweb() args = parser.parse_args(args) try: web_options = web.master.Options(**cmdline.get_common_options(args)) web_options.intercept = args.intercept web_options.wdebug = args.wdebug web_options.wiface = args.wiface web_options.wport = args.wport web_options.wsingleuser = args.wsingleuser web_options.whtpasswd = args.whtpasswd web_options.process_web_options(parser) server = process_options(parser, web_options, args) m = web.master.WebMaster(web_options, server) except exceptions.OptionsError as e: print("mitmweb: %s" % e, file=sys.stderr) sys.exit(1) try: m.run() except (KeyboardInterrupt, RuntimeError): pass
def p(self, *args): parser = tutils.MockParser() cmdline.common_options(parser) args = parser.parse_args(args=args) opts = cmdline.get_common_options(args) pconf = config.ProxyConfig(options.Options(**opts)) return parser, pconf
def run(self): def process_options(_, _options, _args): from mitmproxy.proxy import server # noqa if _args.version: print(debug.dump_system_info()) sys.exit(0) # debug.register_info_dumpers() pconf = config.ProxyConfig(_options) if _options.no_server: return server.DummyServer(pconf) else: try: return server.ProxyServer(pconf) except exceptions.ServerException as v: print(str(v), file=sys.stderr) sys.exit(1) from mitmproxy.tools import dump args = ['-b', self.address[0], '-p', str(self.address[1]), '-q'] version_check.check_pyopenssl_version() parser = cmdline.mitmdump() args = parser.parse_args(args) if args.quiet: args.flow_detail = 0 master = None try: dump_options = options.Options() dump_options.load_paths(args.conf) dump_options.merge(cmdline.get_common_options(args)) dump_options.merge( dict( flow_detail=args.flow_detail, keepserving=args.keepserving, filtstr=" ".join(args.filter) if args.filter else None, )) server = process_options(parser, dump_options, args) self._master = master = self._master_type(dump_options, server) # def clean_kill(*args, **kwargs): # master.shutdown() # signal.signal(signal.SIGTERM, clean_kill) self.info('bind at tcp:{}'.format(self.server_address)) master.run() self.info('stopped') except (dump.DumpError, exceptions.OptionsError) as e: print("mitmdump: %s" % e, file=sys.stderr) sys.exit(1) except (KeyboardInterrupt, RuntimeError): pass if master is None or master.has_errored: print("mitmdump: errors occurred during run", file=sys.stderr) sys.exit(1)
def configuration(): parser = cmdline.mitmweb() args = parser.parse_args(None) web_options = options.Options() web_options.load_paths(args.conf) web_options.merge(cmdline.get_common_options(args)) server = process_options(parser, web_options, args) return web_options, server
def p(self, *args): parser = MockParser() cmdline.common_options(parser) args = parser.parse_args(args=args) opts = options.Options() opts.merge(cmdline.get_common_options(args)) pconf = config.ProxyConfig(opts) return parser, pconf
def test_common(): parser = argparse.ArgumentParser() cmdline.common_options(parser) opts = parser.parse_args(args=[]) assert cmdline.get_common_options(opts) opts.stickycookie_filt = "foo" opts.stickyauth_filt = "foo" v = cmdline.get_common_options(opts) assert v["stickycookie"] == "foo" assert v["stickyauth"] == "foo" opts.setheader = ["/foo/bar/voing"] v = cmdline.get_common_options(opts) assert v["setheaders"] == [("foo", "bar", "voing")] opts.setheader = ["//"] tutils.raises("empty clause", cmdline.get_common_options, opts) opts.setheader = [] opts.replace = ["/foo/bar/voing"] v = cmdline.get_common_options(opts) assert v["replacements"] == [("foo", "bar", "voing")] opts.replace = ["//"] tutils.raises("empty clause", cmdline.get_common_options, opts) opts.replace = [] opts.replace_file = [("/foo/bar/nonexistent")] tutils.raises("could not read replace file", cmdline.get_common_options, opts) opts.replace_file = [("/~/bar/nonexistent")] tutils.raises("filter pattern", cmdline.get_common_options, opts) p = tutils.test_data.path("data/replace") opts.replace_file = [("/foo/bar/%s" % p)] v = cmdline.get_common_options(opts)["replacements"] assert len(v) == 1 assert v[0][2].strip() == b"replacecontents"