mitmproxy/mitmdump
Aldo Cortesi 3792b0084e Add -c and -C options to mitmdump to control sticky cookies.
It's dumb that this needs to be two different options, but optparse doesn't
support optional arguments. It would be much nicer to just have "-c" for "all",
and "-c filter" for a specified filter.
2011-02-25 17:32:03 +13:00

113 lines
4.0 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 import VERSION
from optparse import OptionParser, OptionGroup
if __name__ == '__main__':
parser = OptionParser(
usage = "%prog [options] [filter]",
version="%%prog %s"%VERSION,
)
proxy.certificate_option_group(parser)
parser.add_option(
"-p", action="store",
type = "int", dest="port", default=8080,
help = "Port."
)
parser.add_option("-c",
action="store_true", dest="stickycookie_all", default=None,
help="Set sticky cookie for all requests.")
parser.add_option("-C",
action="store", dest="stickycookie_filt", default=None, metavar="FILTER",
help="Set sticky cookie filter. Matched against requests.")
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, "Server Replay")
group.add_option("-r", action="store", dest="replay", default=None, metavar="PATH",
help="Replay server responses from a saved file.")
group.add_option("-k", "--kill",
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)
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)
dumpopts = dump.Options(
verbosity = options.verbose,
wfile = options.wfile,
request_script = options.request_script,
response_script = options.response_script,
replay = options.replay,
kill = options.kill,
rheaders = options.rheaders,
stickycookie = stickycookie
)
if args:
filt = " ".join(args)
else:
filt = None
if options.verbose > 0:
print >> sys.stderr, "Running on port %s"%options.port
try:
m = dump.DumpMaster(server, dumpopts, filt)
m.run()
except dump.DumpError, e:
print >> sys.stderr, "mitmdump:", e
sys.exit(1)
except KeyboardInterrupt:
pass