#!/usr/bin/env python import sys, signal from libmproxy import proxy, dump, cmdline from libmproxy.proxy.config import process_proxy_options from libmproxy.proxy.primitives import ProxyServerError from libmproxy.proxy.server import DummyServer, ProxyServer import libmproxy.version, netlib.version import argparse if __name__ == '__main__': # We don't introduce backward-incompatible changes in patch versions. Only consider major and minor version. if netlib.version.IVERSION[:2] != libmproxy.version.IVERSION[:2]: print >> sys.stderr, ("warning: You are using mitmdump %s with netlib %s. " "Most likely, that doesn't work - please upgrade!") % (libmproxy.version.VERSION, netlib.version.VERSION) parser = argparse.ArgumentParser(usage = "%(prog)s [options] [filter]") parser.add_argument('--version', action='version', version="mitmdump" + " " + libmproxy.version.VERSION) cmdline.common_options(parser) parser.add_argument( "--keepserving", action="store_true", dest="keepserving", default=False, help="Continue serving after client playback or file read. We exit by default." ) parser.add_argument( "-d", action="count", dest="flow_detail", default=1, help="Increase flow detail display level. Can be passed multiple times." ) parser.add_argument('args', nargs=argparse.REMAINDER) options = parser.parse_args() if options.quiet: options.verbose = 0 options.flow_detail = 0 proxyconfig = process_proxy_options(parser, options) if options.no_server: server = DummyServer(proxyconfig) else: try: server = ProxyServer(proxyconfig, options.port, options.addr) except ProxyServerError, v: print >> sys.stderr, "mitmdump:", v.args[0] sys.exit(1) dumpopts = dump.Options(**cmdline.get_common_options(options)) dumpopts.flow_detail = options.flow_detail dumpopts.keepserving = options.keepserving if options.args: filt = " ".join(options.args) else: filt = None try: m = dump.DumpMaster(server, dumpopts, filt) def cleankill(*args, **kwargs): m.shutdown() signal.signal(signal.SIGTERM, cleankill) m.run() except dump.DumpError, e: print >> sys.stderr, "mitmdump:", e sys.exit(1) except KeyboardInterrupt: pass