mitmproxy/mitmdump
Aldo Cortesi 592812467d Move version constants to version.py, add version to serialized flows.
For now, we don't do anything with the serialized version info, but this should
give us some future-proofing for serialization format changes.
2011-03-09 12:36:14 +13:00

148 lines
4.5 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright (C) 2010 Aldo Cortesi
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys, os.path
from libmproxy import proxy, dump, utils
from libmproxy.version import VERSION
from optparse import OptionParser, OptionGroup
if __name__ == '__main__':
parser = OptionParser(
usage = "%prog [options] [filter]",
version="%%prog %s"%VERSION,
)
parser.add_option(
"-a",
action="store", type = "str", dest="addr", default='',
help = "Address to bind proxy to (defaults to all interfaces)"
)
parser.add_option(
"-i",
action="store_true", dest="stickycookie_all", default=None,
help="Set sticky cookie for all requests."
)
parser.add_option(
"-I",
action="store", dest="stickycookie_filt", default=None, metavar="FILTER",
help="Set sticky cookie filter. Matched against requests."
)
parser.add_option(
"--keepserving",
action="store_true", dest="keepserving", default=False,
help="Continue serving after playback."
)
parser.add_option(
"-p",
action="store", type = "int", dest="port", default=8080,
help = "Proxy service port."
)
parser.add_option(
"-q",
action="store_true", dest="quiet",
help="Quiet."
)
parser.add_option(
"--reqscript",
action="store", dest="request_script", default=None,
help="Script to run when a request is recieved."
)
parser.add_option(
"--respscript",
action="store", dest="response_script", default=None,
help="Script to run when a response is recieved."
)
parser.add_option(
"-v",
action="count", dest="verbose", default=1,
help="Increase verbosity. Can be passed multiple times."
)
parser.add_option(
"-w",
action="store", dest="wfile", default=None,
help="Write flows to file."
)
group = OptionGroup(parser, "Client Replay")
group.add_option(
"-c",
action="store", dest="client_replay", default=None, metavar="PATH",
help="Replay client requests from a saved file."
)
parser.add_option_group(group)
group = OptionGroup(parser, "Server Replay")
group.add_option(
"-s",
action="store", dest="server_replay", default=None, metavar="PATH",
help="Replay server responses from a saved file."
)
group.add_option(
"-k",
action="store_true", dest="kill", default=False,
help="Kill extra requests during replay."
)
group.add_option(
"--rheader",
action="append", dest="rheaders", type="str",
help="Request headers to be considered during replay. "
"Can be passed multiple times."
)
parser.add_option_group(group)
proxy.certificate_option_group(parser)
options, args = parser.parse_args()
if options.quiet:
options.verbose = 0
stickycookie = None
if options.stickycookie_all:
stickycookie = ".*"
elif options.stickycookie_filt:
stickycookie = stickycookie_filt
config = proxy.process_certificate_option_group(parser, options)
server = proxy.ProxyServer(config, options.port, options.addr)
dumpopts = dump.Options(
verbosity = options.verbose,
wfile = options.wfile,
request_script = options.request_script,
response_script = options.response_script,
server_replay = options.server_replay,
kill = options.kill,
rheaders = options.rheaders,
client_replay = options.client_replay,
keepserving = options.keepserving,
stickycookie = stickycookie,
)
if args:
filt = " ".join(args)
else:
filt = None
try:
m = dump.DumpMaster(server, dumpopts, filt)
m.run()
except dump.DumpError, e:
print >> sys.stderr, "mitmdump:", e
sys.exit(1)
except KeyboardInterrupt:
pass