Go to file
Aldo Cortesi deb79a9c5a Add a simple server playback state object.
We use a loose hash to match incoming requests with recorded flows. At the
moment, this hash is over the host, port, scheme, method, path and content of
the request. Note that headers are not included here - if we do want to include
headers, we would have to do some work to normalize them to remove variations
between user agents, header order, etc. etc.
2011-02-21 08:47:19 +13:00
doc-src Stub out doc structure, add screenshots for configuring certs in Firefox. 2011-02-19 19:43:44 +13:00
examples First pass of script hooks for mitmdump. 2011-02-18 12:40:45 +13:00
libmproxy Add a simple server playback state object. 2011-02-21 08:47:19 +13:00
test Add a simple server playback state object. 2011-02-21 08:47:19 +13:00
.gitignore Simple record & playback functionality 2011-02-10 02:59:51 +01:00
CHANGELOG Release mitmproxy 0.2 2010-03-01 17:25:27 +13:00
LICENSE Initial checkin. 2010-02-16 17:09:07 +13:00
MANIFEST.in Initial checkin. 2010-02-16 17:09:07 +13:00
mitmdump Certificates are now generated in a temporary per-session directory. 2011-02-20 13:29:41 +13:00
mitmplayback Certificates are now generated in a temporary per-session directory. 2011-02-20 13:29:41 +13:00
mitmproxy Certificates are now generated in a temporary per-session directory. 2011-02-20 13:29:41 +13:00
mitmrecord Certificates are now generated in a temporary per-session directory. 2011-02-20 13:29:41 +13:00
README.mkd Clean up README.mk 2011-02-16 23:11:38 +13:00
setup.py Simple record & playback functionality 2011-02-10 02:59:51 +01:00
todo Rip out BeautifulSoup, and use a custom XML-ish prettyprinter. 2011-02-06 14:17:30 +13:00

mitmproxy is an interactive SSL-capable intercepting HTTP proxy. It lets you to observe, modify and replay requests and responses on the fly. The underlying library that mitmproxy is built on can also be used to do these things programmatically.

By default, mitmproxy starts up with a mutt-like interactive curses interface - the built-in help page (which you can view by pressing "?") will tell you everything you need to know. Note that requests and responses are stored in-memory until you delete them, so leaving mitmproxy running indefinitely or requesting very large amounts of data through it is a bad idea.

SSL

The first time mitmproxy is started, it will generate a bogus SSL certificate (the default location is ~/.mitmproxy/cert.pem). This certificate will be used for the browser-side of intercepted traffic. Because it won't match any domain you visit, and won't verify against any certificate authority, you will have to add an exception for each site you visit. SSL requests are intercepted by simply assuming that all CONNECT requests are https. The connection from the browser is wrapped in SSL, and we read the request by pretending to be the connecting server. We then open an SSL request to the destination server, and replay the request.

Documentation

A rendered version of the docs for the latest release can be found here:

http://corte.si/projects

Download

Releases can be found here: http://corte.si/projects

Source is hosted here: http://github.com/cortesi/mitmproxy

Requirements

  • A recent Python interpreter.
  • SSL certificates are generated using openssl
  • The curses interface relies on version 0.9.8 or newer of the urwid library.
  • The test suite uses the pry unit testing library.

You should also make sure that your console environment is set up with the following:

  • EDITOR environment variable to determine the external editor.
  • PAGER environment variable to determine the external pager.
  • Appropriate entries in your mailcap files to determine external viewers for request and response contents.