Compare commits

..

1109 Commits

Author SHA1 Message Date
Aldo Cortesi
946fd375fa Changelog for v0.12.1 2015-06-03 09:33:09 +12:00
Aldo Cortesi
0b8cddddf5 console: click-enable tabs 2015-06-02 15:25:58 +12:00
Aldo Cortesi
57a61ae8fd console: convert add_event to a signal. 2015-06-02 13:45:19 +12:00
Aldo Cortesi
776f0a9669 Minor typo in script error. 2015-06-02 11:58:16 +12:00
Aldo Cortesi
1076c25e5b console: click in flow list to view flow 2015-06-02 11:27:26 +12:00
Aldo Cortesi
b5bb4106fd console: mouse scrollwheel throughout. 2015-06-02 11:13:12 +12:00
Aldo Cortesi
62330e4b0f Enable mouse interaction, add a hint for selecting text.
Fixes #597
2015-06-02 11:05:45 +12:00
Maximilian Hils
5e5e73001f Merge pull request #605 from tekii/fix-604
fixes #604 catch method not found for handling pyperclip not found
2015-06-01 18:43:50 +02:00
Marcelo Glezer
14bce0dd12 fixes #604 catch method not found for handling pyperclip not found 2015-06-01 12:06:46 -03:00
Aldo Cortesi
7439e244a6 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-06-01 12:32:03 +12:00
Maximilian Hils
c28cc6fe96 Merge pull request #600 from elitest/print-bracket-fix
Print consistency
2015-05-31 15:20:06 +02:00
Jim Shaver
07cc7f6f50 reverting change in libmproxy/contrib/pyparsing.py 2015-05-31 08:09:03 -04:00
Jim Shaver
bd019a7124 revert changes in ncontrib 2015-05-31 07:59:00 -04:00
Jim Shaver
b51363b3ca Merge remote-tracking branch 'upstream/master' into print-bracket-fix
Conflicts:
	examples/har_extractor.py
	examples/nonblocking.py
	examples/read_dumpfile
	libmproxy/web/app.py
2015-05-31 01:21:44 -04:00
Aldo Cortesi
50df036db5 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-05-31 13:49:21 +12:00
Aldo Cortesi
6c3233ce0c Appease the code style gods. 2015-05-31 13:16:03 +12:00
Maximilian Hils
06fba18106 fix #599 2015-05-31 03:14:14 +02:00
Aldo Cortesi
13ee54da86 Remove dependency on PyOpenSSL, move version check into netlib.
There are a few more functions in the code that accesses PyOpenSSL
directly that should probably also be moved to netlib. Later.
2015-05-31 13:13:12 +12:00
Maximilian Hils
ec92fca8c0 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-05-31 01:51:31 +02:00
Maximilian Hils
0f8e8ee1ad add bench tool for windows 2015-05-31 01:51:13 +02:00
Jim Shaver
4fe2c069cc Fixed print function to be inline with python 3 2015-05-29 23:17:48 -04:00
Aldo Cortesi
a05a70d816 Add coding style check, reformat. 2015-05-30 12:03:28 +12:00
Aldo Cortesi
1a106f4080 Ensure that flow/view state is consistent.
Fixes #595 and #592
2015-05-29 11:36:56 +12:00
Aldo Cortesi
99c691def5 Post-release version bump, and checklist addition. 2015-05-26 10:44:52 +12:00
Aldo Cortesi
6d70b790df release: include resources PyInstaller doesn't record in spec files. 2015-05-25 13:08:32 +12:00
Aldo Cortesi
c098ce8876 docs: widen sidebar 2015-05-25 10:13:01 +12:00
Aldo Cortesi
7fe9f04cce docs: don't show un-necessary collapse target on mobile 2015-05-24 14:29:53 +12:00
Aldo Cortesi
2135bcec61 docs: styles now live in www.mitproxy.org repo, make images responsive 2015-05-24 14:09:51 +12:00
Aldo Cortesi
0a81265661 docs: adjust for countershape changes 2015-05-24 13:16:49 +12:00
Aldo Cortesi
b91999507e Move websitelayout to website. 2015-05-23 12:36:52 +12:00
Aldo Cortesi
3161a5be22 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-05-23 09:44:28 +12:00
Aldo Cortesi
ba070bf947 docs: bootstrap theme + logo 2015-05-22 17:13:58 +12:00
Aldo Cortesi
f816246f4e doc: fix nav in website mode 2015-05-22 11:21:00 +12:00
Maximilian Hils
98bc983dab Merge pull request #591 from Kriechi/autoenv-improvements
improve autoenv script
2015-05-21 13:28:31 +02:00
Thomas Kriechbaumer
b2f87b9424 improve autoenv script
* properly quote DIR variable
  (it might contain spaces)
* use builtin string magic instead of `dirname`
2015-05-21 13:15:55 +02:00
Aldo Cortesi
634f2e2c24 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-05-20 13:13:54 +12:00
Aldo Cortesi
6685c27697 docs: first-pass conversion to bootstrap3
Crappy default styling for now.
2015-05-20 13:12:41 +12:00
Maximilian Hils
26923dd0e4 Update CHANGELOG 2015-05-18 11:17:49 +02:00
Aldo Cortesi
a9f6d53562 certificate docs: reorg, wording, tweaks 2015-05-18 12:05:29 +12:00
Aldo Cortesi
b098556e60 Merge branch 'ssldocs' of https://github.com/elitest/mitmproxy into elitest-ssldocs 2015-05-18 11:23:45 +12:00
Aldo Cortesi
14341ffa19 Merge pull request #584 from dlethin/feature/http_1_0
Make sure proxy returns the httpversion specified in the request
2015-05-18 11:03:05 +12:00
Aldo Cortesi
48e4fb1af9 Merge pull request #585 from TearsDontFalls/master
docs: Single Qoute for ignore pattern with "!"
2015-05-18 11:02:25 +12:00
Aldo Cortesi
33169d610c Release pep: bump version, changelog, contributors 2015-05-18 10:44:09 +12:00
TearsDontFalls
d88c3a0e95 docs: Single Qoute for ignore pattern with "!"
because wouldnt work with default bash settings as its part of history expansion in bash
2015-05-16 11:53:49 +02:00
Doug Lethin
cdff79fd4c Make sure proxy returns the httpversion specified in the request rather
than hardcoding to 1.1.
2015-05-15 22:20:09 -04:00
Maximilian Hils
a8cb8a01a3 docs: add parantheses for ignore parameters. 2015-05-10 20:29:34 +02:00
Maximilian Hils
541a506b5f Merge pull request #576 from nickraptis/req-ts-start
Accurately timestamp start of request
2015-05-08 10:59:03 +02:00
Nick Raptis
202ede3c54 Accurately timestamp start of request
When building a request from a stream, try to get an accurate
start timestamp from the Reader. This was already in the code
and also used when building response objects, but was ommited
in commit ddf458b330

Without his logic and when the client is reusing a connection
to send requests, the timestamp_start of subsequent requests
is early and equal to when the connection started read blocking
2015-05-08 10:58:05 +03:00
Aldo Cortesi
86526eed8d Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-05-03 10:18:48 +12:00
Aldo Cortesi
fcbfe4b605 Adapt to new literal escaping style in pathod 2015-05-03 10:18:18 +12:00
Maximilian Hils
a7d90ccec7 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-05-02 16:24:47 +02:00
Maximilian Hils
62ff239e41 check in last attempt at contenteditable before retreating to inputs 2015-05-02 16:23:57 +02:00
Aldo Cortesi
e1d3ebb446 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-05-02 17:20:09 +12:00
Aldo Cortesi
50b7bfaadc Adapt to new Pathoc API - silence output to stdout. 2015-05-02 16:46:15 +12:00
Maximilian Hils
bb965b8e34 web: try harder to fix editor 2015-05-01 20:45:31 +02:00
Maximilian Hils
c780fc7bdf Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-05-01 17:25:00 +02:00
Maximilian Hils
3f5ca10c39 mitmweb: add editor 2015-05-01 17:24:44 +02:00
Aldo Cortesi
1c26516b18 pretty_size now lives in netlib.utils 2015-04-30 12:18:01 +12:00
Maximilian Hils
90dff4a8a1 Merge pull request #569 from mike-pt/master
Match all freebsd versions and not just freebsd10
2015-04-27 04:41:51 +02:00
Mike C
b942f98f37 + Use sys.platform.startswith("freebsd") instead of matching just freebsd10.
+ This means support for any freebsd version (note that I only tested 11-CURRENT and 9)
2015-04-27 02:31:58 +01:00
Maximilian Hils
ca9dfff4b5 improve docs for win install
Adding Python to PATH during installation is useful,
but doesn't help users who have already installed Python.
The Powershell command takes care of the Scripts directory
as well.
2015-04-26 20:09:20 +02:00
Maximilian Hils
b40133a4f3 Merge pull request #555 from elitest/userinstalldocs
User Installation Documentation update
2015-04-26 19:39:21 +02:00
Maximilian Hils
1742017752 make code more pythonic 2015-04-26 19:25:59 +02:00
Maximilian Hils
417190daa7 Merge remote-tracking branch 'tunz/crash1' 2015-04-26 18:44:40 +02:00
Maximilian Hils
b5690b8103 remove superfluous set_focus 2015-04-26 18:43:27 +02:00
Maximilian Hils
f96e4957b1 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-04-26 18:41:40 +02:00
Maximilian Hils
79e587fe04 fix #568 2015-04-26 18:41:27 +02:00
Jim Shaver
ea8e58f037 Re-org and added platform specific install from source docs, refs: mitmproxy/mitmproxy#398 2015-04-25 00:19:23 -04:00
Maximilian Hils
1c5277b21f Merge pull request #561 from tunz/overwrite
Check overwrite, when save to file instaed of clipboard
2015-04-23 11:35:02 +02:00
Choongwoo Han
ad33d0925f Fix crash when save to clipboard before loading 2015-04-23 15:40:57 +09:00
Choongwoo Han
f4f57e62e5 Check overwrite, when save to file instaed of clipboard 2015-04-23 15:02:57 +09:00
Jim Shaver
bfe57ae113 Moved installing from Source to the bottom. 2015-04-21 10:39:57 -04:00
Aldo Cortesi
10750c9f30 python2 -> python in ./dev
Python 2 is not at python2 in most environments. If we really care, we should
just include an explicit version check at the head of the script.
2015-04-21 13:40:45 +12:00
Aldo Cortesi
37d731aacd Missed some un-needed variable declarations 2015-04-21 11:42:27 +12:00
Aldo Cortesi
ddf458b330 HTTP request reading moves to netlib 2015-04-21 11:05:37 +12:00
Aldo Cortesi
e9ae0b92ba Fudge a rare race condition in the test suite 2015-04-19 18:03:50 +12:00
Aldo Cortesi
ff654730e8 console: make g/G shortcuts work in more contexts 2015-04-17 13:30:49 +12:00
Aldo Cortesi
d20069fcd2 console: more consistent view stack management 2015-04-17 13:06:45 +12:00
Aldo Cortesi
e963a9da48 console: suport unary attributes
Attributes with no value are treated as unary, e.g. "Secure" rather than
"Secure=". If you really want to have an empty attribute value you can
edit the header directly.

Behind the scenes, restructure GridEditor to know about data conversion
in and out of the editor.
2015-04-17 12:54:29 +12:00
Aldo Cortesi
7abaf3c362 console: refactor grideditor, fix a crash on tab for subeditors 2015-04-16 22:01:54 +12:00
Aldo Cortesi
cb880cc65a Adjust header key color in solarized palettes 2015-04-16 12:16:07 +12:00
Aldo Cortesi
52716e3439 console: first pass of a Set-cookie editor for responses 2015-04-16 10:57:12 +12:00
Aldo Cortesi
850a50262b console: add a -l flag to set the limit on startup 2015-04-15 12:56:43 +12:00
Aldo Cortesi
5ff4303124 Adjust for ODict interface change 2015-04-15 10:29:57 +12:00
Aldo Cortesi
f33b483110 Editor for request cookies 2015-04-15 09:43:15 +12:00
Aldo Cortesi
0f269f7423 Whitespace, formatting 2015-04-15 09:14:20 +12:00
Aldo Cortesi
c335c2b533 Add set_cookies method to HTTPResponse 2015-04-14 16:23:51 +12:00
Aldo Cortesi
ab7e2857cc New get_cookies for HttpResponse 2015-04-14 15:14:36 +12:00
Aldo Cortesi
e17eacd8d7 New get_cookie and set_cookie implementations for HTTPRequest 2015-04-14 13:45:38 +12:00
Aldo Cortesi
4652887786 Update docs to reflect non-aliased odict module 2015-04-14 12:04:42 +12:00
Aldo Cortesi
937a358aa9 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-04-14 12:01:37 +12:00
Aldo Cortesi
bea0bd236a Housekeeping and cleanups
- No output to stdout on load in examples - they muck up the test suite.
- Use the odict module directly, rather than aliasing it. The small convenience
this gives to scripters is not worth it.
- Move the cookie tests from the flow test module to the protocol_http test
module.
2015-04-14 11:58:10 +12:00
Maximilian Hils
cbf6cad852 make dev script more robust, fix #556 2015-04-13 17:17:18 +02:00
Jim Shaver
a63634254d Removed logging out added setting variables manually. 2015-04-11 23:17:07 -04:00
Jim Shaver
4a6bdb2564 added the most important part of "sudo apt-get install ..." to the docs 2015-04-11 22:17:26 -04:00
Maximilian Hils
ba149d90ad spaces, not tabs 2015-04-12 03:50:14 +02:00
Maximilian Hils
c0a318566a add flowwriter example 2015-04-12 03:47:58 +02:00
Jim Shaver
d4766d8bd0 Added on page documentation 2015-04-11 20:04:27 -04:00
Jim Shaver
3117dd7733 Removed mitmweb referrences and added On This Page section 2015-04-11 19:41:16 -04:00
Jim Shaver
5b6fb64e60 cleaned up Installing from source section. 2015-04-11 19:02:37 -04:00
Jim Shaver
4731c1bb79 Fixed image name and moved it into the screenshots folder 2015-04-11 17:25:31 -04:00
Jim Shaver
1a5f0e944e Fixed english and made each OS consistent 2015-04-11 17:21:43 -04:00
Jim Shaver
fb0e2bf1f9 Cleaned up Ubuntu docs and added Windows installation information 2015-04-11 16:45:48 -04:00
Maximilian Hils
923503260e add tests 2015-04-10 19:42:32 +02:00
Maximilian Hils
ab2b98b988 fix pretty_host if no host is present 2015-04-10 19:35:42 +02:00
Maximilian Hils
6852eb9d0a fix #553 2015-04-10 14:59:38 +02:00
Jim Shaver
5ca85bc5f4 Minor reorg and add link for Chrome on Linux 2015-04-10 02:20:43 -04:00
Maximilian Hils
f37efecd0a add yappi benchmark tool 2015-04-08 20:43:59 +02:00
Aldo Cortesi
b1d2da19f9 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-04-08 12:00:17 +12:00
Aldo Cortesi
fb0a5d8f63 Add an autoenv file to auto-activate the virtualenv
See https://github.com/kennethreitz/autoenv
2015-04-08 11:59:00 +12:00
Maximilian Hils
0aa2fca25a Merge pull request #544 from ryoqun/websocket-connection-header-case-sensitivity
Make the Websocket's connection header value case-insensitive
2015-04-08 01:23:54 +02:00
Maximilian Hils
1a666bb5db Merge pull request #547 from macmantrl/blank_values
Keep blank query values for flow hashing
2015-04-08 01:22:23 +02:00
Maximilian Hils
f2ad047966 fix tests 2015-04-08 00:33:31 +02:00
Maximilian Hils
74aff39b28 add example which uses filt 2015-04-08 00:21:49 +02:00
Maximilian Hils
e7b154c823 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-04-08 00:20:37 +02:00
Maximilian Hils
2242c671fd allow passing custom argv to libmproxy.main 2015-04-08 00:20:32 +02:00
Maximilian Hils
b961f9e599 Merge pull request #543 from legendtang/master
web: fix delete flows
2015-04-08 00:05:04 +02:00
Jim Shaver
6c6639a78a Cleaned up wrapping and added links to external CA instructions. 2015-04-07 01:33:45 -04:00
Aldo Cortesi
8e2e83a3c6 console: add g/G shortcuts throughout
g: go to end
G: go to beginning
2015-04-07 16:13:42 +12:00
Aldo Cortesi
e76467e977 Refactor flow list state management
- Use signal mechanism for state synchronisation
- Move "Copy to clipboard" shortcut to "P"
2015-04-07 15:59:38 +12:00
Aldo Cortesi
c7b1234e13 consone: don't enter Options if it's already open 2015-04-07 12:26:56 +12:00
Aldo Cortesi
6bab6f2ef1 console: tune palettes a bit 2015-04-07 11:36:42 +12:00
Aldo Cortesi
94cd704f73 console: toggle palette transparency from options, indicate selected palette 2015-04-07 10:11:25 +12:00
Aldo Cortesi
f6a3bd15b3 console: All palettes now explicitly set a background colour
There's a new option --palette-transparent to turn this off if you want
to use your own terminal background.
2015-04-07 10:01:18 +12:00
Aldo Cortesi
1cb1ee411b console: palette picker for the options screen 2015-04-07 08:42:40 +12:00
Aldo Cortesi
538f215458 console: factor out selection widget 2015-04-06 18:28:51 +12:00
Aldo Cortesi
0d6de19b07 console: sticky cookies and auth to options screen 2015-04-06 17:30:12 +12:00
Aldo Cortesi
c4e0f9d8d7 console: TCP proxy patterns to new options screen 2015-04-06 17:19:52 +12:00
Aldo Cortesi
ec7572697a console: default display mode to new options screen 2015-04-06 17:14:32 +12:00
Aldo Cortesi
acb6b5667c console: scripts to new options screen 2015-04-06 17:11:02 +12:00
Aldo Cortesi
488adcb79e console: replacement patterns to new option screen 2015-04-06 17:05:52 +12:00
Aldo Cortesi
15246c3403 console: ignore patterns to new options screen. 2015-04-06 17:02:51 +12:00
Aldo Cortesi
9e39999706 Add headings to options, start migrating more options into options screen
SetHeaders first...
2015-04-06 16:47:58 +12:00
Legend Tang
20d3d7e1b8 Merge https://github.com/mitmproxy/mitmproxy 2015-04-06 11:28:20 +08:00
Aldo Cortesi
3704411466 Minimal help context for options 2015-04-03 20:04:19 +13:00
Aldo Cortesi
aadaa66d0b console: tune and re-enable palettes 2015-04-03 19:44:09 +13:00
Aldo Cortesi
ddc353955d Don't list all options shortcuts in help 2015-04-03 19:10:12 +13:00
Terry Long
6a24a4e3c5 Keep blank query values for flow hashing 2015-04-02 22:10:01 -07:00
Aldo Cortesi
41a1a0bef3 console: C to clear all options, correct footer in options screen 2015-04-03 14:47:55 +13:00
Aldo Cortesi
57bdb89342 console: keyboard shortcuts for options 2015-04-03 14:38:04 +13:00
Aldo Cortesi
65971f02ad console: basic options page 2015-04-03 14:10:57 +13:00
Aldo Cortesi
fe6957eddb console: fix a crash that sometimes occurs when setting a limit 2015-04-01 10:47:28 +13:00
Aldo Cortesi
c794d362f9 Next/previous tab keybindings 2015-04-01 10:34:58 +13:00
Aldo Cortesi
32ba6021b3 console: improve handling of help contexts, fix key bindings in flow views 2015-04-01 09:25:50 +13:00
Ryo Onodera
9674a0869c Make the Websocket's connection header value case-insensitive 2015-03-31 16:07:04 +09:00
Aldo Cortesi
44fb42185f console: fix body scrolling 2015-03-31 15:59:54 +13:00
Aldo Cortesi
82997cb311 Fix timestamps in detail view
- Fix a crash when connection timestamps don't exist yet
- Fix display of response timestamps
- Get rid of those colossal ternaries. I want a device that pokes people in the
eye every time they try to use a ternary operator.
2015-03-31 09:49:07 +13:00
Legend Tang
269571efe5 web: fix delete flows 2015-03-30 20:18:56 +08:00
Maximilian Hils
5977e844e7 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-03-30 03:49:59 +02:00
Maximilian Hils
6d29f93e9e web: add prompt for keyboard navigation 2015-03-30 03:49:50 +02:00
Aldo Cortesi
ad08b80c43 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-03-30 11:54:14 +13:00
Aldo Cortesi
e964983e81 Disable keystrokes requiring a request/response on details page 2015-03-30 11:53:10 +13:00
Maximilian Hils
737002921e s/filter/search/
no matter what we agree on in #542,
this needs to be done anyway.
2015-03-30 00:46:33 +02:00
Aldo Cortesi
a32698fc04 Update statusbar when flow list is cleared. 2015-03-30 10:34:02 +13:00
Aldo Cortesi
8f5cf833d0 Add flow detail view as a tab in the flow view 2015-03-29 19:24:37 +13:00
Aldo Cortesi
cacd09fafc console: add a tabs widget, and use it for flowview. 2015-03-29 17:40:43 +13:00
Aldo Cortesi
cfeee347d9 Simplify content generation in flow view 2015-03-29 15:54:29 +13:00
Aldo Cortesi
8f0e4a9bdd console: simplify view modes. 2015-03-29 15:27:17 +13:00
Aldo Cortesi
bdc2fda7ef Seems more natural to re-prompt for search every time 2015-03-29 15:16:20 +13:00
Aldo Cortesi
80c4de5ca4 Keep record of last search term 2015-03-29 15:14:56 +13:00
Aldo Cortesi
bf012e0a89 Zap old search tests 2015-03-29 14:49:57 +13:00
Aldo Cortesi
92ce91efac Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-03-29 14:46:10 +13:00
Aldo Cortesi
e4738bdd39 Fix search wrap-around offsets. 2015-03-29 14:39:47 +13:00
Aldo Cortesi
8a0404ddf8 Beginning of a simpler and more flexible search implementation 2015-03-29 14:32:36 +13:00
Maximilian Hils
93d1d0416d web: add more keyboard shortcuts 2015-03-29 03:24:03 +02:00
Maximilian Hils
fd911b75e6 web: global key handling 2015-03-29 01:45:37 +01:00
Maximilian Hils
1913975fa6 web: use contexts to pass down stores.
Using contexts frees us from the contracts we have
using props - namely, we can assume them to be constant
for the lifetime of the object.
2015-03-27 21:58:04 +01:00
Maximilian Hils
f39e6c5c18 web: minor ux improvements 2015-03-27 18:51:25 +01:00
Maximilian Hils
dcb42b3016 web: fix react-router 2015-03-27 16:54:21 +01:00
Maximilian Hils
11b082c998 Merge remote-tracking branch 'vzvu/react-router-0.13.2'
Conflicts:
	libmproxy/web/static/vendor.js
2015-03-27 16:17:35 +01:00
Maximilian Hils
42cd942b64 web: initial attempt at header editor 2015-03-27 15:30:19 +01:00
vzvu3k6k
d65a4b6100 web: upgrade to react-router 0.13.2 2015-03-27 04:32:38 +09:00
Maximilian Hils
04f2467e84 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-03-26 18:17:36 +01:00
Maximilian Hils
9854379046 web: backup flows on edit 2015-03-26 18:17:30 +01:00
Maximilian Hils
423530fc25 Merge pull request #515 from krzysiekbielicki/master
[#514] Add support for ignoring payload params in multipart/form-data
2015-03-26 18:16:31 +01:00
Maximilian Hils
9a328c12a4 Merge pull request #538 from peralta/patch-1
mitmweb: start onboarding app if instructed to
2015-03-26 17:26:50 +01:00
peralta
901bf018c0 mitmweb: start onboarding app if instructed to 2015-03-26 17:20:32 +01:00
Maximilian Hils
d08fc33f35 Merge pull request #537 from tekii/fix530
fix #530 set client_playback to None when client_playback is done
2015-03-26 14:06:56 +01:00
Maximilian Hils
13860cf6b4 Merge pull request #536 from tekii/master
fixed exception in mitmproxy -c fix #535
2015-03-26 14:06:46 +01:00
Marcelo Glezer
ab7281ec04 fix #530 set client_playback to None when client_playback is done 2015-03-25 17:40:25 -03:00
Marcelo Glezer
fb17eea5e0 fix #535 server replay was failing from ui but working from command line (fixed now too) 2015-03-25 17:12:38 -03:00
Marcelo Glezer
c5f153f8d0 fix #535 now works with both cases: using -c from command line and pressing c in the ui 2015-03-25 17:07:31 -03:00
Marcelo Glezer
e6a8863c51 fixed exception in mitmproxy -c fix #535 2015-03-25 16:57:28 -03:00
Maximilian Hils
b0f60cf1f2 Merge pull request #532 from tekii/master
handles UnicodeDecodeError (#531)
2015-03-25 12:47:13 +01:00
Marcelo Glezer
f45ac12d20 handles UnicodeDecodeError 2015-03-23 23:57:18 -03:00
Maximilian Hils
968c7021df web: add basic edit capability for first line 2015-03-23 00:24:56 +01:00
Maximilian Hils
2acd77dea0 web: add content download 2015-03-22 15:29:55 +01:00
Maximilian Hils
39a8ac7e2a web: improve views 2015-03-22 15:19:35 +01:00
Maximilian Hils
cf9f91b0b4 web: upgrade to react 0.13 2015-03-22 14:33:42 +01:00
Aldo Cortesi
6fb661dab5 Unwind twisty maze of cache layers. Holy confusing, Batman. 2015-03-22 21:08:18 +13:00
Aldo Cortesi
842e23d3e3 Replace far-too-clever decorator LRU cache with something simpler 2015-03-22 21:00:41 +13:00
Aldo Cortesi
a2da38cc83 Whitespace, indentation, formatting 2015-03-22 17:33:25 +13:00
Aldo Cortesi
15f65d63f6 Trigger flow change when flow elements are edited 2015-03-22 17:28:13 +13:00
Aldo Cortesi
a1c21d9774 Fix unit tests 2015-03-22 17:23:27 +13:00
Aldo Cortesi
08bb076533 console: signal-based view stack, unifying mechanisms for help, flow views, etc. 2015-03-22 17:18:53 +13:00
Aldo Cortesi
120c8db8a4 console: refactor the way we keep global view state 2015-03-22 16:59:11 +13:00
Aldo Cortesi
aa9a38522f Remove refresh_flow mechanism in favor of a signal-based implementation 2015-03-22 15:58:32 +13:00
Aldo Cortesi
7a119ac7d7 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-03-22 15:40:48 +13:00
Aldo Cortesi
c9a0975446 console: observe state objects for changes, fire event to update status bar. 2015-03-22 15:11:54 +13:00
Maximilian Hils
9415846232 web: raw content view 2015-03-22 02:25:47 +01:00
Aldo Cortesi
200498e7aa Simplify the way in which path prompts keep state
In the past, we kept the last path the user specified for a number of different
path types to pre-seed the path prompt. Now, we no longer distinguish between
types, and pre-seed with the last used directory regardless.
2015-03-22 14:14:44 +13:00
Aldo Cortesi
572000aa03 Rationalise prompt calling conventions 2015-03-22 13:59:34 +13:00
Aldo Cortesi
3bf4feb213 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-03-22 13:33:11 +13:00
Aldo Cortesi
89383e9c13 Refactor status bar prompting to use signal system 2015-03-22 13:32:24 +13:00
Maximilian Hils
89d66360d6 tweak css 2015-03-22 00:28:08 +01:00
Maximilian Hils
1143552e16 web: add content views 2015-03-22 00:21:38 +01:00
Maximilian Hils
02a61ea45d structure components 2015-03-21 22:49:51 +01:00
Maximilian Hils
ac5d74d42c web: fix bugs 2015-03-21 21:55:02 +01:00
Aldo Cortesi
381a563067 Status bar message expiry based on signals and Urwid main loop 2015-03-21 12:37:00 +13:00
Aldo Cortesi
8725d50d03 Add blinker dependency, start using it to refactor console app
Blinker lets us set up a central pub/sub mechanism to disentangle our object
structure.
2015-03-21 11:19:20 +13:00
Aldo Cortesi
b475c8d6ea Add window.py import missed in refactoring 2015-03-20 15:22:05 +13:00
Aldo Cortesi
c182133d64 console: pull primary window frame management out into window.py 2015-03-20 13:26:08 +13:00
Aldo Cortesi
2f8ebfdce2 Pull console StatusBar into its own file. 2015-03-20 11:08:04 +13:00
Aldo Cortesi
241530eb0a Remove cruft to work around an old Urwid bug 2015-03-20 11:03:46 +13:00
Aldo Cortesi
558e0a41c2 Fix general prompt input. 2015-03-20 11:00:24 +13:00
Aldo Cortesi
560e44c637 Pull PathEdit out into its own file. 2015-03-20 10:54:57 +13:00
Aldo Cortesi
a3f4296bf1 Explicitly handle keyboard interrupt in mitmproxy
Fixes #522
2015-03-20 10:02:34 +13:00
Aldo Cortesi
d7e53e6573 Fix crashes on mouse click when input is being handled 2015-03-20 09:30:29 +13:00
Jim Shaver
998c9c49c4 Merge branch 'master' of github.com:mitmproxy/mitmproxy into ssldocs 2015-03-19 15:58:53 -04:00
Maximilian Hils
97c6d7ed25 onboarding app: serve certs inline to unbreak firefox 2015-03-19 16:29:05 +01:00
Maximilian Hils
51856b7ccd Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-03-19 16:18:41 +01:00
Maximilian Hils
a2cbfb117b fix webapp on Windows
- the p12 file needs a ".p12" extension. simply naming the file "p12"
  isn't sufficient
2015-03-19 16:17:44 +01:00
Aldo Cortesi
b47019293e Nicer Solarized palettes, using the correct terminal values 2015-03-19 20:49:43 +13:00
Aldo Cortesi
7e9a5e66fe Reinstate solarized_dark and solarized_light palettes. 2015-03-19 18:42:03 +13:00
Aldo Cortesi
32a674948f Less painful light heading bar palette
lowlight remains painful due to background color restrictions.
2015-03-19 18:29:06 +13:00
Aldo Cortesi
05d1b99043 No output to stdout in the test suite, please. 2015-03-19 18:10:21 +13:00
Aldo Cortesi
1d5fcc6e0e Revamp palette specification
- Split low-color and high-color specifications in palettes.
- Split off light, dark, lowlight and lowdark palettes. Lowlight and lowdark
will be the low-color base for most subsequent palettes.
- Add a small script that makes test pattern requests to pathod.
2015-03-19 18:05:30 +13:00
Aldo Cortesi
b77e511fca Merge pull request #526 from tekii/fix-522
fix for #522
2015-03-19 11:40:53 +13:00
Marcelo Glezer
7c75f4d0db test/test_console_help.py fixed 2015-03-18 13:49:33 -03:00
Marcelo Glezer
8feebcbf8e fix for #522 2015-03-18 12:56:12 -03:00
Jim Shaver
36bec7b77e now actually tracking ssl.html 2015-03-18 00:29:54 -04:00
Jim Shaver
972f612090 Merge remote-tracking branch 'upstream/master' 2015-03-18 00:25:22 -04:00
Jim Shaver
e0e36f5dae consolidated down all SSL documentation into one document 2015-03-18 00:22:18 -04:00
Maximilian Hils
5721e5bd27 require urwid 1.3 2015-03-18 00:05:57 +01:00
Maximilian Hils
29e529a69e Merge pull request #523 from tekii/fix-client-replay-key
fixes crash pressing 'c':client-replay in mitmproxy
2015-03-17 21:43:21 +01:00
Marcelo Glezer
75d4563af0 fixes crash pressing 'c':client-replay in mitmproxy 2015-03-17 16:39:52 -03:00
Jim Shaver
f3dab52a62 Better english 2015-03-17 00:30:18 -04:00
Jim Shaver
968d94d471 Removes all of the platform specific certificate installation instructions. 2015-03-17 00:26:42 -04:00
Maximilian Hils
40c242c3f6 add table sort 2015-03-17 03:05:59 +01:00
Krzysztof Bielicki
953f9aa641 Added tests 2015-03-16 10:23:50 +01:00
Maximilian Hils
4a92c42517 web: smaller changes 2015-03-15 22:05:50 +01:00
Maximilian Hils
3650d73662 Merge remote-tracking branch 'onlywade/master'
Conflicts:
	libmproxy/console/__init__.py
	libmproxy/console/flowlist.py
2015-03-15 14:36:06 +01:00
Maximilian Hils
47091c8db5 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-03-15 03:09:00 +01:00
Maximilian Hils
7b58fe5142 mitmdump: improve request printing 2015-03-15 03:08:45 +01:00
Maximilian Hils
5b4d54c829 mitmdump: decode flow before printing 2015-03-15 02:53:05 +01:00
Maximilian Hils
7242654d7d Merge pull request #519 from legendtang/master
update package.json during transition period, see #518
2015-03-15 00:03:03 +01:00
Legend Tang
d7ae3bb638 update package.json during transition period, see #518 2015-03-15 02:27:43 +08:00
Maximilian Hils
274e6217de Merge pull request #517 from mitmproxy/virtualenv-win
simplify virtualenv
2015-03-14 03:10:14 +01:00
Maximilian Hils
e9a5a26bf0 ./dev: echo what we have done 2015-03-14 03:08:34 +01:00
Maximilian Hils
f309eb3526 Update README.mkd 2015-03-14 02:42:50 +01:00
Maximilian Hils
f815525f18 simplify virtualenv
- add dev.bat for Windows users
- remove ~/.pipcache creation.
  If that causes issues with PyInstaller, we should use
  pip --no-cache-dir there or rm -r pip.locations.USER_CACHE_DIR.
- remove superfluous pip install calls.
2015-03-14 02:33:21 +01:00
Maximilian Hils
9522610866 travis: fix coveralls 2015-03-14 02:20:45 +01:00
Aldo Cortesi
a4f500c82e Indentation, style, whitespace 2015-03-13 23:14:37 +11:00
Aldo Cortesi
60dce08d54 Remove compatibility shim used to interop with older versions of Urwid 2015-03-13 23:04:07 +11:00
Aldo Cortesi
87a3c71041 Formatting and whitespace 2015-03-13 22:29:21 +11:00
Aldo Cortesi
468cc81c8a Style & whitespace 2015-03-13 22:07:35 +11:00
Aldo Cortesi
488bcaca6f Integrate Urwid's MainLoop in console mitmproxy
Urwid's method for accumulating multi-character escape codes is now tied
up with its main loop, which means we can't avoid it. This commit fixes
a range of issues (like escape not working to exit editable fields), and
also improves responsiveness.
2015-03-13 21:58:22 +11:00
Aldo Cortesi
0d59c2da97 Better error when invalid palette is specified 2015-03-12 22:56:47 +11:00
Aldo Cortesi
04e9260b74 Re-enable OSX binary builds for mitmproxy and mitmweb 2015-03-12 22:52:46 +11:00
Aldo Cortesi
40366fa94e Virtualenv is the one and only recommended dev environment
- Create a "dev" script to create a virtualenv-based dev environment
- Update the docs to remove non-virtualenv install recommendations
- Update osx-binaries generation to use virtualenv

TODO:
- The dev script or an equivalent should be made to work on Windows
- We still can't remove the annoying top-level command scripts, because
pyinstaller doesn't support entry points. Once it does, they can go.
2015-03-12 22:12:15 +11:00
Aldo Cortesi
de3f84934d Test suite should pass even if example dependencies are not present 2015-03-12 16:57:10 +11:00
Aldo Cortesi
dfc1b39164 Update for latest master of PyInstaller 2015-03-12 13:26:21 +11:00
Maximilian Hils
a8c074054a Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-03-11 13:11:55 +01:00
Maximilian Hils
937eb839ed fix sourcemaps 2015-03-11 13:11:41 +01:00
Maximilian Hils
2f40a6fd78 improve source map generation 2015-03-11 11:13:20 +01:00
Krzysztof Bielicki
244ef243d7 [#514] Add support for ignoring payload params in multipart/form-data 2015-03-10 10:44:06 +01:00
Maximilian Hils
ec4a6ec4e5 Merge pull request #509 from suyash/mitmweb-add-sourcemap-generation
add sourcemap generation for scripts-app-dev task
2015-03-08 21:09:06 +01:00
Wade Catron
803d631f04 Adding a server replay option to ignore host when searching for matching requests 2015-03-08 10:21:57 -07:00
Maximilian Hils
a78eb12e1a Merge remote-tracking branch 'suyash/mitmweb-add-sourcemap-generation' 2015-03-07 01:42:06 +01:00
Maximilian Hils
15a8a93a4e adjust to changed netlib api 2015-03-07 01:39:01 +01:00
Suyash
e47f9738ec add sourcemap generation for scripts-app-dev task 2015-03-07 01:47:50 +05:30
Maximilian Hils
353a6ace47 Merge remote-tracking branch 'legend/master'
Conflicts:
	libmproxy/web/static/app.js
2015-03-06 10:05:12 +01:00
Maximilian Hils
60dc5e0fe3 add mitmweb executable 2015-03-06 10:03:11 +01:00
Maximilian Hils
8c1978b7bf Merge pull request #507 from legendtang/fix_flowactions
fix #506
2015-03-06 10:00:50 +01:00
Legend Tang
de306e6aeb fix #506 2015-03-06 16:54:18 +08:00
Legend Tang
0b57f851bd another clean up for #503 #504 2015-03-06 04:03:52 +08:00
Legend Tang
98c0047b4e clean up for #503 #504 2015-03-06 03:57:38 +08:00
Legend Tang
36db55f662 Replace addListener method with multiple bindings, fix for #503 504 2015-03-06 03:45:58 +08:00
Legend Tang
b903dd4e4a Revert "revert to custom EventEmitter, workaround for #504"
This reverts commit fa8fc64ce0.
2015-03-06 03:29:15 +08:00
Legend Tang
fa8fc64ce0 revert to custom EventEmitter, workaround for #504
It's an EventEmitter issue.
2015-03-06 02:51:57 +08:00
Maximilian Hils
300868edff clean up web builds 2015-03-05 01:52:47 +01:00
Maximilian Hils
4c95c68041 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-03-04 23:07:04 +01:00
Maximilian Hils
f45f3dd4f1 update docs 2015-03-04 23:06:58 +01:00
Maximilian Hils
8f7ba4ab45 Merge pull request #500 from sunu/master
improvement to PR #496
2015-03-04 18:16:19 +01:00
Tarashish Mishra
48023db59e Minor refactor to PR #496 2015-03-04 22:32:01 +05:30
Marcelo Glezer
b49d573c8b sorted timing information by timestamp 2015-03-03 18:38:16 -03:00
Marcelo Glezer
485003511b removed unused parameter 2015-03-03 17:49:47 -03:00
sentient07
ff6bfba4a6 Documentation for the client side certificate is added 2015-03-03 21:32:54 +05:30
Marcelo Glezer
8a672b7955 minor refactor 2015-03-03 00:55:23 -03:00
Marcelo Glezer
f514eacd7a added timing information to FlowDetailView 2015-03-03 00:44:31 -03:00
Marcelo Glezer
58dba3f490 fixed formatting and added a 'test' (sort of) 2015-03-02 23:22:44 -03:00
Marcelo Glezer
91e5a4a4b5 #487 added microsecond support to format_timestamp and used in FlowDetailView. Still WIP. 2015-03-02 18:30:46 -03:00
Marcelo Glezer
8008a4336d Merge pull request #2 from mitmproxy/master
update to mitmproxy/master
2015-03-02 14:37:30 -03:00
Maximilian Hils
e65a8659f0 Merge pull request #489 from tekii/feature-487
added time elapsed between request sent and response received
2015-03-02 14:40:22 +01:00
Maximilian Hils
75ba0a92e4 do some housekeeping 2015-03-02 14:35:50 +01:00
Maximilian Hils
7cf1ec7435 Merge pull request #493 from elitest/master
Adding support for server facing SSL cipher suite specification
2015-03-02 14:25:14 +01:00
elitest
5e07fe08ea Update Server.py to fix SNI handling
Forgot to change ciphers->client_ciphers.
2015-03-02 00:19:06 -06:00
elitest
c6f54605a7 Update Config.py to clarify help messages 2015-03-01 20:49:03 -06:00
elitest
13e74facb6 Update config.py 2015-03-01 20:21:35 -06:00
Jim Shaver
ac92df0fda Un-executable'd setup.py 2015-03-01 20:13:47 -06:00
Jim Shaver
b063d6020f specified cipher_list in a few more locations, added a missing comma 2015-03-01 20:12:27 -06:00
Marcelo Glezer
09828ff2d9 changes requested by @mhils 2015-03-01 22:19:32 -03:00
Maximilian Hils
dff70150f5 Merge pull request #492 from mitmproxy/entrypoints
use entry_points for Windows support
2015-03-02 00:31:42 +01:00
elitest
6a1e294149 Update Server.py to improve cipher selection
Differentiated client ciphers and added server ciphers.
2015-02-28 11:07:18 -06:00
elitest
0b7b0ac33d Update Config.py to improve cipher selection
added support for specifying cipher suites on both sides of the proxy instead of just the one.
2015-02-28 10:16:31 -06:00
Maximilian Hils
eec4c539f2 SSLKEYLOGFILE docs 2015-02-28 03:35:28 +01:00
Maximilian Hils
e1b6cf9401 fix #319 2015-02-27 15:24:27 +01:00
Maximilian Hils
8d975e80ff Merge remote-tracking branch 'sakurai/feature/issue319' 2015-02-27 14:47:50 +01:00
Maximilian Hils
355f9fc407 use entry_points for Windows support 2015-02-27 14:43:23 +01:00
Maximilian Hils
595bde2202 add example inline script for dns spoofing, refs #486 2015-02-27 12:55:16 +01:00
Maximilian Hils
3323b29f10 always include SNI as SAN entry
To be as robust as possible, we include the SNI value always as a Subject
Alternative Name. Second, we make sure that the server address is in the
list as well.
2015-02-27 12:51:06 +01:00
Maximilian Hils
c51a1dbb11 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-02-27 09:17:59 +01:00
Maximilian Hils
81a274eb51 fix #479 2015-02-27 09:17:41 +01:00
Youhei Sakurai
5916767e03 Correct typo; https://github.com/mitmproxy/mitmproxy/issues/319 2015-02-27 10:22:27 +09:00
Youhei Sakurai
10f81e596b Change from checking __call__ to using callable;
https://github.com/mitmproxy/mitmproxy/issues/319
2015-02-27 10:15:07 +09:00
Marcelo Glezer
3a78c95d0a added to flowlist / flowdetail time elapsed between request sent and response received 2015-02-26 18:14:20 -03:00
Youhei Sakurai
1d42c1b3c4 Modify example to notify incompatibility with --stream SIZE command line
option; https://github.com/mitmproxy/mitmproxy/issues/319
2015-02-27 03:17:40 +09:00
Youhei Sakurai
77bb0b74ed Maybe it should work; https://github.com/mitmproxy/mitmproxy/issues/319 2015-02-27 02:44:47 +09:00
Maximilian Hils
bd6c3f64c1 Merge pull request #474 from tekii/feature-426
Feature 426
2015-02-13 23:48:45 +01:00
Marcelo Glezer
010b921a93 added sni and ssl_established=true in ServerConnection. removed check for None value of server_conn in http.py 2015-02-12 13:41:58 -03:00
Marcelo Glezer
71a58289e2 less is more 2015-02-12 01:52:13 -03:00
Marcelo Glezer
fbba6bfe06 added ClientConnection and ServerConnection to new request 2015-02-12 01:42:48 -03:00
Marcelo Glezer
58091b7041 removed useless try except 2015-02-12 01:33:35 -03:00
Marcelo Glezer
16653cc62b fixed typos 2015-02-12 00:31:05 -03:00
Marcelo Glezer
27a1947599 missing str in http.parse_url 2015-02-11 22:03:57 -03:00
Marcelo Glezer
493cecfaf2 renamed add_request to create_request and added a tiny docstring 2015-02-11 16:05:49 -03:00
Marcelo Glezer
1df78f75c5 set sni to None when no server_conn is None 2015-02-10 17:18:23 -03:00
Marcelo Glezer
80da33b2d3 request is absolute 2015-02-10 15:45:11 -03:00
Marcelo Glezer
ba42984b59 added support for creating new requests. still wip (not working for https) 2015-02-10 15:24:21 -03:00
Maximilian Hils
e0c5f86b20 Merge pull request #467 from mitmproxy/clipboard
Clipboard
2015-02-08 22:18:28 +01:00
Maximilian Hils
c9240812d9 fix #468 2015-02-08 13:24:32 +01:00
Maximilian Hils
5d56870818 disable replay from ui for live flows 2015-02-07 19:33:36 +01:00
Maximilian Hils
9a32193005 fix #110 2015-02-07 16:37:59 +01:00
Maximilian Hils
53fadd05f4 fix #451 2015-02-07 16:26:19 +01:00
Maximilian Hils
0d608c1fb3 upgrading packages should not be neccesary on travis 2015-02-07 01:36:45 +01:00
Maximilian Hils
2ed09beae4 fix tests, re-enable pypy, do housekeeping 2015-02-07 01:17:24 +01:00
Maximilian Hils
102183fd23 remove leftovers 2015-02-07 00:36:47 +01:00
Maximilian Hils
65c14724f5 make copy context-sensitive 2015-02-07 00:33:29 +01:00
Maximilian Hils
02e0bad684 improve clipboard UX 2015-02-06 23:32:22 +01:00
Maximilian Hils
17e44db9fd Update README.mkd 2015-02-06 23:13:40 +01:00
Maximilian Hils
c871a12ea4 Merge remote-tracking branch 'tekii/feature-334' 2015-02-06 20:27:50 +01:00
Marcelo Glezer
f49dcb0d91 removed str() cast and changed 'failed copy trying save instead' message 2015-02-06 00:59:05 -03:00
Marcelo Glezer
64c02a16c3 save_flow now uses with, and pyperclip requirement updated to 1.5.8 2015-02-06 00:44:43 -03:00
Maximilian Hils
d67372f9d6 fix tests 2015-02-06 02:25:07 +01:00
Maximilian Hils
70607f9d95 Merge remote-tracking branch 'origin/contributing' 2015-02-06 01:52:07 +01:00
Maximilian Hils
6472942756 fix tests 2015-02-05 17:52:59 +01:00
Maximilian Hils
bed237503a Create CONTRIBUTING.md 2015-02-05 17:52:08 +01:00
Maximilian Hils
f215c3712d fix #459 2015-02-05 17:12:48 +01:00
Maximilian Hils
52d696df3d fix ssl shutdown in tcp mode, refs #464 2015-02-05 16:46:55 +01:00
Marcelo Glezer
1455707eb1 Merge branch 'feature-334' of github.com:tekii/mitmproxy into feature-334 2015-02-05 11:32:01 -03:00
Marcelo Glezer
75cca63b26 added copy to clipboard support for url 2015-02-05 11:31:25 -03:00
Marcelo Glezer
ae83d39eba added support for 'b' key in flowlist 2015-02-05 11:31:25 -03:00
Marcelo Glezer
9fc68d320c added support for copying request (content|header) to clipboard 2015-02-05 11:31:24 -03:00
Marcelo Glezer
3bcf0cbba8 used save_body from common when b key is pressed 2015-02-05 11:31:24 -03:00
Marcelo Glezer
8f66fe1bfc added support for saving file if content is binary. still wip 2015-02-05 11:31:24 -03:00
Marcelo Glezer
c57efffe01 extracted server_copy_response to common 2015-02-05 11:31:24 -03:00
Marcelo Glezer
f21a44dd48 removed pyperclip hard dependencies 2015-02-05 11:31:24 -03:00
Marcelo Glezer
8e1f260150 trying to fix travis take 2 2015-02-05 11:31:24 -03:00
Marcelo Glezer
470d8e925a trying to fix travis 2015-02-05 11:31:24 -03:00
Marcelo Glezer
d9f562b5c0 used get_decoded_content and removed decode call from headers as max suggested 2015-02-05 11:31:24 -03:00
Marcelo Glezer
1a06f15ee0 added copy functionality to flowview too 2015-02-05 11:31:24 -03:00
Marcelo Glezer
fdd012bdd8 removed invalid comment and unneeded safe text 2015-02-05 11:31:24 -03:00
Marcelo Glezer
ee75a0b9cb now content and header are working and exception for binary files are handled correctly 2015-02-05 11:31:24 -03:00
Marcelo Glezer
f89a5235d3 wip - content copy is working, header representation is not 2015-02-05 11:31:24 -03:00
Marcelo Glezer
4a481814f6 added pyperclip dependency 2015-02-05 11:31:24 -03:00
Marcelo Glezer
5cbdd21a4b Merge remote-tracking branch 'base/master' 2015-02-05 11:29:53 -03:00
Marcelo Glezer
17ee88e07e Merge remote-tracking branch 'base/master' 2015-02-05 11:25:22 -03:00
Maximilian Hils
310fb18aac fix #464 2015-02-05 15:24:32 +01:00
Maximilian Hils
0ac3227b7b clean up flow reading 2015-02-05 14:44:45 +01:00
Marcelo Glezer
a86446e204 Merge remote-tracking branch 'base/master' into feature-334 2015-02-05 10:36:30 -03:00
Marcelo Glezer
5e2f440cdd Merge remote-tracking branch 'base/master' 2015-02-05 10:34:26 -03:00
Maximilian Hils
19555bb39a Merge remote-tracking branch 'tekii/master' 2015-02-05 14:20:22 +01:00
Maximilian Hils
965cfffa5e fix statusbar initialization 2015-02-05 14:15:26 +01:00
Maximilian Hils
b7ae4b0a4c Merge pull request #447 from tekii/server-replay-missing-args
missing parameter in start_server_playback call (again)
2015-02-05 14:11:19 +01:00
Marcelo Glezer
82d8c93261 added copy to clipboard support for url 2015-02-03 15:41:09 -03:00
Marcelo Glezer
e5922ae30a added support for 'b' key in flowlist 2015-01-16 13:08:25 -03:00
Marcelo Glezer
d80e2e2b2b added support for copying request (content|header) to clipboard 2015-01-16 12:13:55 -03:00
Marcelo Glezer
7ba7d64bac used save_body from common when b key is pressed 2015-01-15 12:57:00 -03:00
Marcelo Glezer
affb57ed08 added support for saving file if content is binary. still wip 2015-01-15 12:37:26 -03:00
Marcelo Glezer
b77cd1af60 extracted server_copy_response to common 2015-01-15 09:36:59 -03:00
Marcelo Glezer
0a2d2d9390 removed pyperclip hard dependencies 2015-01-15 08:46:56 -03:00
Marcelo Glezer
c97fe68230 trying to fix travis take 2 2015-01-14 16:48:49 -03:00
Marcelo Glezer
95f0b4b506 trying to fix travis 2015-01-14 16:44:59 -03:00
Marcelo Glezer
6b8fb147d0 used get_decoded_content and removed decode call from headers as max suggested 2015-01-14 14:45:19 -03:00
Marcelo Glezer
d49eafad8b added copy functionality to flowview too 2015-01-14 12:36:19 -03:00
Marcelo Glezer
36ec20bbb8 removed invalid comment and unneeded safe text 2015-01-14 12:09:14 -03:00
Marcelo Glezer
a4bfa677e9 now content and header are working and exception for binary files are handled correctly 2015-01-14 12:03:40 -03:00
Marcelo Glezer
34d355a62b wip - content copy is working, header representation is not 2015-01-14 10:52:52 -03:00
Marcelo Glezer
44a5070bf5 added pyperclip dependency 2015-01-13 23:18:28 -03:00
Marcelo Glezer
8e57597d22 missing parameter in start_server_playback call 2015-01-13 08:16:00 -03:00
Marcelo Glezer
4f578866fa open flow files using with as max suggested 2015-01-12 14:31:18 -03:00
Marcelo Glezer
c4aeca2764 Merge remote-tracking branch 'base/master' 2015-01-12 12:58:33 -03:00
Maximilian Hils
e089061996 Merge pull request #445 from tekii/hotfix-start-server-playback
hotfix to mitmproxy missing start_server_playback() parameter added.
2015-01-12 16:55:21 +01:00
Marcelo Glezer
9553ca0ed4 hotfix to mitmproxy missing start_server_playback() parameter added. backported from PR [#439] 2015-01-12 12:49:23 -03:00
Marcelo Glezer
27950f1972 Merge remote-tracking branch 'base/master' 2015-01-12 10:55:47 -03:00
Maximilian Hils
e18294437c document choice of timeout value, refs #443 2015-01-09 17:17:12 +01:00
Maximilian Hils
40c28b79d1 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2015-01-09 16:40:32 +01:00
Maximilian Hils
8af26bd0b7 fix #443 2015-01-09 16:40:26 +01:00
Maximilian Hils
dcc248797f Merge pull request #442 from nickhs/441
Error to stdout when loading bad replays from the command line
2015-01-09 00:39:36 +01:00
Nick HS
3dcba41d6d Error to stdout when loading bad replays from the command line 2015-01-08 13:56:19 -05:00
Maximilian Hils
72690f2864 Merge pull request #440 from michaeljau/patch-2
Updated inlinescripts.html - changed "libmproxy.certutils.SSLCert" to "netlib.certutils.SSLCert"
2015-01-07 22:08:54 +01:00
michaeljau
b39ea74bb6 Update inlinescripts.html
I updated the certutils.SSLCert reference from "libmproxy.certutils.SSLCert" to "netlib.certutils.SSLCert".
2015-01-07 22:20:05 +08:00
Marcelo Glezer
30213d6370 now mitmproxy supports multiple saved flows files too. also fixed server_play_back start with mitmproxy (missing parameter) 2015-01-06 15:49:49 -03:00
Marcelo Glezer
9695377b28 first steps in scenario support 2015-01-05 18:12:38 -03:00
Aldo Cortesi
812ea90dc5 Pin browserify to most recent version that works
Issue being tracked here:

https://github.com/substack/node-browserify/issues/1044
2015-01-04 11:42:41 +13:00
Aldo Cortesi
876e5ca683 Ditch old gulpfile 2015-01-03 11:53:24 +13:00
Aldo Cortesi
1959aebc08 Add PEG support to gulpfile
- Extract conf - all project specific conf outside gulpfile
- Generalize filt.js exports, add required imports
2015-01-03 11:46:51 +13:00
Aldo Cortesi
f1b040e808 Fix unit tests 2015-01-02 16:12:25 +13:00
Aldo Cortesi
80339aef93 Unit test framework for web client-side code
- Also make formatSize nicer and test it.

Now there's no excuse! ;)
2015-01-02 15:29:51 +13:00
Aldo Cortesi
b14b4ace25 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-01-02 13:42:56 +13:00
Aldo Cortesi
bb5fb2dbe0 Clean up har_extractor example
- Fix spacing, line length, unused imports, unusual import idioms
- Prevent it from barfing into our test output
2015-01-02 13:42:43 +13:00
Aldo Cortesi
1b5f5021dc Consolidate reading flows from file, use in mitmweb. 2015-01-02 13:26:22 +13:00
Maximilian Hils
c152e5da1a we do not support https2http in upstream proxy mode 2015-01-01 22:07:49 +01:00
Aldo Cortesi
4d01e22f26 components/utils.js -> common.js
Too many utils modules makes things confusing. These are more "common
components" or "common mixins" than utils anyway.
2015-01-01 20:49:32 +13:00
Aldo Cortesi
866a408120 Make header more compact
- Remove title bar
- File -> mitmproxy - ultimately our logo can go here
2015-01-01 20:44:45 +13:00
Aldo Cortesi
4506bafddc Use Facebook's dispatcher 2015-01-01 16:59:58 +13:00
Aldo Cortesi
b09dbbe209 Replace custom EventEmitter with one from browserify 2015-01-01 16:41:45 +13:00
Aldo Cortesi
fa77fba37c Remove unused files 2015-01-01 15:39:24 +13:00
Aldo Cortesi
c9ce5094c8 All files and only files in in js/components are jsx
So remove the redundant naming
2015-01-01 15:37:42 +13:00
Aldo Cortesi
67f6f67c48 More browesrification. 2014-12-31 18:14:17 +13:00
Aldo Cortesi
2152d4dd92 More conversions to browserify 2014-12-30 22:12:26 +13:00
Aldo Cortesi
b847faf37f Fix fonts, stylesheets, add much more flexible bootstrap over-rides. 2014-12-30 22:02:55 +13:00
Aldo Cortesi
bc8687deb5 Basic conversion: browserified web app now works. 2014-12-30 21:51:07 +13:00
Aldo Cortesi
d2c7411f06 Start moving to new gulpfile, browerify, etc. 2014-12-30 21:07:00 +13:00
Aldo Cortesi
e9d8586f6b Bump for next dev iteration 2014-12-30 11:26:45 +13:00
Aldo Cortesi
089c5fd948 Bump version 2014-12-30 10:02:45 +13:00
Maximilian Hils
333688b06e Merge branch 'master' of github.com:mitmproxy/mitmproxy 2014-12-29 14:56:47 +01:00
Maximilian Hils
51671b22a0 fix #435 2014-12-29 14:56:35 +01:00
Maximilian Hils
ad973de0b3 fix mitmproxy -w 2014-12-29 14:40:34 +01:00
Aldo Cortesi
55970bf0cc Minor tweaks to release checlist and binary builds 2014-12-29 12:45:38 +13:00
Aldo Cortesi
f78451dbbe Add netlib and libpathod as excludes in MANIFEST.in
These are commonly symlinked during dev
2014-12-28 23:28:35 +13:00
Aldo Cortesi
84f57a2832 Adjust how doc rendering uses mitmproxy source location
We now make sure our imports come from here too, and that we have mod cons like
tilde expansion in the env variable.
2014-12-28 23:16:50 +13:00
Aldo Cortesi
7f5965225d CHANGELOG 2014-12-28 23:16:44 +13:00
Aldo Cortesi
d33d125214 Documentation for config files 2014-12-28 22:35:14 +13:00
Aldo Cortesi
e4f510685e Generalize binary building, add static resources, add spec files for mitmproxy, mitmdump and mitmweb
We're now ready to use the same script (more or less) to build Windows
binaries.
2014-12-28 17:39:44 +13:00
Aldo Cortesi
0cc8c44c22 Minor improvements to osx binary build process
- Add --shortversion on tools to make packaging easier
- Automate tarfile generation
2014-12-28 15:07:44 +13:00
Aldo Cortesi
ab06c2436b Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2014-12-27 23:08:56 +13:00
Aldo Cortesi
8a8437470e Move onboarding app to Tornado
Two reasons for this. First, this removes flask and its dependencies, which are
quite sizeable. Second, pyinstaller now barfs on simplejson, which is a Flask
dependency. I just don't have time to fix this upstream, so doing what we
should be doing anyway is a no-brainer.
2014-12-27 23:06:51 +13:00
Maximilian Hils
3e63107e94 web: integrate filter docs 2014-12-26 03:10:24 +01:00
Maximilian Hils
1f454b577f web: CSP, revert functionality, serve content 2014-12-25 16:10:47 +01:00
Maximilian Hils
7d793ae162 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2014-12-25 13:38:34 +01:00
Maximilian Hils
4cfa91a903 web: show mitmproxy version 2014-12-25 02:08:58 +01:00
Maximilian Hils
7ed6f10e35 web: much ui work, such christmas 2014-12-25 02:03:55 +01:00
Maximilian Hils
d0ab553bd0 travis: oftc seems to require channel join 2014-12-24 15:50:23 +01:00
Maximilian Hils
b744dd5be0 travis: don't join irc channel 2014-12-24 15:34:58 +01:00
Maximilian Hils
bd1c04ac56 travis: cache pypy 2014-12-24 02:32:34 +01:00
Maximilian Hils
c3193b361e travis tests 2014-12-24 02:17:45 +01:00
Maximilian Hils
4b94c7cf15 bump version, update release checklist 2014-12-24 02:03:14 +01:00
Maximilian Hils
478051f980 enable travis caching 2014-12-24 01:56:46 +01:00
Maximilian Hils
f265cff3a9 fix tests, experimental travis speedup 2014-12-24 01:39:38 +01:00
Maximilian Hils
1c4f4c2494 web: duplicate, delete, replay flows 2014-12-24 01:07:57 +01:00
Maximilian Hils
b1311faa68 web: move eventlog state out of settings 2014-12-23 23:23:25 +01:00
Maximilian Hils
4767b83726 fix gzipped body edit 2014-12-23 23:14:55 +01:00
Maximilian Hils
2861d99de4 web: intercept feature 2014-12-23 20:33:42 +01:00
Maximilian Hils
459772a8ef web: squash bugs 2014-12-23 01:26:03 +01:00
Maximilian Hils
b55d584309 web: simpler filter ui 2014-12-23 01:13:34 +01:00
Maximilian Hils
d5e16d7cf1 simplify code 2014-12-23 00:30:35 +01:00
Maximilian Hils
72ab44ef54 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2014-12-23 00:15:08 +01:00
Maximilian Hils
ebae1ebe5d Merge pull request #432 from tekii/master
--replay_ignore_payload_params added, to filter params in form posts
2014-12-23 00:14:32 +01:00
Maximilian Hils
d2471592d2 highlight ui: complicated version 2014-12-22 23:40:24 +01:00
Marcelo Glezer
7e1b35bfc7 --replay_ignore_payload_params added, to filter params in form posts 2014-12-18 17:56:27 -03:00
Maximilian Hils
120ab5c4cd fix #427, tolerate servers that reject connections without SNI 2014-12-15 13:02:47 +01:00
Maximilian Hils
4e635d7a6f allow specification of SSL version, only allow TLS1.0+ by default 2014-12-15 12:46:13 +01:00
Maximilian Hils
955c5c87a2 web: filter/highlight ui, many fixes 2014-12-13 01:56:04 +01:00
Maximilian Hils
a09eb2bef4 add filter descriptions 2014-12-12 22:41:10 +01:00
Maximilian Hils
3b55889310 web: disable autoscroll at top 2014-12-12 19:43:55 +01:00
Maximilian Hils
588d6dbe22 web: filtering 2014-12-12 19:33:06 +01:00
Maximilian Hils
5ccae48b92 web: fight against react-router 2014-12-12 19:19:00 +01:00
Maximilian Hils
cb45296377 web: implement filters 2014-12-12 17:49:10 +01:00
Aldo Cortesi
01fa5d3f07 Merge pull request #414 from mitmproxy/flowviews2
Flowviews2
2014-12-12 22:08:15 +13:00
Maximilian Hils
93d4a0132a Merge pull request #425 from tekii/master
append option added to dump (flow file is open in append mode instead of overwrite)
2014-12-11 22:26:21 +01:00
Marcelo Glezer
14a3e0073f append file mode for saving flows merged to master 2014-12-11 15:21:33 -03:00
Marcelo Glezer
4952643a0d Merge remote-tracking branch 'base/master' 2014-12-11 14:54:14 -03:00
Maximilian Hils
dbb51640d9 web: add filter grammar 2014-12-11 16:35:50 +01:00
Maximilian Hils
93e928dec4 web: add file menu stub 2014-12-10 17:44:45 +01:00
Maximilian Hils
7e40b8ab09 web: implement settings store, modularize store 2014-12-10 15:25:40 +01:00
Maximilian Hils
d2feaf5d84 web: take viewport resize into account 2014-12-10 02:48:04 +01:00
Maximilian Hils
e12bf19e35 web: add event store, fix all those bugs 2014-12-10 00:47:05 +01:00
Maximilian Hils
05bc7e8cd8 generalize store 2014-12-09 18:55:16 +01:00
Maximilian Hils
14a8d2f5b8 always use the app dispatcher 2014-12-09 18:18:14 +01:00
Maximilian Hils
ffb95a1db7 fix #304 2014-12-09 00:01:01 +01:00
Maximilian Hils
b95f0c9971 fix #411 2014-12-08 17:17:37 +01:00
Maximilian Hils
31925dc9be fix #419 2014-12-08 17:01:47 +01:00
Maximilian Hils
591ed0b41f fix HTTPResponse creation 2014-12-04 00:29:15 +01:00
Maximilian Hils
a7a9ef826c fix tests 2014-12-01 03:36:04 +01:00
Maximilian Hils
40fbb95701 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2014-12-01 03:05:11 +01:00
Maximilian Hils
5b1fefee9b add inline script example for websocket passthrough, fix #340 2014-12-01 03:04:48 +01:00
Maximilian Hils
992536c2bc make header processing configurable by inline scripts, refs #340 2014-12-01 02:28:03 +01:00
Maximilian Hils
807d0b9a5d Merge pull request #416 from elimisteve/patch-1
README: Fixed double-quote and whitespace issues
2014-11-29 15:33:14 +01:00
Steve Phillips
3b03758ef8 README: Fixed double-quote and whitespace issues 2014-11-29 04:13:29 -08:00
Maximilian Hils
096a3af273 web: various improvements 2014-11-29 03:25:07 +01:00
Maximilian Hils
f6c0e000da event log: virtual scrolling 2014-11-28 20:54:52 +01:00
Maximilian Hils
dd1a45140c web: add virtualscroll mixin 2014-11-28 20:03:04 +01:00
Maximilian Hils
38621f2d49 Merge pull request #415 from gabe-k/flowbasic-fix
Changed argument name from confdir to cadir in flowbasic example
2014-11-28 19:48:26 +01:00
Maximilian Hils
c39b6e4277 web: various fixes, add clear button 2014-11-28 19:16:47 +01:00
Gabriel Kirkpatrick
cf7404cfe0 Changed argument name from confdir to cadir in flowbasic example 2014-11-28 12:36:31 -05:00
Maximilian Hils
56f1278d1a fix #413 2014-11-28 17:52:54 +01:00
Maximilian Hils
7ca1ac0f3b web: virtual scrolling 2014-11-28 16:03:56 +01:00
Maximilian Hils
9eecc8d6e2 web: fixes 2014-11-27 02:34:03 +01:00
Maximilian Hils
e41c0be293 format code 2014-11-27 01:40:26 +01:00
Maximilian Hils
38bf34ebd9 web++ 2014-11-27 01:38:30 +01:00
Maximilian Hils
021e209ce0 web: update dependencies 2014-11-27 01:37:36 +01:00
Maximilian Hils
3887e7ed29 fix error html 2014-11-26 04:56:17 +01:00
Maximilian Hils
ed8249023f introduce revised views, port over changes from multiple_views branch 2014-11-26 04:18:21 +01:00
Maximilian Hils
47a78e3c72 fix limit_txt, fix #412 2014-11-23 15:46:17 +01:00
Maximilian Hils
f7c5385679 retain raw filter str on filt objects 2014-11-22 15:27:43 +01:00
Maximilian Hils
ec23594191 add sni support to LiveConnection.change_server 2014-11-19 01:27:20 +01:00
Maximilian Hils
667fe0c20b fix tests 2014-11-15 23:10:25 +01:00
Maximilian Hils
a699bdc286 Merge pull request #410 from JustusW/master
Added HAR generation as inline script
2014-11-15 22:45:28 +01:00
Justus Wingert
ddce662fe6 Added try/except block for import errors with harparser and pytz. 2014-11-15 22:39:15 +01:00
Justus Wingert
c84ad384f6 Updated setup.py and moved requirements to examples section. Included examples section in requirements.txt. Updated har_extractor to use command line arguments. 2014-11-15 22:37:32 +01:00
Justus Wingert
a7ab06d80e Switched to pytz. Added comment for clarification on behaviour of HAREncodable. Added missing parameter in reset(). Fixed accessing headers. 2014-11-15 22:04:52 +01:00
Justus Wingert
4227feef37 It seems get_decoded_content can actually be shorter than content due to encoding issues. Since I'm not crazy after all it seems safe to push. 2014-11-15 21:14:50 +01:00
Justus Wingert
4342d79dc0 Removed the globals and replaced them with internal attributes of _HARLog. Minor bugfixes to make ssl timings work. 2014-11-15 20:11:25 +01:00
Justus Wingert
31249b9e24 Hopefully fixed dependency fuckup. 2014-11-15 19:28:10 +01:00
Justus Wingert
57d9807122 Added script dependencie to harparser. 2014-11-15 19:05:36 +01:00
Justus Wingert
18b803d03a Typo... 2014-11-15 18:45:28 +01:00
Justus Wingert
f3a78d4795 Improved helper method, marginally. 2014-11-15 18:41:51 +01:00
Justus Wingert
fd48a70128 Updated documentation and cleaned up the code. 2014-11-15 18:38:59 +01:00
Aldo Cortesi
aa77a52a06 One common --version flag 2014-11-15 17:58:38 +13:00
Aldo Cortesi
23a4f159fd Remove last vestiges of argparse 2014-11-15 17:51:21 +13:00
Aldo Cortesi
5af7c9ebf4 Exclude main.py from coverage analysis 2014-11-15 17:47:39 +13:00
Aldo Cortesi
7d76f3e992 Make sure all command-line arguments have a long form
... so they can be used in config files
2014-11-15 17:41:04 +13:00
Aldo Cortesi
09c503563a Enable config file parsing
We support 4 different config files:

~/.mitmproxy/common.conf:       Options that are common to all tools
~/.mitmproxy/mitmproxy.conf:    Options for mitmproxy
~/.mitmproxy/mitmdump.conf:     Options for mitmdump
~/.mitmproxy/mitmweb.conf:      Options for mitmweb

Options in the tool-specific config files over-ride options in common.conf. If
a non-common option is put in common.conf, an error will be raised if a
non-supporting tool is used.
2014-11-15 17:25:05 +13:00
Aldo Cortesi
6c1dc4522d Refactor command-line argument definition
- Argument definitions live in cmdline.py
- Parsing and initial processing lives in main.py
2014-11-15 16:29:38 +13:00
Aldo Cortesi
9c88622e25 Adjust tests 2014-11-15 16:17:05 +13:00
Aldo Cortesi
0906ee94ac Remove sortedcontainers from deps - we don't use it 2014-11-15 16:14:59 +13:00
Aldo Cortesi
24c4df07e3 First-order integration of configargparser to add config file support 2014-11-15 16:14:08 +13:00
Aldo Cortesi
645a4a0c04 Some additions to the release checklist 2014-11-15 15:47:00 +13:00
Justus Wingert
acce67e1fd Initial checkin with har_extractor script. 2014-11-15 03:34:39 +01:00
Maximilian Hils
c7a96b2fb1 always show error messages 2014-11-15 00:52:26 +01:00
Aldo Cortesi
4c2e87638a Changelog, plus fix date of previous release 2014-11-15 12:49:21 +13:00
Maximilian Hils
afc6ef99ea bump version 2014-11-14 16:18:05 +01:00
Maximilian Hils
be449b7129 fix #409 2014-11-14 16:13:45 +01:00
Maximilian Hils
0c52b4e3b9 handle script hooks in replay, fix tests, fix #402 2014-11-14 00:26:22 +01:00
Maximilian Hils
9b5a8af12d fix grideditor bug 2014-11-14 00:21:47 +01:00
Maximilian Hils
8cbb67ac70 docs++ 2014-11-13 23:03:06 +01:00
Maximilian Hils
a325ae638b fix tests 2014-11-11 13:09:05 +01:00
Maximilian Hils
2335d00c1c Merge branch 'master' of github.com:mitmproxy/mitmproxy 2014-11-11 12:30:56 +01:00
Maximilian Hils
f19ee74b99 be more explicit about requirements 2014-11-11 12:30:51 +01:00
Aldo Cortesi
5873516d99 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2014-11-11 14:00:56 +13:00
Aldo Cortesi
ec17e70d9e Remove entry points in favor of vanilla scripts, fix test-release 2014-11-11 14:00:28 +13:00
Maximilian Hils
6f3b4eee3c fix clear key 2014-11-10 17:35:28 +01:00
Maximilian Hils
807a8eb759 Merge pull request #403 from Lucas-C/master
Using uppercase C to 'clear' display mode, because lowercase 'c' is used for css
2014-11-10 17:32:06 +01:00
Maximilian Hils
cece3700df fix #402 2014-11-10 17:11:36 +01:00
Maximilian Hils
476d7da17c update change_upstream_proxy example 2014-11-10 15:51:26 +01:00
Lucas Cimon
6f5883a4d1 Using uppercase C to 'clear' display mode, because lowercase 'c' is used for css 2014-11-07 17:02:29 +01:00
Maximilian Hils
4d090e09c7 fix tests 2014-11-07 09:59:11 +01:00
Maximilian Hils
c3ec551546 fix #401 2014-11-07 09:52:46 +01:00
Aldo Cortesi
5025bf872c Minor doc adjustments 2014-11-07 16:32:46 +13:00
Maximilian Hils
dc142682cb fix #399 2014-11-06 11:25:03 +01:00
Aldo Cortesi
a2a87695d3 Reduce loop timeouts to improve mitmproxy responsiveness
Fixes #384
2014-11-06 10:51:30 +13:00
Aldo Cortesi
0fe83ce87b Fix bug in flow dumping, add unit test that should have caught this in the first place 2014-11-06 10:35:00 +13:00
Aldo Cortesi
e732771c1c We don't need requests for mitmproxy 2014-11-05 09:57:09 +13:00
Aldo Cortesi
34d419ead8 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2014-11-04 10:22:13 +13:00
Aldo Cortesi
d0de490ef1 Release prep: binaries build script, release checklist, fuzzing 2014-11-02 18:04:57 +13:00
Maximilian Hils
8522c6ebd6 Merge pull request #393 from onlywade/master
Fixing issue #392, adding tests.
2014-11-01 18:07:32 +01:00
Wade 524
c4c42fa040 Updating OPTIONS test with related issue number. 2014-10-31 12:45:31 -07:00
Wade 524
ce18cd8ba4 Fixing issue #392. 2014-10-31 11:50:03 -07:00
Wade 524
2c64b90a3d Adding some test coverage for handling HTTP OPTIONS requests. 2014-10-31 11:49:45 -07:00
Maximilian Hils
3b0964f365 fix #391 2014-10-30 17:38:23 +01:00
Aldo Cortesi
340d0570bf Legibility 2014-10-26 18:32:45 +13:00
Aldo Cortesi
16654ad6a4 Fix crash while streaming
Found using fuzzing. Reproduction with pathoc, given "mitmproxy -s" and
pathod running on 9999:

get:'http://localhost:9999/p/':s'200:b\'foo\':h\'Content-Length\'=\'3\'':i58,'\x1a':r

 return flow.FlowMaster.run(self)
   File "/Users/aldo/mitmproxy/mitmproxy/libmproxy/controller.py", line 111, in run
     self.tick(self.masterq, 0.01)
   File "/Users/aldo/mitmproxy/mitmproxy/libmproxy/flow.py", line 613, in tick
     return controller.Master.tick(self, q, timeout)
   File "/Users/aldo/mitmproxy/mitmproxy/libmproxy/controller.py", line 101, in tick
     self.handle(*msg)
   File "/Users/aldo/mitmproxy/mitmproxy/libmproxy/controller.py", line 118, in handle
     m(obj)
   File "/Users/aldo/mitmproxy/mitmproxy/libmproxy/flow.py", line 738, in handle_responseheaders
     self.stream_large_bodies.run(f, False)
   File "/Users/aldo/mitmproxy/mitmproxy/libmproxy/flow.py", line 155, in run
     r.headers, is_request, flow.request.method, code
   File "/Users/aldo/mitmproxy/mitmproxy/netlib/http.py", line 401, in expected_http_body_size
     raise HttpError(400 if is_request else 502, "Invalid content-length header: %s" % headers["content-length"])
 netlib.http.HttpError: Invalid content-length header: ['\x1a3']
2014-10-26 17:58:36 +13:00
Aldo Cortesi
7aee9a7c31 Spacing and legibility 2014-10-26 17:44:49 +13:00
Aldo Cortesi
efd6fdb0e2 Start a fuzzing architecture for mitmproxy 2014-10-26 17:13:25 +13:00
Maximilian Hils
35075a31a8 Merge pull request #387 from onlywade/master
Fixing issue #368.
2014-10-25 14:39:48 +02:00
Wade 524
1ef74cf294 Fixing issue #368. 2014-10-24 15:54:51 -07:00
Maximilian Hils
77c9f64526 Merge branch 'master' of github.com:mitmproxy/mitmproxy
Conflicts:
	doc-src/modes.html
2014-10-23 16:17:03 +02:00
Maximilian Hils
4bf07d8aa5 fix typo 2014-10-23 16:15:38 +02:00
Maximilian Hils
bbee391a47 update proxy modes diagrams 2014-10-23 16:14:04 +02:00
Aldo Cortesi
6bed076460 Document http2https and https2http 2014-10-23 16:13:03 +13:00
Aldo Cortesi
6aa05df944 Correct docs - we no longer support change of basic proxy mode in the console app 2014-10-23 15:50:43 +13:00
Aldo Cortesi
32127f80e2 More refactoring of installation docs
- Make it clear that README.md only has the hacking installation
instructions
- Beef up install.html
2014-10-23 15:43:06 +13:00
Aldo Cortesi
5aace7eed8 Keep sidebar ordering alphabetical, add SOCKS documentation 2014-10-23 15:05:01 +13:00
Aldo Cortesi
6fcd1d0ed9 CHANGELOG and CONTRIBUTORS 2014-10-23 14:38:12 +13:00
Aldo Cortesi
4da90724a0 First redraft of modes documentation 2014-10-23 12:56:31 +13:00
Aldo Cortesi
05590cf6c2 Documentation re-org
- No longer using README.md in the rendered documentation.
- Rendered doc instrutions are now for the released version of
mitmproxy, with dev install instructions in the README.md
2014-10-23 09:44:47 +13:00
Maximilian Hils
c79bdeb4e5 fix #346 2014-10-22 14:03:19 +02:00
Maximilian Hils
3848a27d31 fix #378 2014-10-22 13:59:47 +02:00
Maximilian Hils
6cef6fbfec tweak SSL detection heuristics 2014-10-21 15:08:39 +02:00
Maximilian Hils
37cc6ae0bb fix race conditions in tests 2014-10-19 01:26:08 +02:00
Maximilian Hils
e114858438 add generic tcp proxying, fix #374 2014-10-18 18:29:35 +02:00
Maximilian Hils
52b29d4926 remove default_ca 2014-10-18 15:26:10 +02:00
Maximilian Hils
d7341e7798 add test case for #375 2014-10-17 17:08:41 +02:00
Maximilian Hils
d0809a210b fix cert forwarding 2014-10-09 02:47:32 +02:00
Maximilian Hils
7c56a3bb01 Add SOCKS5 mode, fix #305 2014-10-09 01:59:02 +02:00
Maximilian Hils
ff366d152e Merge branch 'cert_chains' 2014-10-09 00:51:21 +02:00
Maximilian Hils
5b33f78961 add mini documentation 2014-10-09 00:49:11 +02:00
Maximilian Hils
f04693c047 fix typo 2014-10-08 21:41:03 +02:00
Maximilian Hils
d5c318b070 fix support for chained certificates 2014-10-08 20:44:52 +02:00
Maximilian Hils
76bd554cd1 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2014-10-07 17:28:13 +02:00
Marcelo Glezer
83b1d4e0e0 Merge pull request #1 from mitmproxy/master
Merge pull request #371 from tekii/master
2014-10-06 00:08:07 -03:00
Maximilian Hils
5acc507fdb Merge pull request #371 from tekii/master
--replay-ignore-content & --replay-ignore-param ported from branch 0.10
2014-10-04 14:12:18 +02:00
Marcelo Glezer
81f5636389 --replay-ignore-content & --replay-ignore-param ported from branch 0.10 2014-10-03 07:29:44 -03:00
Maximilian Hils
6ce6b1ad69 replay: carry over SNI value 2014-10-02 00:58:40 +02:00
Maximilian Hils
38218f4ccc Merge pull request #369 from mitmproxy/dist
improve distribution
2014-10-01 21:23:54 +02:00
Maximilian Hils
c2634476e5 update MANIFEST.in 2014-10-01 21:12:12 +02:00
Maximilian Hils
e2ee41e764 distutils -> setuptools 2014-10-01 20:41:58 +02:00
Maximilian Hils
4167713cc0 fix timestamp formatting: end_time may not be set 2014-09-22 17:01:06 +02:00
Maximilian Hils
45f39c2380 beef up event log 2014-09-22 03:06:19 +02:00
Maximilian Hils
84e2a028c2 web: perf improvements 2014-09-22 01:44:46 +02:00
Maximilian Hils
9cda2eb3a3 web: various improvements 2014-09-21 23:43:27 +02:00
Maximilian Hils
60cec1f9b6 clean up timestamp handling 2014-09-21 22:46:48 +02:00
Maximilian Hils
aa6856786b web: minor fixes 2014-09-20 00:25:40 +02:00
Maximilian Hils
818c5918b6 web: display flow connection info 2014-09-19 17:56:54 +02:00
Maximilian Hils
b5e727da88 web: flow icons 2014-09-19 01:57:50 +02:00
Maximilian Hils
b0374710e4 start to fill detailpane 2014-09-19 01:35:36 +02:00
Maximilian Hils
390a435ac4 basic splitter -> kick-ass splitter 2014-09-18 23:47:54 +02:00
Maximilian Hils
e66f240e81 add splitter 2014-09-18 23:22:02 +02:00
Maximilian Hils
d1ba150ea7 web: detailpane impl 2014-09-18 21:13:50 +02:00
Maximilian Hils
01da54f1c3 fix #361 2014-09-18 03:56:35 +02:00
Maximilian Hils
0d64cc9327 flowtable: add selection indicator, add keyboard navigation 2014-09-18 02:22:10 +02:00
Maximilian Hils
6a161be6b4 .jsx -> .jsx.js
Rename jsx files to be compatible with Chrome Dev Tools and
Workspace Mapping.
2014-09-18 00:01:45 +02:00
Maximilian Hils
b99de36b24 undo spriting 2014-09-17 23:59:39 +02:00
Maximilian Hils
4ca720b556 add features to the traffic table, introduce image spriting 2014-09-17 21:14:55 +02:00
Maximilian Hils
102bd07568 implement FlowStore basics 2014-09-17 17:30:19 +02:00
Maximilian Hils
8245dd19f4 connect eventlog events to ui 2014-09-17 15:22:42 +02:00
Aldo Cortesi
b4ecd96beb Introduce short form object state, and connect the ends to send data to web app 2014-09-17 13:58:56 +12:00
Maximilian Hils
51db9a5612 formatting 2014-09-17 02:13:37 +02:00
Aldo Cortesi
d998790c2f Clean up and clarify StateObject
- Flatten the class hierarchy
- get_state, load_state, from_state are public
- Simplify code
- Remove __eq__ and __neq__. This fundamentally changes the semantics of
inherited objects in a way that's not part of the core function of the
class
2014-09-17 11:41:42 +12:00
Aldo Cortesi
b9531ac89b Whitespace & formatting 2014-09-17 09:54:17 +12:00
Aldo Cortesi
f7da58ca9b Basic websocket connection, code cleanup. 2014-09-17 09:40:25 +12:00
Maximilian Hils
4f56b76b2c fix flow detail display 2014-09-16 15:36:26 +02:00
Aldo Cortesi
bfef9b4940 Slightly more verbose gulping, remove strict declarations for now. 2014-09-16 21:41:49 +12:00
Aldo Cortesi
e4ee3e0236 Convert to ES5 inheritance pattern 2014-09-16 21:06:30 +12:00
Aldo Cortesi
6efe1aa6a9 We're not ready for ES6
Lets re-evaluate in June next year when it's actually released
2014-09-16 16:27:09 +12:00
Maximilian Hils
6bac1540bd ignore compiled files in diff 2014-09-16 01:05:29 +02:00
Maximilian Hils
674bc4273e format javascript 2014-09-16 00:56:43 +02:00
Maximilian Hils
acdd182754 web: implement EventLogStore 2014-09-16 00:05:06 +02:00
Maximilian Hils
1d9b1f79a1 web: eventlog ui 2014-09-15 18:39:25 +02:00
Maximilian Hils
cbf18320cd client-side structure 2014-09-15 18:08:26 +02:00
Aldo Cortesi
9f8d2eea64 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2014-09-15 12:38:49 +12:00
Aldo Cortesi
563078df24 Client-side cleanup
- Remove grunt
- Formatting and spacing. There shall be 4 spaces in a tab. Not 3. Not
5. And 2 is right out.
2014-09-15 12:37:52 +12:00
Maximilian Hils
5a59fef57f fix bugs 2014-09-15 00:59:21 +02:00
Maximilian Hils
2cefd05be9 fix missing timeout parameter 2014-09-14 21:08:28 +02:00
Maximilian Hils
80af3589e2 docs: make sure that inline script devs don't miss the examples 2014-09-14 15:22:24 +02:00
Aldo Cortesi
be0996da35 Web interface is live. 2014-09-14 12:47:32 +12:00
Maximilian Hils
89b8e1ce8c checkin assets 2014-09-14 02:44:13 +02:00
Maximilian Hils
e9966428bd include jshint-stylish dependency 2014-09-14 02:42:36 +02:00
Aldo Cortesi
ff09529ba3 Add tornado dependency, serve index file 2014-09-14 12:33:07 +12:00
Aldo Cortesi
6812d304a1 Basic web service and options 2014-09-14 12:22:28 +12:00
Aldo Cortesi
adfaa1ed5b Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2014-09-14 12:05:15 +12:00
Maximilian Hils
abc91d6658 web: add flow stub 2014-09-14 02:04:48 +02:00
Aldo Cortesi
17868f61a9 Remove external app option, make tick timeout explicit 2014-09-14 11:46:01 +12:00
Aldo Cortesi
81e3a6e8e6 Super-basic outline for web io loop 2014-09-14 11:30:00 +12:00
Maximilian Hils
48211a2069 gulpfile: add tests and notify 2014-09-14 01:21:13 +02:00
Maximilian Hils
7b74d207f3 update Gruntfile 2014-09-13 23:57:01 +02:00
Maximilian Hils
d2475e6a14 web: start gui 2014-09-13 23:05:12 +02:00
Maximilian Hils
9bacb6d426 gulpfile 2014-09-13 17:00:05 +02:00
Maximilian Hils
b59234e25d use bowser-installer 2014-09-13 16:28:45 +02:00
Maximilian Hils
2842f25b82 fix tests 2014-09-12 03:16:52 +02:00
Maximilian Hils
9ec7963f8e update iframe injector example to use BeautifulSoup 2014-09-12 02:42:45 +02:00
Aldo Cortesi
25284792a5 Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2014-09-12 12:31:17 +12:00
Aldo Cortesi
efa3e3dde8 web -> onboarding 2014-09-12 12:30:03 +12:00
Maximilian Hils
fa9c3e9fa7 update gitignore 2014-09-11 10:26:06 +02:00
Aldo Cortesi
0510c9b111 Client-side framework for web application 2014-09-10 14:23:10 +12:00
Aldo Cortesi
76982937a6 Reorg to put web app in its own directory 2014-09-10 11:34:58 +12:00
Aldo Cortesi
e5412e9dd9 Docs stub for Unbuntu, restore executable flag on binaries. 2014-09-09 17:57:39 +12:00
Maximilian Hils
81c3b194b6 polish new distribution setup 2014-09-09 02:21:28 +02:00
Maximilian Hils
beee55421b Update README.mkd 2014-09-09 02:18:08 +02:00
Maximilian Hils
578e9f800c fix jsunpacker imports 2014-09-09 01:15:35 +02:00
Maximilian Hils
ef704fd11f update travis.yml 2014-09-09 00:15:06 +02:00
Maximilian Hils
5f5af9535a update distribution: pip install now works on Windows 2014-09-09 00:06:10 +02:00
Maximilian Hils
5fdec6b7cb re-add mitmproxy/mitmdump scripts for convenience 2014-09-08 23:45:45 +02:00
Maximilian Hils
fbc4bb38df mitmproxy -> libmproxy.main. do some leanup on the way 2014-09-08 23:34:43 +02:00
Maximilian Hils
7ea8d3ff35 add note about icmp redirects, fix #255 2014-09-08 18:35:52 +02:00
Maximilian Hils
ebd539b49f update examples, fix #353 2014-09-08 17:03:34 +02:00
Maximilian Hils
ece15b3c8a reverse proxy: adjust dst when reading flows, fix #346 2014-09-08 14:43:32 +02:00
Maximilian Hils
d06b4bfa4e remove proxy mode abstraction: always be clear which mode we are in 2014-09-08 14:32:42 +02:00
Maximilian Hils
6dbe431c5e document --ignore, fix #350 2014-09-08 13:41:25 +02:00
Maximilian Hils
5a2a5760d0 improve logging 2014-09-08 13:34:08 +02:00
Maximilian Hils
2b2d21aff0 add --ignore ui indication 2014-09-08 12:20:40 +02:00
Maximilian Hils
8eff2df89e add note that request.host should be used in the majority of cases 2014-09-07 18:05:43 +02:00
Maximilian Hils
ac27d1236f improve change_server api, add example how to change the upstream server 2014-09-07 18:01:37 +02:00
Maximilian Hils
58ea198698 fix #349 2014-09-07 15:58:27 +02:00
Maximilian Hils
b6986b8999 add mitm.it error site 2014-09-07 13:44:32 +02:00
Maximilian Hils
5226ac200f update code docs, make sure that url attribute never returns prettified/formatted values 2014-09-07 03:18:18 +02:00
Aldo Cortesi
bf5fef1e0b Merge pull request #347 from mitmproxy/issue_341
Remove BackReferenceMixin
2014-09-07 13:04:18 +12:00
Aldo Cortesi
3d62e90dbf Merge pull request #342 from mitmproxy/server_change_api
Server change api
2014-09-07 12:59:35 +12:00
Maximilian Hils
c1438050ed docs: mitmproxy now displays the reverse proxy server unless --host is specified, which comes with a pretty big warning itself 2014-09-07 00:59:40 +02:00
Maximilian Hils
78a44c5199 add docs on proxy modes 2014-09-07 00:42:25 +02:00
Maximilian Hils
df129736c3 test streaming 2014-09-06 13:30:00 +02:00
Maximilian Hils
3c65510ef5 coverage++ 2014-09-06 13:09:57 +02:00
Maximilian Hils
fdd7b2f108 Merge branch 'issue_341' into server_change_api 2014-09-06 12:43:32 +02:00
Maximilian Hils
0e0cff638c Merge branch 'master' into issue_341 2014-09-06 12:42:52 +02:00
Maximilian Hils
3a8f648807 fix race condition with the concurrent decorator 2014-09-06 12:42:23 +02:00
Maximilian Hils
ccb6182917 fix race condition with the concurrent decorator 2014-09-06 12:39:23 +02:00
Maximilian Hils
b6c8a22b67 coverage++ 2014-09-06 12:23:05 +02:00
Maximilian Hils
5d7cabcbfa add architecture illustration 2014-09-05 20:14:44 +02:00
Maximilian Hils
32e1ed212d streamline HTTPHandler.handle_flow() 2014-09-05 19:39:05 +02:00
Maximilian Hils
2a6337343a update docs, mostly revert 2f44b26b4c 2014-09-05 15:16:20 +02:00
Maximilian Hils
f2570c773a iframe injector example: use inline script 2014-09-05 15:05:44 +02:00
Maximilian Hils
a7a3b5703a change replay_request behaviour, refs #346; test upstream proxy mode 2014-09-05 00:18:17 +02:00
Maximilian Hils
b23a1aa4a4 much tests. so tcp. very wow. 2014-09-04 19:08:54 +02:00
Maximilian Hils
795e19f6b7 coverage++ 2014-09-04 16:37:50 +02:00
Maximilian Hils
f4d4332472 coverage++ 2014-09-04 14:46:25 +02:00
Maximilian Hils
1d45c54a04 Merge branch 'issue_341' into server_change_api 2014-09-04 14:18:21 +02:00
Maximilian Hils
1135666ee6 Merge branch 'master' into issue_341 2014-09-04 14:18:07 +02:00
Maximilian Hils
39fa579dd5 remove outdated IOError test case (f5fdfd8a9f) 2014-09-04 14:15:49 +02:00
Maximilian Hils
4781c565a9 fix #344 2014-09-04 12:29:44 +02:00
Maximilian Hils
6ebf488c5b Merge pull request #343 from deployable/master
Add urwid stop prior to exception output so stack trace is not cleared
2014-09-04 12:24:53 +02:00
deployable
4bdd1ed967 Add urwid stop prior to stack trace so exceptions are not cleared from screen 2014-09-04 10:47:27 +01:00
Maximilian Hils
ea55f2e012 Merge branch 'issue_341' into server_change_api
Conflicts:
	examples/redirect_requests.py
	libmproxy/console/common.py
2014-09-04 00:11:20 +02:00
Maximilian Hils
649e63ff3c fix some leftovers 2014-09-04 00:10:01 +02:00
Maximilian Hils
2f44b26b4c improve HTTPRequest syntax 2014-09-03 23:44:54 +02:00
Maximilian Hils
cd43c5ba9c simplify server changes for inline scripts 2014-09-03 20:12:30 +02:00
Maximilian Hils
0c3b6ee667 fix IOError handling 2014-09-03 17:33:08 +02:00
Maximilian Hils
b0cfeff06d fix #341 - work on flows instead of request/response internally. 2014-09-03 16:57:56 +02:00
Maximilian Hils
951a6fcc36 http: ignore disconnects that happen between requests 2014-09-03 12:31:39 +02:00
Maximilian Hils
712e5860aa ui: display * instead of 0.0.0.0 for the bound address 2014-09-03 12:24:14 +02:00
Maximilian Hils
1e4e332ef9 improve error handling 2014-09-02 18:13:18 +02:00
Maximilian Hils
1a41c15c03 minor fixes 2014-08-31 16:52:26 +02:00
Maximilian Hils
1f47f7b6b2 refactor protocol handling, fix #332 2014-08-30 20:15:19 +02:00
Maximilian Hils
82730c1c6f Windows transparent proxy: allow specification of custom WinDivert filter rules 2014-08-30 17:33:43 +02:00
Maximilian Hils
101209ef9f Merge branch 'master' of github.com:mitmproxy/mitmproxy 2014-08-30 16:40:44 +02:00
Maximilian Hils
84e2285ee5 Windows transparent proxy: proxy local traffic 2014-08-30 16:39:15 +02:00
Maximilian Hils
12ff4a7d2b Merge pull request #339 from nanonyme/patch-1
Drop usage of obsolete function "file"
2014-08-29 23:38:18 +02:00
Seppo Yli-Olli
66c2e8ff52 Drop usage of obsolete function "file"
Also use context manager
2014-08-29 19:18:52 +03:00
Maximilian Hils
b97b1f17cf fix #328 2014-08-24 14:22:11 +02:00
Maximilian Hils
e4d6089f9a fix #330 2014-08-23 13:53:43 +02:00
Maximilian Hils
105230c7c2 add trove classifier for Python 2 2014-08-19 13:48:14 +02:00
Maximilian Hils
3d861d7a67 make sure that flow.server_conn is set when script hook is called 2014-08-18 01:54:45 +02:00
Maximilian Hils
94fbf066f7 fix script tests 2014-08-18 01:47:39 +02:00
Maximilian Hils
5b7e19a77e fix #327 2014-08-18 00:55:30 +02:00
Maximilian Hils
623cbd4e51 fix: changes to request.host in the request inline script hook are now considered for the server connection 2014-08-17 23:59:44 +02:00
Maximilian Hils
0acda9a684 fix #324 2014-08-17 23:49:08 +02:00
Maximilian Hils
bb2ce689a9 adjust to netlib changes 2014-08-17 23:06:25 +02:00
Maximilian Hils
da3e7c0187 do not connect if inline script already connected to upstream server 2014-08-12 02:55:32 +02:00
Maximilian Hils
e546af2d33 remove pydivert from requirements.txt to fix tests 2014-08-10 17:11:46 +02:00
Maximilian Hils
a193c267f3 adjust tests 2014-08-10 16:20:04 +02:00
Maximilian Hils
858b0af0bb fix #270 2014-08-10 16:10:49 +02:00
Maximilian Hils
ecf8081ba6 implement passthrough mode, fixes #175 2014-08-09 03:03:21 +02:00
Maximilian Hils
f4a1459ebe fix #274 2014-08-09 01:02:58 +02:00
Maximilian Hils
c88613f596 fix replay form 2014-08-09 00:53:16 +02:00
Maximilian Hils
2e6a698287 fix #308 2014-08-08 19:04:58 +02:00
Maximilian Hils
4d2109ef92 fix display of urls in upstream mode, refs #308 2014-08-08 17:49:02 +02:00
Maximilian Hils
de05484d9d fix #318 2014-08-08 04:43:44 +02:00
Maximilian Hils
a3c3e4e504 remove platform.setup 2014-08-08 03:38:59 +02:00
Maximilian Hils
a9e6121a08 properly express state information on server connections, refs #315 2014-08-08 02:45:24 +02:00
Maximilian Hils
c01b294d8d fix script path escaping on windows, refs #293 2014-08-08 02:27:28 +02:00
Maximilian Hils
c6911a4158 docs: add docs for script args, fix #293 2014-08-07 01:30:47 +02:00
Maximilian Hils
74b801ba08 docs: suggest to use inline scripts rather than libmproxy 2014-08-07 00:55:42 +02:00
Maximilian Hils
13f030ccb5 suppress SPDY/HTTP2 announcement headers, fix #277 2014-08-03 16:25:38 +02:00
Maximilian Hils
8f9395060f improve example scripts 2014-08-03 02:39:41 +02:00
Maximilian Hils
3133136da7 fix #307 2014-08-03 02:34:29 +02:00
Maximilian Hils
10a6d4fbe5 fix #317 2014-08-03 02:01:40 +02:00
Maximilian Hils
e9401a2123 Merge branch 'stream'
Conflicts:
	libmproxy/protocol/http.py
2014-07-31 22:29:13 +02:00
Maximilian Hils
3e3dbee936 fix tests 2014-07-31 22:18:57 +02:00
Maximilian Hils
f5fb1138fd add proxy modes illustrations, refs #258 2014-07-31 02:01:13 +02:00
Maximilian Hils
c9be57b682 fix #313 2014-07-27 03:28:23 +02:00
Maximilian Hils
2b31a9c49e refactor tcp handling, fix #280 2014-07-27 02:39:17 +02:00
Maximilian Hils
83536e7e53 minor fixes 2014-07-27 02:10:39 +02:00
Maximilian Hils
e9c834a30d fix #259 2014-07-26 12:02:18 +02:00
Maximilian Hils
a73ad1d945 fix tests 2014-07-26 11:51:27 +02:00
Maximilian Hils
41f49ff0d4 add example how to replace response body contents 2014-07-26 00:44:03 +02:00
Maximilian Hils
7b2cfc831d docs++ 2014-07-25 19:31:12 +02:00
Maximilian Hils
5a808ca2a7 add status bar indicator for streaming 2014-07-25 18:55:01 +02:00
Maximilian Hils
4382829b7d workaround: always make sure that flow.response.reply exists 2014-07-25 18:47:48 +02:00
Brad Peabody
a1fa34e61c response streaming doc 2014-07-24 19:11:16 -07:00
Brad Peabody
5bb4e37dfd fix to make it so streaming with mitmproxy doesn't explode due to no reply on response 2014-07-24 18:46:39 -07:00
Maximilian Hils
d9ac029ec7 always initialize HTTPResponse.stream attribute 2014-07-23 00:21:33 +02:00
Maximilian Hils
4b4a18a2e4 add --stream options, various fixes 2014-07-21 21:06:55 +02:00
Maximilian Hils
562ac9e721 unify stream handling 2014-07-21 14:09:24 +02:00
Maximilian Hils
7398db80db simplify responseheader scripthook 2014-07-20 11:17:53 +02:00
Maximilian Hils
0ba5a2cf19 Merge branch 'stream' of https://github.com/bradleypeabody/mitmproxy into stream 2014-07-20 10:57:51 +02:00
Brad Peabody
560e23af09 fixed handling of Transfer-Encoding header during streaming; wrote tests for streaming support 2014-07-19 19:10:14 -07:00
Maximilian Hils
c7425f42db if no_upstream_cert is set, include SNI value als SubjectAltName, fix #291 2014-07-18 23:04:24 +02:00
Brad Peabody
c47ddaa3a0 basic attempt to implement streaming response, needs testing 2014-07-17 22:43:26 -07:00
Maximilian Hils
a48cccadb5 fix tests on windows 2014-07-18 03:13:52 +02:00
Maximilian Hils
05a8c52f8f add transparent proxy mode on windows (docs still missing) 2014-07-16 00:47:44 +02:00
Maximilian Hils
71ba7089e2 fix parameter naming 2014-07-14 17:26:22 +02:00
Brad Peabody
ca7d398b42 make include_content=False work by passing this on to netlib's http.read_response 2014-07-12 22:40:51 -07:00
Maximilian Hils
5fed5753b4 fix command line help 2014-07-06 02:15:54 +02:00
Maximilian Hils
b0c366aa45 Merge pull request #300 from zbrdge/freebsd-platform
Freebsd 10 platform
2014-07-03 02:24:00 +02:00
Maximilian Hils
df11595fad Merge pull request #286 from m0sth8/remove_global_should_exit
Remove global should_exit and fix tests
2014-07-03 02:20:38 +02:00
Zack B
64c265b710 added unit test update. coverage still at 97% 2014-07-01 16:33:48 -07:00
Zack B
e601ade924 only support FreeBSD 10+ 2014-07-01 15:08:42 -07:00
Zack B
2704963e61 add resolver for FreeBSD using pfctl 2014-07-01 14:37:52 -07:00
Maximilian Hils
c039e4a2e3 fix ProxyError inheritance 2014-06-25 23:25:49 +02:00
Maximilian Hils
84a016dccf expose sockname 2014-06-25 23:03:15 +02:00
Vyacheslav Bakhmutov
b7c1d05782 Remove global should_exit and fix tests 2014-06-13 14:14:55 +07:00
Maximilian Hils
decb6f998a add support for certificate chains, refs #174 2014-05-21 01:16:22 +02:00
Maximilian Hils
00fd243810 fix up error messages 2014-05-15 18:16:42 +02:00
Maximilian Hils
a17a53269d fix #253 2014-05-15 14:37:05 +02:00
Maximilian Hils
9cba4f8d39 fix #267 2014-05-15 14:16:05 +02:00
Maximilian Hils
221bbb7369 re-use cert creation from netlib in handle_sni, fix #272 2014-05-15 13:56:09 +02:00
Maximilian Hils
3f440aad59 Merge pull request #271 from davidpshaw/master
- working WBXML parser
2014-05-07 16:45:15 +02:00
davidpshaw
0ecd0ba3ab - changed license to MIT, as it is more easily integrated into the mitmproxy project 2014-05-06 21:12:36 -04:00
David Shaw
ec85531580 - working WBXML parser 2014-05-06 13:27:13 -04:00
Maximilian Hils
4f1fe11549 Merge pull request #269 from shvar/master
init ProxyConfig.certstore with custom certs
2014-04-29 16:54:58 +02:00
Eli Shvartsman
1f29b16fb7 fix default certs 2014-04-29 16:13:12 +03:00
Eli Shvartsman
e2501960d3 init ProxyConfig.certstore with custom certs 2014-04-29 15:54:11 +03:00
Maximilian Hils
e15b97372b Merge pull request #268 from shvar/patch-1
Fix upstream_cert call in case of https2http
2014-04-29 12:49:53 +02:00
Eli Shvartsman
ed91e19e0b Update server.py
We should ask for upstream cert only if there is:
1) no no_upstream_cert option specified
2) ssl connection to server is established
2014-04-29 12:41:59 +03:00
Aldo Cortesi
1dba379ae9 Fix proxy options 2014-04-12 17:57:19 +12:00
Maximilian Hils
24759daf46 update firefox cert install docs 2014-04-10 13:31:54 +02:00
Maximilian Hils
3b8d57ca86 fix issue #260 2014-04-07 14:40:01 +02:00
Maximilian Hils
cdc484d513 Merge pull request #252 from jeanregisser/master
Fixed palette forced to light in mitmproxywrapper.py
2014-03-26 14:36:56 +01:00
Jean Regisser
17e0f7d159 Fixed palette forced to light in mitmproxywrapper.py 2014-03-26 13:15:23 +01:00
Maximilian Hils
aab071380a beef up error messages 2014-03-26 00:51:18 +01:00
Maximilian Hils
3a89c84eaf add requests to requrements, improve error logging 2014-03-19 17:18:21 +01:00
Maximilian Hils
6924eb75bf fix minor version string 2014-03-19 16:05:19 +01:00
Maximilian Hils
28f82d052d fix display bugs (fixes #243) 2014-03-18 19:38:02 +01:00
Maximilian Hils
d5cfc1c080 Merge pull request #239 from mitmproxy/options_cleanup
Options cleanup
2014-03-18 17:19:57 +01:00
Maximilian Hils
ce38a17893 Merge pull request #238 from mitmproxy/log_levels
Log Levels
2014-03-18 17:19:44 +01:00
Maximilian Hils
c07cd857a7 fix #240 2014-03-18 00:44:41 +01:00
Maximilian Hils
a66913d4a3 forward proxy -> upstream proxy 2014-03-14 00:02:00 +01:00
Maximilian Hils
f14eeef653 remove debug switch 2014-03-13 23:47:02 +01:00
Maximilian Hils
4e17b00ce8 order command line options, add disting proxy option group 2014-03-13 23:43:26 +01:00
Maximilian Hils
843b2e28bc adjust command line docs, fix log typo 2014-03-13 23:25:13 +01:00
Maximilian Hils
d883d93566 fix linux tests... 2014-03-13 01:30:26 +01:00
Maximilian Hils
1bfc164692 adjust tests, fix option handling 2014-03-13 01:22:12 +01:00
Maximilian Hils
4d9799f103 add support for log levels 2014-03-13 01:04:45 +01:00
Maximilian Hils
7e86744226 add -d switch to mitmdump to compensate for old verbosity functionality 2014-03-12 22:39:23 +01:00
Maximilian Hils
aefb30ea60 restrict -e to mitmproxy only (not mitmdump) 2014-03-12 22:13:00 +01:00
Maximilian Hils
14db30080f Merge branch 'master' of github.com:mitmproxy/mitmproxy 2014-03-11 02:16:30 +01:00
Maximilian Hils
15c82f743f fix temporary server change, coverage++ 2014-03-11 02:16:22 +01:00
Aldo Cortesi
e89e035d4a Certificate forwarding. 2014-03-11 13:02:10 +13:00
Maximilian Hils
c1fff51b1b always use relative imports, fix status bar bug 2014-03-10 22:36:47 +01:00
Maximilian Hils
e6349b540f split up protocol\__init__.py 2014-03-10 21:57:50 +01:00
Maximilian Hils
b59013f6e3 Merge branch 'absolutely_relative_proxying' 2014-03-10 17:02:09 +01:00
Maximilian Hils
9cc10630c8 update docs, fix #215 2014-03-10 17:01:30 +01:00
Aldo Cortesi
982da23e9a Merge pull request #231 from benwa/patch-1
Update webapp.html
2014-03-10 17:25:38 +13:00
Aldo Cortesi
e131e41e45 Merge pull request #232 from benwa/patch-2
Update layout.html
2014-03-10 17:24:34 +13:00
Aldo Cortesi
554deee222 Merge pull request #233 from mitmproxy/untangle_circular_dependencies
Untangle circular dependencies
2014-03-10 17:24:05 +13:00
Maximilian Hils
fe58c1c6eb add advanced proxying options, add SSL-terminating capability to mitmproxy 2014-03-10 05:11:51 +01:00
Maximilian Hils
78750a8b4d lay the foundations for --(in|out)(abs|rel) command line switches, as proposed in https://groups.google.com/forum/#!topic/mitmproxy/nApno2TXS0c 2014-03-10 02:32:27 +01:00
Maximilian Hils
dd3aedca01 fix mentions of CONTENT_MISSING in libmproxy.console 2014-03-09 21:59:53 +01:00
Maximilian Hils
5598a8de82 finish proxy.py split up 2014-03-09 21:51:24 +01:00
Maximilian Hils
fc4fe83eaf split up proxy.py 2014-03-09 21:13:08 +01:00
Bennett Blodinger
edad97ea64 Update layout.html
Remove unnecessary menu button on mobile
2014-03-08 20:50:46 -05:00
Bennett Blodinger
8d57ef3c64 Update webapp.html
Add notice about data compression proxies
2014-03-08 20:43:39 -05:00
Maximilian Hils
2e50b10735 fix windows tests, include improvements from 0.10.1 2014-03-08 17:19:47 +01:00
Maximilian Hils
2b01c4eee7 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2014-03-08 15:47:27 +01:00
Maximilian Hils
3032672f10 combine asterisk-form and origin-form into relative form 2014-03-08 15:47:09 +01:00
Aldo Cortesi
221973aff6 Revert to old cert names, use a subdir for test conf dir. 2014-03-07 16:38:24 +13:00
Aldo Cortesi
9b17d272a3 Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2014-03-07 15:22:04 +13:00
Aldo Cortesi
d0e6fa2705 Use the right conf dir... 2014-03-07 15:20:15 +13:00
Maximilian Hils
5ca88300a9 Merge pull request #230 from sergeychipiga/fix/remove-redundant-codeline
remove redundant codeline
2014-03-05 18:53:24 +01:00
Sergey Chipiga
edac95028a remove redundant codeline 2014-03-05 21:00:29 +04:00
Aldo Cortesi
d65f2215cb Much more sophisticated cert handling
- Specify per-domain certificates and keys
- Certs are no longer regenerated for SANs
- And more. :)
2014-03-05 17:28:04 +13:00
Aldo Cortesi
32af668814 Minor cleanups. 2014-03-02 22:15:53 +13:00
Aldo Cortesi
875f5f8cb6 Cipher specification. 2014-03-02 17:35:41 +13:00
Aldo Cortesi
f373ac5b6c Improve explicit certificate specification
- Support cert/key in the same PEM file
- Rationalize arguments, expand tests, clean up a bit
2014-03-02 17:27:24 +13:00
Aldo Cortesi
863b1e1455 Update for pathod.SSLOptions changes. 2014-03-02 15:58:53 +13:00
Aldo Cortesi
a34a483184 Adapt for new pathod and netlib APIs. 2014-03-02 15:14:22 +13:00
Aldo Cortesi
43a760c935 Merge pull request #223 from droope/improve-backwards-search
Improve search to also search backwards.
2014-02-26 10:18:26 +13:00
Pedro Worcel
cffae49e34 add helpful messages on wrap 2014-02-22 18:04:56 +13:00
Pedro Worcel
3e50034428 fix the wrapping on backward searches 2014-02-22 17:15:37 +13:00
Pedro Worcel
9fe6b8fd26 add docs 2014-02-22 16:36:35 +13:00
Pedro Worcel
4284fd3614 add multi-line support to backwards search 2014-02-22 16:32:22 +13:00
Pedro Worcel
3c02865e8b add multi-line support 2014-02-22 15:32:35 +13:00
Pedro Worcel
7a154e1ae1 add basic backwards search 2014-02-22 15:00:10 +13:00
Maximilian Hils
c2828de4a1 fix bug: ensure that server connection is present for tcp connections 2014-02-17 17:25:45 +01:00
Maximilian Hils
b5d02add28 Merge branch 'master' of github.com:mitmproxy/mitmproxy 2014-02-17 00:15:58 +01:00
Maximilian Hils
39f73776dc Bump version
Do it now already so that mitmproxy will warn the user if netlib is not from master.
2014-02-11 12:09:24 +01:00
Maximilian Hils
d9a6037299 fix comments 2014-02-09 02:54:07 +01:00
Aldo Cortesi
a85974eaa8 Fix flow initialization order error
Resolves #210
2014-02-08 17:17:35 +13:00
Aldo Cortesi
b642b4870b Better response when mitmproxy crashes. 2014-02-08 14:15:19 +13:00
Aldo Cortesi
569e5d348a Merge pull request #208 from kmike/pillow-setuppy
Remove upper bound for Pillow in setup.py
2014-02-08 12:45:06 +13:00
Aldo Cortesi
fe4bab2e6f Cleanup: fix unit tests, simpler app test, remove print statements 2014-02-08 12:33:59 +13:00
Maximilian Hils
33b10da57c fix tests 2014-02-07 18:26:42 +01:00
Maximilian Hils
735e4400c4 add tests for reconnect to upstream proxy, ensure that server_reconnect is always hooked 2014-02-07 18:14:15 +01:00
Maximilian Hils
545fc2506b Achievement Unlocked: Proxy Chain 2014-02-07 07:08:59 +01:00
Maximilian Hils
9526c5d565 fix race conditions in test suite 2014-02-07 04:15:24 +01:00
Maximilian Hils
d07029d575 coverage++ 2014-02-07 03:56:57 +01:00
Maximilian Hils
9f5f2b7071 test libmproxy.app, increase coverage 2014-02-07 02:36:39 +01:00
Maximilian Hils
66090f9aea finalize merge 2014-02-06 23:05:53 +01:00
Maximilian Hils
ff264eb309 add functionality to change the destination server 2014-02-06 22:16:26 +01:00
Maximilian Hils
134c7795f8 remove LEGACY switches, always update flow.server_conn 2014-02-06 01:19:51 +01:00
Maximilian Hils
cb397ec788 fix bugs, expose timestamp information to console ui 2014-02-06 00:53:39 +01:00
Maximilian Hils
80683e77bc mock urwid to run console tests on windows, push failing testcases down to 0. :-) 2014-02-05 23:17:26 +01:00
Maximilian Hils
f26d91cb81 add skeleton to change destinatin server during intercept, fix all testcases on windows 2014-02-05 20:26:47 +01:00
Mikhail Korobov
3e0e4b7dec remove upper bound for Pillow in setup.py 2014-02-05 19:43:08 +06:00
Maximilian Hils
9a55cd7332 Merge branch 'master' into tcp_proxy 2014-02-05 14:33:44 +01:00
Maximilian Hils
d864a326d2 fix all tests except those using set_url and get_url 2014-02-05 14:33:17 +01:00
Maximilian Hils
6d9b28f2ea add example to show how to read mitmproxy dump files, refs #207 2014-02-04 19:10:55 +01:00
Maximilian Hils
fd828bf959 shutdown properly if we dont keep serving 2014-02-04 18:40:12 +01:00
Steven Van Acker
66da73d8a9 fixing bug: AttributeError: DumpMaster instance has no attribute 'unload_script' 2014-02-04 14:49:51 +01:00
Maximilian Hils
6a53ae5fd3 push failing tests down to 43 2014-02-04 05:02:17 +01:00
Maximilian Hils
f6253a80ff add priorities for the destination server address 2014-02-04 02:56:59 +01:00
Maximilian Hils
2db5f9de26 bring failing tests back into the double-digit range 2014-01-31 04:45:39 +01:00
Maximilian Hils
7d96ff00ef remove _flow_map from state, improve logging 2014-01-31 03:01:51 +01:00
Maximilian Hils
30a44cbb41 fix server reconnect 2014-01-31 01:44:55 +01:00
Maximilian Hils
6ce1470631 move StateObject back into libmproxy 2014-01-31 01:06:35 +01:00
Maximilian Hils
5fce7be592 complete state handling 2014-01-30 20:11:01 +01:00
Maximilian Hils
8544a5ba4b add generic TCP handler with SSL support, move StateObject into netlib 2014-01-30 18:56:23 +01:00
Maximilian Hils
179c3ae8aa polish SimpleStateObject 2014-01-30 06:03:41 +01:00
Maximilian Hils
e00bbccfd6 remove old classes 2014-01-30 05:21:53 +01:00
Maximilian Hils
40bf42f14a merge flow classes. current status: basic mitmdump working 2014-01-30 05:00:13 +01:00
Maximilian Hils
607f777811 fix most testsuite errors, improve proxy error handling 2014-01-29 02:49:11 +01:00
Maximilian Hils
1e3e0dd127 merge master 2014-01-28 17:29:28 +01:00
Maximilian Hils
17f09aa0af unify ipv4/ipv6 address handling 2014-01-28 17:28:20 +01:00
Aldo Cortesi
3aa78f9ff3 Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2014-01-28 15:20:10 +13:00
Aldo Cortesi
e5d2829364 docs: fix spacing of page headers 2014-01-28 15:19:53 +13:00
Maximilian Hils
36930a6e1d actually remove test dependencies from requirements.txt 2014-01-28 03:17:27 +01:00
Aldo Cortesi
fcb569b7d7 Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2014-01-28 15:12:57 +13:00
Aldo Cortesi
0b7a7ffcb1 Changelog. 2014-01-28 15:12:44 +13:00
Maximilian Hils
125166020b move test requirements out of main requirements.txt 2014-01-28 03:09:21 +01:00
Aldo Cortesi
5ce9c2eb65 Update contributors. 2014-01-28 15:04:20 +13:00
Aldo Cortesi
647a11c900 travis: irc notifications 2014-01-28 14:52:41 +13:00
Aldo Cortesi
f3369529ab Adjust docs for web app certificate installation. 2014-01-28 13:24:11 +13:00
Aldo Cortesi
23ba4eccd8 Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2014-01-28 12:55:03 +13:00
Aldo Cortesi
ae87affcbe Nicer layout for cert install options. 2014-01-28 09:44:33 +13:00
Aldo Cortesi
784f411273 Instructions for adding mitmproxy certificates to the Java trust store.
Fixes #146
2014-01-27 14:45:20 +13:00
Aldo Cortesi
2df321e71b Use the mitm.it domain for the app, turn it on by default. 2014-01-27 14:37:29 +13:00
Aldo Cortesi
332eb67dfe Android doc update. 2014-01-27 14:17:16 +13:00
Aldo Cortesi
f47d89ff4e Revert "Move the doc tree out into its own repo."
This reverts commit 8f88fcedd6.
2014-01-27 14:16:23 +13:00
Aldo Cortesi
47c7e37723 Serve correct certs from app. Enable Windows and Android icons. 2014-01-24 10:46:34 +13:00
Maximilian Hils
5811e79361 print warning if netlib and mitmproxy versions are different. 2014-01-22 16:21:17 +01:00
Maximilian Hils
94e530ec4f merge master 2014-01-22 16:01:31 +01:00
Aldo Cortesi
9044b8b8f5 travis: install netlib from git before installing requirements. 2014-01-22 13:43:59 +13:00
Aldo Cortesi
faf4338d13 Merge branch 'master' of ssh.github.com:cortesi/mitmproxy
Conflicts:
	doc-src/certinstall/android.html
2014-01-22 13:34:46 +13:00
Aldo Cortesi
8f88fcedd6 Move the doc tree out into its own repo. 2014-01-22 13:33:02 +13:00
Maximilian Hils
cf094c2fbc Add note on emulated android devices. refs #204 2014-01-21 21:56:36 +01:00
Aldo Cortesi
7ddc941116 Silence pyflakes
And pick up one bug as a consequence.
2014-01-19 18:16:24 +13:00
Aldo Cortesi
cabd848b1e Release test script and checklist. 2014-01-19 18:08:59 +13:00
Aldo Cortesi
453075c77a Doc and readme tweaks. 2014-01-19 18:08:50 +13:00
Aldo Cortesi
dc59325329 Refactor docs to define nav sidebar in only one place. 2014-01-19 17:40:26 +13:00
Aldo Cortesi
f431eb5acc Tweak setup.py to allow installs outside source dir
Also fix mitmdump version output
2014-01-19 16:06:03 +13:00
Aldo Cortesi
64be9b1a8a Optionally take the mitmproxy path for doc rendering from a env variable. 2014-01-19 13:52:45 +13:00
Aldo Cortesi
bd684d4540 PyInstaller bug requiring a console import in mitmdump is gone 2014-01-19 13:33:15 +13:00
Aldo Cortesi
5782f9393e Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2014-01-19 13:28:18 +13:00
Aldo Cortesi
bf1399fa2b Handle views that don't support search gracefully
This includes all key/value formatted views, e.g. the image view. We
need to support these ultimately, but no time before the next release.
2014-01-19 13:23:38 +13:00
Aldo Cortesi
f5f46bf080 Re-enable caching on search. 2014-01-19 12:43:58 +13:00
Maximilian Hils
1786d77819 Add functionality to transparently proxify connections to other HTTPS proxies 2014-01-18 22:57:28 +01:00
Maximilian Hils
0b4ad05e02 merge master 2014-01-18 17:25:59 +01:00
Maximilian Hils
6c24b1d0d2 get server reconnect right, fix timestamps 2014-01-18 17:15:33 +01:00
Maximilian Hils
862b532fff small refactorings, bugs fixed 2014-01-18 15:35:37 +01:00
Maximilian Hils
5acbef236c fix sni bug: respond with the correct certificate 2014-01-16 02:33:14 +01:00
Maximilian Hils
779e303dfe fix syntax highlighting for countershape urls by using different quotes 2014-01-14 17:58:42 +01:00
Maximilian Hils
92966e7c48 add tutorial for transparent proxying, other minor docs improvements 2014-01-14 17:47:33 +01:00
Maximilian Hils
621807f697 add basic error handling 2014-01-13 02:25:58 +01:00
Aldo Cortesi
069aca1df4 Deprecate Flow.unload_script in favor of Flow.unload_scripts
In the presence of arguments, unloading a single script is clumsy and
less useful.
2014-01-13 14:20:34 +13:00
Aldo Cortesi
4f69eef8f3 Extract command parsing and use in script grid editor 2014-01-13 14:15:17 +13:00
Aldo Cortesi
42d4a2fae9 Script refactoring: move script command parsing into script module. 2014-01-12 23:02:29 +13:00
Aldo Cortesi
e5776b8be3 Clean up and clarify script API 2014-01-12 13:59:32 +13:00
Aldo Cortesi
58e1b3a47f Start refactoring scripts
- Move ScriptContext into script module
- Use mock module instead of hand-rolled mock objects in tests
2014-01-12 12:49:19 +13:00
Maximilian Hils
2f63da99c9 ignore console test utilities on windows 2014-01-10 01:39:16 +01:00
Maximilian Hils
24fc8ff292 fix header assembly, other improvements 2014-01-10 01:38:28 +01:00
Maximilian Hils
efdb25ef68 improve https handling 2014-01-09 17:56:42 +01:00
Maximilian Hils
3090267ca4 display build status from master branch 2014-01-09 17:38:08 +01:00
Maximilian Hils
607d79b63f groundwork completed 2014-01-09 05:34:29 +01:00
Maximilian Hils
4637d467c0 Delete ~$$proxy-flowchart.~vsdx 2014-01-07 02:30:04 +01:00
Maximilian Hils
ea2f17680b continue work on the proxyhandler 2014-01-07 02:29:10 +01:00
Maximilian Hils
b75cfd5bf8 Merge pull request #199 from dwilbraham/add_protobuffer_content_type
Decode content as protobuf if the content_type is "application/x-protobuffer"
2014-01-06 04:46:59 -08:00
Dan Wilbraham
1c2e638d53 Update ViewProtobuf in contentview.py to also decode as protobuf if the content_type is "application/x-protobuffer" 2014-01-05 23:40:02 +00:00
Aldo Cortesi
e31fc8ac40 Tweaking web stub app, icons for certificates, serve PEM correctly. 2014-01-05 16:59:27 +13:00
Aldo Cortesi
a49115a227 Remove / binding alias for limit
The search and limit functionality is too different.
2014-01-05 14:14:36 +13:00
Maximilian Hils
b34ad82b52 first steps on tcp proxying 2014-01-05 01:03:55 +01:00
Aldo Cortesi
d5f9b02615 Merge pull request #192 from mitmproxy/refactor_read_http_body
move CONTINUE checks into mitmproxy
2014-01-04 14:37:47 -08:00
Aldo Cortesi
7d37e0ce10 Merge pull request #193 from droope/search-functionality
Search functionality
2014-01-04 14:34:20 -08:00
Aldo Cortesi
8a599be060 Merge branch 'migrate_from_pil_to_pillow' of https://github.com/Kami/mitmproxy into Kami-migrate_from_pil_to_pillow
Conflicts:
	requirements.txt
2014-01-05 11:15:27 +13:00
Aldo Cortesi
ac31039ad3 Merge pull request #198 from Kami/add_css_view
Add CSS view which beautifies minified CSS files
2014-01-04 14:04:02 -08:00
Aldo Cortesi
a2261e3cf0 Introduce file descriptor decorators for Request objects
Which lets us enable the apps again, now running from flow.py
2014-01-05 10:58:53 +13:00
Tomaz Muraus
c5f4614ba5 Fix CSS view prompt, update display mode options. 2014-01-04 17:13:46 +01:00
Tomaz Muraus
ff2d7a7501 Provide more sensible serializer options. 2014-01-04 15:50:40 +01:00
Tomaz Muraus
e9f6302ec7 Add CSS view which beautifies CSS files if cssutils library is available,
otherwise it acts as a no-op.
2014-01-04 04:49:50 +01:00
Tomaz Muraus
1fa6bcbd5a Update another reference to PIL. 2014-01-04 03:15:08 +01:00
Aldo Cortesi
45eab17e0c Decouple message type from message class name. 2014-01-04 14:42:32 +13:00
Aldo Cortesi
1e07d9e6e7 Move app mechanism to flow.py
Disable apps while message passing is improved.
2014-01-04 14:35:11 +13:00
Aldo Cortesi
f25c532960 Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2014-01-04 13:15:13 +13:00
Maximilian Hils
8472ed97ed fix #195
(untested)
2014-01-03 23:35:25 +01:00
Tomaz Muraus
e9c2c0ac3a Migrate from Pil to the latest version of Pillow. 2014-01-03 21:13:14 +01:00
Aldo Cortesi
3aa4b6603c Fix app in mitmproxy console, update to bootstrap 3. 2014-01-03 15:29:32 +13:00
Maximilian Hils
b9d4eb103e list mock as requirement (via @droope) 2013-12-29 10:51:47 +01:00
Pedro Worcel
799c877676 now really fix it + test 2013-12-26 22:18:34 +13:00
Pedro Worcel
a4b059c2a7 fix bug that happens after searching for a non-existant string, and
later for an existant one.
2013-12-26 21:53:04 +13:00
Pedro Worcel
34a09780ee add docs 2013-12-26 17:26:51 +13:00
Pedro Worcel
70f6bb301b added 'n' functionality, tidy up & testing 2013-12-26 17:16:26 +13:00
Pedro Worcel
21efe2f2c8 add looping around 2013-12-26 17:04:18 +13:00
Pedro Worcel
9cf8a1a89d fix failing test 2013-12-25 21:08:20 +13:00
root
bcf5620239 fix crash 2013-12-25 16:57:54 +13:00
root
95406bd119 Add focusing, and fixes non-clearance of prev searches. Add
documentation.
2013-12-25 16:50:29 +13:00
root
932464d0a0 test passing, UI still not working 2013-12-24 14:28:20 +13:00
root
359573a764 add search with / for compatibility with what I'll do. 2013-12-23 16:41:46 +13:00
Maximilian Hils
d6aa7dc22e ignore web gui specific paths that won't get cleaned up when changing branches 2013-12-17 21:28:21 +01:00
Maximilian Hils
e643759ef6 merge smurfix/fix2, add serverconnect hook docs, adjust tests 2013-12-16 22:10:06 +01:00
Maximilian Hils
f4b58ba495 move CONTINUE checks into mitmproxy 2013-12-15 06:33:18 +01:00
Maximilian Hils
6ec2e6f24f fix script path error in tests 2013-12-15 02:51:35 +01:00
Maximilian Hils
605950bfdf add @concurrent decorator for inline scripts, fixes #176 2013-12-15 02:43:16 +01:00
Aldo Cortesi
224cd41dc2 Merge pull request #189 from mitmproxy/refactor_proxyhandler
Refactor ProxyHandler
2013-12-13 15:05:22 -08:00
Matthias Urlichs
afff1f1734 Reconnect if the server-connect hook needs the request to decide what to do 2013-12-12 10:00:23 +01:00
Matthias Urlichs
517e5e6688 handle a hook changing connection parameters 2013-12-12 09:22:55 +01:00
Matthias Urlichs
7b6057fa64 serverconnect hook: Set sc.request
The serverconnect hook script might need to examine the incoming request
in order to set up the server connection.

Example use: bind to a distinct source IPv6 address for each client.
2013-12-12 07:56:40 +01:00
Maximilian Hils
39ffe10334 add content-length 0 if we remove header for chunked encoding, fixes #186 2013-12-12 04:42:29 +01:00
Maximilian Hils
4a32a65e0e change certificate path for android, fix #171 2013-12-12 03:40:23 +01:00
Maximilian Hils
7db1430ee7 ignore missing CN in certificates. fixes #169 2013-12-12 03:24:17 +01:00
Maximilian Hils
28a234e28b store resolved ip addresses, fixes #187 2013-12-12 02:11:22 +01:00
Maximilian Hils
5f6eca8856 Merge pull request #190 from BillinghamJ/patch-1
Added small note of file format
2013-12-11 05:13:25 -08:00
James Billingham
3481c54d02 Added small note of file format 2013-12-11 13:11:19 +00:00
Maximilian Hils
fb985b8b87 Merge remote-tracking branch 'origin/master' 2013-12-11 14:05:18 +01:00
Maximilian Hils
e99eaa3a19 add documentation on how to use custom certificates 2013-12-11 14:04:45 +01:00
Aldo Cortesi
a600441e37 Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2013-12-10 22:24:23 +13:00
Aldo Cortesi
1bbeace350 Bump version 2013-12-10 22:23:38 +13:00
Maximilian Hils
f0e96be142 ensure binary read on windows 2013-12-10 03:13:37 +01:00
Maximilian Hils
21de99cb09 add comments 2013-12-10 02:30:07 +01:00
Maximilian Hils
a78b185278 refactor ProxyHandler, remove duplicate code 2013-12-10 01:47:19 +01:00
Maximilian Hils
2be19a5620 Merge remote-tracking branch 'origin/master' 2013-12-09 19:10:40 +01:00
Maximilian Hils
4984bbb83b remove code duplication in ProxyHandler by unifying read_transparent and read_reverse 2013-12-09 19:10:15 +01:00
Aldo Cortesi
1d536f64d5 Small workaround to make mitmproxy work again.
Further work is required to make scripts work again, though.
2013-12-09 22:34:47 +13:00
Maximilian Hils
3bd238de37 backport changes to fix tests 2013-12-08 15:46:11 +01:00
Maximilian Hils
a509a9037b Merge branch 'master' into 0.10 2013-12-08 14:14:57 +01:00
Maximilian Hils
4dcb2435fc Merge remote-tracking branch 'origin/0.10' into 0.10 2013-12-08 14:14:51 +01:00
Maximilian Hils
e3c69fd105 Merge remote-tracking branch 'origin/master' 2013-12-08 14:14:31 +01:00
Aldo Cortesi
3a1d85ab18 Merge pull request #134 from mhils/scripts_improvements
Support multiple scripts and script arguments. refs #76
2013-12-08 01:14:12 -08:00
Aldo Cortesi
7aeaf9d448 Merge pull request #161 from mitmproxy/external_webapp
External webapp
2013-12-08 01:09:46 -08:00
Aldo Cortesi
73791f986a Merge pull request #166 from ghjc/forward-proxy
Added -F http[s]://server:port option that allows MITM to forward traffi...
2013-12-08 01:05:33 -08:00
Aldo Cortesi
4816cae98c Merge pull request #170 from jsoriano/master
Reverse proxy works with SSL
2013-12-08 01:02:17 -08:00
Aldo Cortesi
cb3a4a0f3c Remove obsolete test. 2013-12-08 21:58:55 +13:00
Aldo Cortesi
dfcec4ffba Merge pull request #180 from mitmproxy/add_serverconnection_scripthook
Add serverconnection scripthook
2013-12-08 00:55:55 -08:00
Aldo Cortesi
83f061c1a0 Merge pull request #184 from richie5um/RichS-RateDivideByZeroIssue
Fix divide by zero issue when timestamp start and end are the same
2013-12-08 00:54:11 -08:00
Aldo Cortesi
925eaa9343 Add a note to the docs about pf redirection of traffic from the host itself. 2013-12-08 21:38:53 +13:00
Aldo Cortesi
1e733f3149 Merge branch 'fix_invalid_tcp_close' 2013-12-08 14:32:40 +13:00
Maximilian Hils
594e61c647 Merge branch 'master' into 0.10 2013-12-08 01:44:09 +01:00
Maximilian Hils
948d4c0445 Merge remote-tracking branch 'origin/master' 2013-12-08 01:42:55 +01:00
Rich Somerfield
9a986e0c1b Fix divide by zero issue when timestamp start and end are the same 2013-11-26 14:14:51 -08:00
Maximilian Hils
d4c3b1c213 attempt to fix https://github.com/mitmproxy/netlib/issues/24 2013-11-19 04:08:16 +01:00
Maximilian Hils
675518f873 add serverconnect script hook 2013-11-18 17:25:52 +01:00
Maximilian Hils
f63380a04e Merge pull request #173 from joebowbeer/patch-1
Update android.html
2013-10-22 05:23:25 -07:00
joebowbeer
00a000091e Update android.html
Make the sdcard path in the text consistent with the screen shot (android-shellwgetmitmproxyca.png).

/sdcard/Download (singular) is the correct path.
2013-10-18 22:58:06 -07:00
Jaime Soriano Pastor
7140323bdb New method establish_ssl to avoid duplicated code 2013-09-26 12:38:13 +02:00
Jaime Soriano Pastor
f33d128a7f Reverse proxy works with SSL 2013-09-26 12:23:48 +02:00
Maximilian Hils
2956c144d3 Merge branch 'master' into 0.10 2013-09-14 23:47:04 +02:00
JC
65d1ed1b3c Added -F http[s]://server:port option that allows MITM to forward traffic to another http server upstream. 2013-08-30 17:19:58 -07:00
Maximilian Hils
38a1135ab8 add status images to README, include TestHTTPS again 2013-08-25 04:31:35 +02:00
Maximilian Hils
404445cbdf exclude TestHTTPS for testing travis/coverage 2013-08-25 04:19:43 +02:00
Maximilian Hils
62fa2e6c07 fix travis, loose requirements.txt 2013-08-25 04:03:53 +02:00
Maximilian Hils
08a26337a0 re-add requirements.txt 2013-08-25 03:53:19 +02:00
Maximilian Hils
63ece45de5 add coveralls.io 2013-08-25 03:45:32 +02:00
Aldo Cortesi
8d954d9965 Version bump. 2013-08-25 10:37:35 +12:00
Aldo Cortesi
789700ade2 Prep for release: CHANGELOG and CONTRIBUTORS 2013-08-25 10:28:15 +12:00
Aldo Cortesi
6a31d32712 Merge pull request #162 from mhils/add_travis_ci
Add travis CI
2013-08-22 15:32:39 -07:00
Aldo Cortesi
aaba940dea Fix pretty_size unit tests. 2013-08-23 10:28:16 +12:00
Aldo Cortesi
a2643b52f9 Tweak timing display
- Remove elapsed time. Space is at a premium here, and this is somewhat
redundant with the rate figure. We should display complete timing information
somewhere in the detailed flow view.
- Tone down the colour. Reserve highlights for stuff that should really pop out
to the user.
- Make rate calculation more acurate. Include header sizes. Use response start
and end time, rather than request end and response end. This means that we show
actual transfer rates, not including DNS requests and so forth.
2013-08-23 10:25:44 +12:00
Aldo Cortesi
09f651247a Merge pull request #159 from kmanna/elapsed_time
Transfer Rate and Elapsed Time Statistics
2013-08-22 14:34:55 -07:00
Maximilian Hils
fa3dce9e11 add jsbeautifier to requirements.txt 2013-08-20 13:47:34 +02:00
Maximilian Hils
02120eb5c8 travis ci: fix pip install order 2013-08-20 13:42:25 +02:00
Maximilian Hils
4bbcf795e3 travis ci: make sure that netlib is installed from head 2013-08-20 13:32:18 +02:00
Maximilian Hils
4790399041 add travis ci 2013-08-20 13:25:47 +02:00
Maximilian Hils
bb4748fb8f add option to expose webapp externally, remove distinct ip setting 2013-08-18 20:03:53 +02:00
Maximilian Hils
729677cd85 Merge branch 'master' into 0.10 2013-08-17 13:30:36 +02:00
Maximilian Hils
a558c016d4 Merge remote-tracking branch 'origin/master' 2013-08-17 13:28:24 +02:00
Maximilian Hils
aeb8958236 update gitignore to not include PyCharms 2013-08-17 13:27:53 +02:00
Kyle Manna
41041159f6 console: Add support for displaying transfer rate
* Display the rate in the the response row.
* Very handy for passive performance analysis.
2013-08-13 16:33:53 -07:00
Kyle Manna
ea28496bea console: Add support for displaying elapsed time
* Display the elapsed time in the the response row.
* Very handy for passive performance analysis.
2013-08-13 16:33:53 -07:00
Kyle Manna
4ede2f126a utils: Add missing "B" for pretty_size()
* Add missing unit for megabytes, should print "MB".
2013-08-13 16:33:39 -07:00
Aldo Cortesi
f850bdd848 Revamp dummy cert store
We no longer keep these on disk. This is for a number of reasons, including
some race conditions and the fact that some valid IDNA-encoded domain names are
not valid file names on Windows.
2013-08-12 16:04:02 +12:00
Aldo Cortesi
2c4e5e0a73 Better handling of cert errors on connection. 2013-08-10 23:07:22 +12:00
Aldo Cortesi
edb10e33aa Remove GPL notices left in source files after our change to the MIT license.
Thanks to Roy Shamir for reporting this.
2013-08-01 11:08:00 +12:00
Aldo Cortesi
439d9a294c Make use of a change to netlib.tcp that clarifies error conditions for flush and close.
Should fix #144.
2013-07-30 09:42:29 +12:00
Aldo Cortesi
5f0b5532bc Show an error when attempting to decode invalid data. 2013-07-29 18:14:11 +12:00
Aldo Cortesi
d54398cc79 Repair minor user interface issue that caused brief flashes of duplicate flows in the flow list. 2013-07-29 12:38:41 +12:00
Maximilian Hils
29bcbd57d5 fix #144
netlib wraps IOError in NetLibDisconnect, so we need to cover this as well.
2013-07-28 21:05:17 +02:00
Aldo Cortesi
a21c989ccd Fix startup with no state.
Bug introduced in previous patch.
2013-07-28 22:40:51 +12:00
Aldo Cortesi
df3d2d70ed Terminate can be called on an unconnected server connection. 2013-07-28 18:05:04 +12:00
Aldo Cortesi
10a9e3365f Some refactoring of the console inteface.
Reduce some state duplication, by removing currentflow variable.

Fixes #141
2013-07-28 18:00:49 +12:00
Aldo Cortesi
10b744ee08 Properly terminate SSL server connections.
Before, we had dangling SSL server connections causing resource exhaustion.

I believe this fixe #144 and #153
2013-07-28 10:50:25 +12:00
Aldo Cortesi
5c1157ddaf Move app instantiation out of proxy.py. 2013-07-24 10:32:56 +12:00
Aldo Cortesi
64ce3b358f Make a start on mitmproxy web app. 2013-07-23 10:28:35 +12:00
Aldo Cortesi
55f7e8d5b9 Don't take minor version into account when checking serialized data compatiblity. 2013-07-13 14:44:09 +12:00
Aldo Cortesi
9febc0813f Merge pull request #143 from liyanage/upstream-pull-request-2013-07-07
Some improvements for the OS X mitmproxywrapper.py script
2013-07-11 15:07:01 -07:00
Marc Liyanage
e5c0891e84 Pass extra command line arguments to mitmproxy 2013-07-08 20:56:05 -07:00
Aldo Cortesi
c4d03d8b85 Merge pull request #137 from caujka/master
Handling for EOF reading error in gzipped content
2013-07-01 17:37:15 -07:00
Aldo Cortesi
1f029306d6 Merge pull request #139 from smurfix/fixes
Close connection when flush fails
2013-07-01 17:36:33 -07:00
Matthias Urlichs
d9cc6f1dd6 proxy.py: Catch channel.ask() returning None when terminating 2013-06-28 07:53:56 +02:00
Matthias Urlichs
be1377850e Close connection when flush fails 2013-06-26 15:02:55 +02:00
Maximilian Hils
6fe175913e fix request_timestamps test case 2013-06-18 00:54:07 +02:00
Maximilian Hils
ca9740df20 skip tests on windows that don't make sense 2013-06-18 00:53:38 +02:00
Oleksandr Sheremet
0afd3fc42f Added handling for EOF reading error in gzipped content. 2013-06-17 21:46:54 +03:00
Maximilian Hils
d462b444b7 update tests to reflect changes to options.scripts 2013-06-17 16:48:06 +02:00
Maximilian Hils
84248d431b fix send_error behavior if there are no headers 2013-06-17 10:52:19 +02:00
Aldo Cortesi
826a1fdaa2 Minor adjustment for website docs pages. 2013-06-16 16:59:28 +12:00
Aldo Cortesi
54df58b7a8 Update changelog. Move to lsof for transparent OSX is not working on Mountain Lion. 2013-06-16 16:23:59 +12:00
Aldo Cortesi
886970040b Revert "Use lsof instead of pfctl to find target host on OSX in transparent mode."
This reverts commit ffeede9b39.
2013-06-16 16:23:36 +12:00
Aldo Cortesi
c1a60a1f6b CHANGELOG and CONTRIBUTORS 2013-06-16 16:08:41 +12:00
Aldo Cortesi
c89378047b Formalize OSX binary script a bit more. 2013-06-16 15:50:08 +12:00
Aldo Cortesi
a386dff058 Remove pyinstaller specs. Add a quick-and-dirty script for building OSX binaries. 2013-06-16 15:13:28 +12:00
Aldo Cortesi
db43f1ffcc Version bump, doc extension, URLs to github.com/mitmproxy/* 2013-06-16 13:59:01 +12:00
Aldo Cortesi
bef5662365 Merge pull request #119 from jasonanovak/ViewDocumentation
Documentation for adding a new content viewer / View class
2013-06-15 15:53:49 -07:00
Maximilian Hils
fd36142018 Merge remote-tracking branch 'origin/scripts_improvements' into 0.10 2013-06-16 00:41:43 +02:00
Aldo Cortesi
34f286df51 Merge pull request #136 from mhils/fix_binary_rw
always read files in binary mode
2013-06-15 15:31:36 -07:00
Maximilian Hils
ba47690a03 always read files in binary mode 2013-06-16 00:23:44 +02:00
Maximilian Hils
b4f6f09c83 update test script 2013-06-16 00:10:53 +02:00
Maximilian Hils
2b4af8d475 add support for multiple scripts and script arguments. refs #76 2013-06-13 16:09:38 +02:00
Aldo Cortesi
d3beaa7382 Merge pull request #132 from ipopov/master
A humble pull request
2013-06-08 16:28:47 -07:00
Aldo Cortesi
1a5c27aa7d Massage content-type before sending it to mime detection
Fixes #67
2013-06-09 11:26:44 +12:00
Aldo Cortesi
9f6657727b Make UTF environment detection more robust.
Fixes #125
2013-06-09 11:20:02 +12:00
Aldo Cortesi
7ef68b5a13 Fix creation of new response when none existed before.
Fixes #133
2013-06-09 11:14:34 +12:00
Aldo Cortesi
19279033b3 Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2013-06-09 10:47:39 +12:00
Aldo Cortesi
0b5423f6a1 Merge pull request #129 from LordMike/master
Quick fix for issue #128
2013-06-08 15:46:24 -07:00
Marc Liyanage
09c95ece52 Re-run mitmproxywrapper.py with sudo if necessary. 2013-06-02 12:43:49 -07:00
Aldo Cortesi
ebf0aaa3db Merge branch 'master' of ssh.github.com:cortesi/mitmproxy 2013-05-30 09:22:16 +12:00
Aldo Cortesi
df7c7796b2 Update license trove classifier. 2013-05-30 09:22:00 +12:00
Ivaylo Popov
ffeede9b39 Use lsof instead of pfctl to find target host on OSX in transparent mode. 2013-05-27 23:09:42 -04:00
Aldo Cortesi
82cb1dae41 Merge pull request #131 from squidsoup/master
Easy dep install with pip
2013-05-27 03:11:05 -07:00
Kit Randel
aaba1bd7d1 Added requirements.txt to ease installation of deps for hacking on mitmproxy. 2013-05-24 15:23:47 +12:00
Michael Bisbjerg
125b3e5e5b - Quick-fix for issue #128
New bug: It correct-cases Content-Length for any webserver sending other casings, like CONTENT-LENGTH.
2013-05-21 15:57:14 +02:00
Aldo Cortesi
8608cdf177 Update PyOpenSSL version requirement. 2013-05-20 12:44:07 +12:00
Marc Liyanage
ceafd411f3 Change the proxy settings for all connected interfaces, not just the primary one. 2013-05-15 22:40:08 -07:00
Aldo Cortesi
3460d56fcc Merge pull request #124 from liyanage/master
Add mitmproxywrapper.py script for OS X users
2013-05-15 16:11:40 -07:00
Marc Liyanage
50ac988363 Add mitmproxywrapper.py 2013-05-15 15:24:34 -07:00
Jason A. Novak
bfb3828f37 Finalizing documentation 2013-04-21 14:30:30 -05:00
Jason A. Novak
208204d33a Further cleanup of documentation 2013-04-21 14:28:00 -05:00
Jason A. Novak
d48d3d4eb3 More documentation cleanup and formatting 2013-04-21 14:20:51 -05:00
Jason A. Novak
1400880d58 More documentation 2013-04-21 13:58:08 -05:00
Jason A. Novak
e951b86c21 More documentation 2013-04-21 13:36:05 -05:00
Jason A. Novak
52a4a8bbde Continue work on documentation of adding views 2013-04-21 12:40:35 -05:00
Jason A. Novak
0ad505ed7d Begin work on documenting adding a new view 2013-04-21 12:40:03 -05:00
341 changed files with 146264 additions and 6371 deletions

View File

@@ -2,5 +2,5 @@
branch = True
[report]
omit = *contrib*, *tnetstring*, *platform*, *console*
omit = *contrib*, *tnetstring*, *platform*, *console*, *main.py
include = *libmproxy*

5
.env Normal file
View File

@@ -0,0 +1,5 @@
DIR="${0%/*}"
if [ -z "$VIRTUAL_ENV" ] && [ -f "$DIR/../venv.mitmproxy/bin/activate" ]; then
echo "Activating mitmproxy virtualenv..."
source "$DIR/../venv.mitmproxy/bin/activate"
fi

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
libmproxy/web/static/**/* -diff
web/src/js/filt/filt.js -diff

13
.gitignore vendored
View File

@@ -1,14 +1,27 @@
.DS_Store
MANIFEST
/build
/dist
/tmp
/doc
/venv
/libmproxy/gui
/release/build
*.py[cdo]
*.swp
*.swo
mitmproxy.egg-info/
mitmproxyc
mitmdumpc
.coverage
.idea
netlib
pathod
libpathod
# UI
node_modules
bower_components
*.compiled.js
*.map

25
.travis.yml Normal file
View File

@@ -0,0 +1,25 @@
language: python
sudo: false
python:
- "2.7"
- pypy
# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
install:
- "pip install --src . -r requirements.txt"
# command to run tests, e.g. python setup.py test
script:
- "nosetests --with-cov --cov-report term-missing"
after_success:
- coveralls
notifications:
irc:
channels:
- "irc.oftc.net#mitmproxy"
on_success: change
on_failure: always
cache:
directories:
- /home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages
- /home/travis/virtualenv/python2.7.9/bin
- /home/travis/virtualenv/pypy-2.5.0/site-packages
- /home/travis/virtualenv/pypy-2.5.0/bin

176
CHANGELOG
View File

@@ -1,17 +1,179 @@
3 June 2015: mitmproxy 0.12.1
x January 2013: mitmproxy 0.9:
* mitmproxy console: mouse interaction - scroll in the flow list, click on
flow to view, click to switch between tabs.
* Update our crypto defaults: SHA256, 2048 bit RSA, 4096 bit DH parameters.
* BUGFIX: crash under some circumstances when copying to clipboard.
* BUGFIX: occasional crash when deleting flows.
18 May 2015: mitmproxy 0.12
* mitmproxy console: Significant revamp of the UI. The major changes are
listed below, and in addition almost every aspect of the UI has
been tweaked, and performance has improved significantly.
* mitmproxy console: A new options screen has been created ("o" shortcut),
and many options that were previously manipulated directly via a
keybinding have been moved there.
* mitmproxy console: Big improvement in palettes. This includes improvements
to all colour schemes. Palettes now set the terminal background colour by
default, and a new --palette-transparent option has been added to disable
this.
* mitmproxy console: g/G shortcuts throughout mitmproxy console to jump
to the beginning/end of the current view.
* mitmproxy console: switch palettes on the fly from the options screen.
* mitmproxy console: A cookie editor has been added for mitmproxy console
at long last.
* mitmproxy console: Various components of requests and responses can be
copied to the clipboard from mitmproxy - thanks to @marceloglezer.
* Support for creating new requests from scratch in mitmproxy console (@marceloglezer).
* SSLKEYLOGFILE environment variable to specify a logging location for TLS
master keys. This can be used with tools like Wireshark to allow TLS
decoding.
* Server facing SSL cipher suite specification (thanks to Jim Shaver).
* Official support for transparent proxying on FreeBSD - thanks to Mike C
(http://github.com/mike-pt).
* Many other small bugfixes and improvemenets throughout the project.
29 Dec 2014: mitmproxy 0.11.2:
* Configuration files - mitmproxy.conf, mitmdump.conf, common.conf in the
.mitmproxy directory.
* Better handling of servers that reject connections that are not SNI.
* Many other small bugfixes and improvements.
15 November 2014: mitmproxy 0.11.1:
* Bug fixes: connection leaks some crashes
7 November 2014: mitmproxy 0.11:
* Performance improvements for mitmproxy console
* SOCKS5 proxy mode allows mitmproxy to act as a SOCKS5 proxy server
* Data streaming for response bodies exceeding a threshold
(bradpeabody@gmail.com)
* Ignore hosts or IP addresses, forwarding both HTTP and HTTPS traffic
untouched
* Finer-grained control of traffic replay, including options to ignore
contents or parameters when matching flows (marcelo.glezer@gmail.com)
* Pass arguments to inline scripts
* Configurable size limit on HTTP request and response bodies
* Per-domain specification of interception certificates and keys (see
--cert option)
* Certificate forwarding, relaying upstream SSL certificates verbatim (see
--cert-forward)
* Search and highlighting for HTTP request and response bodies in
mitmproxy console (pedro@worcel.com)
* Transparent proxy support on Windows
* Improved error messages and logging
* Support for FreeBSD in transparent mode, using pf (zbrdge@gmail.com)
* Content view mode for WBXML (davidshaw835@air-watch.com)
* Better documentation, with a new section on proxy modes
* Generic TCP proxy mode
* Countless bugfixes and other small improvements
28 January 2014: mitmproxy 0.10:
* Support for multiple scripts and multiple script arguments
* Easy certificate install through the in-proxy web app, which is now
enabled by default
* Forward proxy mode, that forwards proxy requests to an upstream HTTP server
* Reverse proxy now works with SSL
* Search within a request/response using the "/" and "n" shortcut keys
* A view that beatifies CSS files if cssutils is available
* Bug fix, documentation improvements, and more.
25 August 2013: mitmproxy 0.9.2:
* Improvements to the mitmproxywrapper.py helper script for OSX.
* Don't take minor version into account when checking for serialized file
compatibility.
* Fix a bug causing resource exhaustion under some circumstances for SSL
connections.
* Revamp the way we store interception certificates. We used to store these
on disk, they're now in-memory. This fixes a race condition related to
cert handling, and improves compatibility with Windows, where the rules
governing permitted file names are weird, resulting in errors for some
valid IDNA-encoded names.
* Display transfer rates for responses in the flow list.
* Many other small bugfixes and improvements.
16 June 2013: mitmproxy 0.9.1:
* Use "correct" case for Content-Type headers added by mitmproxy.
* Make UTF environment detection more robust.
* Improved MIME-type detection for viewers.
* Always read files in binary mode (Windows compatibility fix).
* Some developer documentation.
15 May 2013: mitmproxy 0.9:
* Upstream certs mode is now the default.
* Add a WSGI container that lets you host in-proxy web applications.
* Full transparent proxy support for Linux and OSX.
* Introduce netlib, a common codebase for mitmproxy and pathod
(http://github.com/cortesi/netlib).
* Full support for SNI.
* Color palettes for mitmproxy, tailored for light and dark terminal
backgrounds.
@@ -22,12 +184,12 @@ x January 2013: mitmproxy 0.9:
match asset flows (js, images, css).
* Follow mode in mitmproxy ("F" shortcut) to "tail" flows as they arrive.
* --dummy-certs option to specify and preserve the dummy certificate
directory.
* Server replay from the current captured buffer.
* Huge improvements in content views. We now have viewers for AMF, HTML,
JSON, Javascript, images, XML, URL-encoded forms, as well as hexadecimal
and raw views.
@@ -36,7 +198,7 @@ x January 2013: mitmproxy 0.9:
on flows, based on a matching pattern.
* A graphical editor for path components in mitmproxy.
* A small set of standard user-agent strings, which can be used easily in
the header editor.

39
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,39 @@
# Contributing
Thank you for your interest in contributing to mitmproxy!
# Bug Reports
Bug Reports are very welcome - please file them on the GitHub [issue tracker](https://github.com/mitmproxy/mitmproxy/issues).
You can use the following template to structure your report:
```
##### Steps to reproduce the problem:
1.
2.
3.
##### What is the expected behavior?
##### What went wrong?
##### Any other comments?
---
mitmproxy version:
Operating System:
```
# Feature Requests
We're happy to hear what you'd like to see in mitmproxy. Please file feature requests on the GitHub [issue tracker](https://github.com/mitmproxy/mitmproxy/issues).
# Patches
We're always happy to accept patches. Please submit them in the form of pull requests to the main [mitmproxy repository](https://github.com/mitmproxy/mitmproxy/).
If you're working on something cool, please do not hesistate and get in touch!
Instructions for setting up a development environment can be found in the [README](README.mkd).

View File

@@ -1,35 +1,88 @@
759 Aldo Cortesi
1067 Aldo Cortesi
542 Maximilian Hils
76 Marcelo Glezer
18 Henrik Nordstrom
13 Thomas Roth
12 Pedro Worcel
11 Stephen Altamirano
11 Justus Wingert
11 Jim Shaver
10 András Veres-Szentkirályi
9 Legend Tang
8 Rouli
8 Jason A. Novak
7 Alexis Hildebrandt
5 Maximilian Hils
4 Bryan Bishop
5 Matthias Urlichs
5 Brad Peabody
5 Tomaz Muraus
5 elitest
4 root
4 Valtteri Virtanen
4 Wade 524
4 Bryan Bishop
4 Youhei Sakurai
4 Marc Liyanage
3 Chris Neasbitt
2 Michael Frister
2 Heikki Hannikainen
2 Jim Lloyd
2 Mark E. Haase
3 Zack B
3 Kyle Manna
3 Eli Shvartsman
2 Choongwoo Han
2 Rob Wills
2 alts
2 israel
1 Jakub Nawalaniec
1 Paul
1 phil plante
1 Rory McCann
1 Henrik Nordström
1 Rune Halvorsen
1 Sahn Lam
1 Felix Wolfsteller
1 Eric Entzel
1 Ulrich Petri
1 Andy Smith
2 Mark E. Haase
2 Jaime Soriano Pastor
2 Jim Lloyd
2 Heikki Hannikainen
2 Krzysztof Bielicki
2 Bennett Blodinger
2 Michael Frister
2 alts
1 Yuangxuan Wang
1 meeee
1 capt8bit
1 davidpshaw
1 deployable
1 joebowbeer
1 meeee
1 michaeljau
1 peralta
1 phil plante
1 sentient07
1 vzvu3k6k
1 Andy Smith
1 Dan Wilbraham
1 David Shaw
1 Eric Entzel
1 Felix Wolfsteller
1 Gabriel Kirkpatrick
1 Henrik Nordström
1 Ivaylo Popov
1 JC
1 Jakub Nawalaniec
1 James Billingham
1 Jean Regisser
1 Kit Randel
1 Lucas Cimon
1 Mathieu Mitchell
1 Jason A. Novak
1 Michael Bisbjerg
1 Mike C
1 Mikhail Korobov
1 Nick HS
1 Nick Raptis
1 Nicolas Esteves
1 Oleksandr Sheremet
1 Paul
1 Rich Somerfield
1 Rory McCann
1 Rune Halvorsen
1 Ryo Onodera
1 Sahn Lam
1 Seppo Yli-Olli
1 Sergey Chipiga
1 Steve Phillips
1 Steven Van Acker
1 Suyash
1 Tarashish Mishra
1 Terry Long
1 Ulrich Petri
1 Vyacheslav Bakhmutov
1 Wade Catron

View File

@@ -1,10 +1,10 @@
include LICENSE
include CHANGELOG
include CONTRIBUTORS
include README.txt
include mitmproxy mitmdump
include LICENSE CHANGELOG CONTRIBUTORS README.txt
exclude README.mkd
recursive-include examples *
recursive-include doc *
recursive-include test *
recursive-include libmproxy/resources *
recursive-exclude test *.swo *.swp *.pyc
recursive-include libmproxy *
recursive-exclude * *.pyc *.pyo *.swo *.swp
recursive-exclude netlib *
recursive-exclude libpathod *

View File

@@ -1,3 +1,9 @@
[![Build Status](https://travis-ci.org/mitmproxy/mitmproxy.svg?branch=master)](https://travis-ci.org/mitmproxy/mitmproxy) [![Coverage Status](https://coveralls.io/repos/mitmproxy/mitmproxy/badge.svg?branch=master)](https://coveralls.io/r/mitmproxy/mitmproxy)
[![Latest Version](https://pypip.in/version/mitmproxy/badge.svg?style=flat)](https://pypi.python.org/pypi/mitmproxy/)
[![Supported Python versions](https://pypip.in/py_versions/mitmproxy/badge.svg?style=flat)](https://pypi.python.org/pypi/mitmproxy)
[![Supported Python implementations](https://pypip.in/implementation/mitmproxy/badge.svg?style=flat)](https://pypi.python.org/pypi/mitmproxy/)
__mitmproxy__ is an interactive, SSL-capable man-in-the-middle proxy for HTTP
with a console interface.
@@ -10,6 +16,8 @@ mitmproxy.org website:
[mitmproxy.org](http://mitmproxy.org).
You can find complete directions for installing mitmproxy [here](http://mitmproxy.org/doc/install.html).
Features
--------
@@ -24,37 +32,68 @@ Features
- SSL certificates for interception are generated on the fly.
- And much, much more.
__mitmproxy__ is tested and developed on OSX, Linux and OpenBSD. On Windows,
only mitmdump is supported, which does not have a graphical user interface.
Requirements
------------
* [Python](http://www.python.org) 2.7.x.
* [netlib](http://pypi.python.org/pypi/netlib), version matching mitmproxy.
* [PyOpenSSL](http://pypi.python.org/pypi/pyOpenSSL) 0.13 or newer.
* [pyasn1](http://pypi.python.org/pypi/pyasn1) 0.1.2 or newer.
* [urwid](http://excess.org/urwid/) version 1.1 or newer.
* [PIL](http://www.pythonware.com/products/pil/) version 1.1 or newer.
* [lxml](http://lxml.de/) version 2.3 or newer.
* [flask](http://flask.pocoo.org/) version 0.9 or newer.
Optional, for extended content decoding:
* [PyAMF](http://www.pyamf.org/) version 0.6.1 or newer.
* [protobuf](https://code.google.com/p/protobuf/) version 2.5.0 or newer.
__mitmproxy__ is tested and developed on OSX, Linux and OpenBSD. Windows is not
officially supported at the moment.
Hacking
-------
The following components are needed if you plan to hack on mitmproxy:
To get started hacking on mitmproxy, make sure you have
[Python](http://www.python.org) 2.7.x. with
[virtualenv](https://virtualenv.pypa.io/en/latest/) installed (you can find
installation instructions for virtualenv
[here](https://virtualenv.pypa.io/en/latest/installation.html)). Then do the
following:
* The test suite uses the [nose](http://readthedocs.org/docs/nose/en/latest/) unit testing
framework and requires [pathod](http://pathod.org) and [flask](http://flask.pocoo.org/).
* Rendering the documentation requires [countershape](http://github.com/cortesi/countershape).
```
$ git clone https://github.com/mitmproxy/mitmproxy.git
$ git clone https://github.com/mitmproxy/netlib.git
$ git clone https://github.com/mitmproxy/pathod.git
$ cd mitmproxy
$ ./dev
```
The *dev* script will create a virtualenv environment in a directory called
"venv.mitmproxy", and install all of mitmproxy's development requirements, plus
all optional modules. The primary mitmproxy components - mitmproxy, netlib and
pathod - are all installed "editable", so any changes to the source in the git
checkouts will be reflected live in the virtualenv.
To confirm that you're up and running, activate the virtualenv, and run the
mitmproxy test suite:
```shell
$ source ../venv.mitmproxy/bin/activate # ..\venv.mitmproxy\Scripts\activate.bat on Windows
$ nosetests ./test
```
Note that the main executables for the project - **mitmdump**, **mitmproxy** and
**mitmweb** - are all created within the virtualenv. After activating the
virtualenv, they will be on your $PATH, and you can run them like any other
command:
```$ mitmdump --version```
For convenience, the project includes an
[autoenv](https://github.com/kennethreitz/autoenv) file
([.env](https://github.com/mitmproxy/mitmproxy/blob/master/.env)) that
auto-activates the virtualenv when you cd into the mitmproxy directory.
### Testing
If you've followed the procedure above, you already have all the development
requirements installed, and you can simply run the test suite:
```nosetests ./test```
Please ensure that all patches are accompanied by matching changes in the test
suite. The project maintains 100% test coverage.
### Docs
Rendering the documentation requires [countershape](http://github.com/cortesi/countershape). After installation, you can render the documentation to the doc like this:
`cshape doc-src doc`

20
check_coding_style.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/bin/bash
autopep8 -i -r -a -a .
if [[ -n "$(git status -s)" ]]; then
echo "autopep8 yielded the following changes:"
git status -s
git --no-pager diff
exit 1
fi
autoflake -i -r --remove-all-unused-imports --remove-unused-variables .
if [[ -n "$(git status -s)" ]]; then
echo "autoflake yielded the following changes:"
git status -s
git --no-pager diff
exit 1
fi
echo "Coding style seems to be ok."
exit 0

12
dev Executable file
View File

@@ -0,0 +1,12 @@
#!/bin/bash
set -e
VENV=../venv.mitmproxy
python -m virtualenv $VENV
source $VENV/bin/activate
pip install --src .. -r requirements.txt
echo ""
echo "* Created virtualenv environment in $VENV."
echo "* Installed all dependencies into the virtualenv."
echo "* Activated virtualenv environment."

14
dev.bat Normal file
View File

@@ -0,0 +1,14 @@
@echo off
set VENV=..\venv.mitmproxy
virtualenv %VENV%
if %errorlevel% neq 0 exit /b %errorlevel%
call %VENV%\Scripts\activate.bat
if %errorlevel% neq 0 exit /b %errorlevel%
pip install --src .. -r requirements.txt
if %errorlevel% neq 0 exit /b %errorlevel%
echo.
echo * Created virtualenv environment in %VENV%.
echo * Installed all dependencies into the virtualenv.
echo * Activated virtualenv environment.

File diff suppressed because one or more lines are too long

6706
doc-src/01-vendor.css Normal file

File diff suppressed because it is too large Load Diff

43
doc-src/02-app.css Normal file
View File

@@ -0,0 +1,43 @@
.masthead {
text-align: center;
border-bottom: 0;
}
.frontpage .talks div {
margin-bottom: 10px;
}
.nav-sidebar {
background-color: #f0f0f0;
margin-bottom: 20px;
}
.nav-sidebar li {
line-height: 1.1;
}
.nav-sidebar li > a,
.nav-sidebar .nav-header {
padding-left: 20px;
}
.nav-sidebar .nav-header {
margin-top: 1em;
font-size: 1.2em;
font-weight: bold;
}
.nav-sidebar .active > a,
.nav-sidebar .active > a:hover,
.nav-sidebar .active > a:focus {
color: #fff;
background-color: #428bca;
}
.tablenum {
font-weight: bold;
}
.nowrap {
white-space: nowrap;
}
.page-header {
margin: 0px 0 22px;
}
.page-header h1 {
margin-top: 0px;
}
/*# sourceMappingURL=02-app.css.map */

View File

@@ -1,12 +0,0 @@
body {
padding-top: 60px;
padding-bottom: 40px;
}
.tablenum {
font-weight: bold;
}
.nowrap {
white-space: nowrap;
}

View File

@@ -1,78 +1,44 @@
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="@!urlTo(idxpath)!@">mitmproxy 0.9 docs</a>
</div><!--/.nav-collapse -->
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="span3">
<div class="well sidebar-nav">
<ul class="nav nav-list">
$!nav(idxpath, this, state)!$
$!nav("install.html", this, state)!$
$!nav("howmitmproxy.html", this, state)!$
<li class="nav-header">Tools</li>
$!nav("mitmproxy.html", this, state)!$
$!nav("mitmdump.html", this, state)!$
<li class="nav-header">Features</li>
$!nav("anticache.html", this, state)!$
$!nav("clientreplay.html", this, state)!$
$!nav("filters.html", this, state)!$
$!nav("proxyauth.html", this, state)!$
$!nav("replacements.html", this, state)!$
$!nav("serverreplay.html", this, state)!$
$!nav("setheaders.html", this, state)!$
$!nav("sticky.html", this, state)!$
$!nav("reverseproxy.html", this, state)!$
$!nav("upstreamcerts.html", this, state)!$
<li class="nav-header">Installing Certificates</li>
$!nav("ssl.html", this, state)!$
$!nav("certinstall/firefox.html", this, state)!$
$!nav("certinstall/osx.html", this, state)!$
$!nav("certinstall/windows7.html", this, state)!$
$!nav("certinstall/ios.html", this, state)!$
$!nav("certinstall/ios-simulator.html", this, state)!$
$!nav("certinstall/android.html", this, state)!$
<li class="nav-header">Transparent Proxying</li>
$!nav("transparent.html", this, state)!$
$!nav("transparent/linux.html", this, state)!$
$!nav("transparent/osx.html", this, state)!$
<li class="nav-header">Tutorials</li>
$!nav("tutorials/30second.html", this, state)!$
$!nav("tutorials/gamecenter.html", this, state)!$
<li class="nav-header">Scripting mitmproxy</li>
$!nav("scripting/inlinescripts.html", this, state)!$
$!nav("scripting/libmproxy.html", this, state)!$
</ul>
</div>
</div>
<div class="span9">
<div class="page-header">
<h1>@!this.title!@</h1>
<!DOCTYPE html>
<html>
<head>
<title>@!pageTitle!@</title>
$!header!$
</head>
<body>
<div class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="@!urlTo("/index.html")!@">
<img height="20px" src="@!urlTo("mitmproxy-long.png")!@"/>
</a>
</div>
<div class="navbar-header navbar-right">
<a class="navbar-brand" hre="#">$!VERSION!$ docs</a>
</div>
</div>
</div>
$!body!$
</div>
</div>
<hr>
<footer>
<p>@!copyright!@</p>
</footer>
</div>
<div class="container">
<div class="row">
<div class="col-md-3">
$!navbar!$
</div>
<div class="col-md-9">
<div class="page-header">
<h1>@!this.title!@</h1>
</div>
$!body!$
</div>
</div>
</div>
<div class="container">
<hr>
<footer>
<p>@!copyright!@</p>
</footer>
</div>
</body>
</html>

50
doc-src/_nav.html Normal file
View File

@@ -0,0 +1,50 @@
<ul class="nav nav-sidebar">
$!nav(idxpath, this, state)!$
$!nav("install.html", this, state)!$
$!nav("certinstall.html", this, state)!$
$!nav("howmitmproxy.html", this, state)!$
$!nav("modes.html", this, state)!$
<li class="nav-header">Tools</li>
$!nav("mitmproxy.html", this, state)!$
$!nav("mitmdump.html", this, state)!$
$!nav("config.html", this, state)!$
<li class="nav-header">Features</li>
$!nav("anticache.html", this, state)!$
$!nav("filters.html", this, state)!$
$!nav("replacements.html", this, state)!$
$!nav("clientreplay.html", this, state)!$
$!nav("serverreplay.html", this, state)!$
$!nav("setheaders.html", this, state)!$
$!nav("passthrough.html", this, state)!$
$!nav("proxyauth.html", this, state)!$
$!nav("reverseproxy.html", this, state)!$
$!nav("responsestreaming.html", this, state)!$
$!nav("socksproxy.html", this, state)!$
$!nav("sticky.html", this, state)!$
$!nav("tcpproxy.html", this, state)!$
$!nav("upstreamproxy.html", this, state)!$
$!nav("upstreamcerts.html", this, state)!$
<li class="nav-header">Transparent Proxying</li>
$!nav("transparent.html", this, state)!$
$!nav("transparent/linux.html", this, state)!$
$!nav("transparent/osx.html", this, state)!$
<li class="nav-header">Scripting</li>
$!nav("scripting/inlinescripts.html", this, state)!$
$!nav("scripting/libmproxy.html", this, state)!$
<li class="nav-header">Tutorials</li>
$!nav("tutorials/30second.html", this, state)!$
$!nav("tutorials/gamecenter.html", this, state)!$
$!nav("tutorials/transparent-dhcp.html", this, state)!$
<li class="nav-header">Hacking</li>
$!nav("dev/architecture.html", this, state)!$
$!nav("dev/testing.html", this, state)!$
$!nav("dev/sslkeylogfile.html", this, state)!$
</ul>

View File

@@ -1,83 +0,0 @@
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="@!urlTo("/index.html")!@">mitmproxy</a>
<div class="nav">
<ul class="nav">
<li $!'class="active"' if this.match("/index.html", True) else ""!$> <a href="@!top!@/index.html">home</a> </li>
<li $!'class="active"' if this.under("/doc") else ""!$><a href="@!top!@/doc/index.html">docs</a></li>
<li $!'class="active"' if this.under("/about.html") else ""!$><a href="@!top!@/about.html">about</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="span3">
<div class="well sidebar-nav">
<ul class="nav nav-list">
$!nav(idxpath, this, state)!$
$!nav("install.html", this, state)!$
$!nav("howmitmproxy.html", this, state)!$
<li class="nav-header">Tools</li>
$!nav("mitmproxy.html", this, state)!$
$!nav("mitmdump.html", this, state)!$
<li class="nav-header">Features</li>
$!nav("anticache.html", this, state)!$
$!nav("clientreplay.html", this, state)!$
$!nav("filters.html", this, state)!$
$!nav("proxyauth.html", this, state)!$
$!nav("replacements.html", this, state)!$
$!nav("serverreplay.html", this, state)!$
$!nav("setheaders.html", this, state)!$
$!nav("sticky.html", this, state)!$
$!nav("reverseproxy.html", this, state)!$
$!nav("upstreamcerts.html", this, state)!$
<li class="nav-header">SSL interception</li>
$!nav("ssl.html", this, state)!$
$!nav("certinstall/firefox.html", this, state)!$
$!nav("certinstall/osx.html", this, state)!$
$!nav("certinstall/windows7.html", this, state)!$
$!nav("certinstall/ios.html", this, state)!$
$!nav("certinstall/android.html", this, state)!$
<li class="nav-header">Transparent Proxying</li>
$!nav("transparent.html", this, state)!$
$!nav("transparent/linux.html", this, state)!$
$!nav("transparent/osx.html", this, state)!$
<li class="nav-header">Tutorials</li>
$!nav("tutorials/30second.html", this, state)!$
$!nav("tutorials/gamecenter.html", this, state)!$
<li class="nav-header">Scripting mitmproxy</li>
$!nav("scripting/inlinescripts.html", this, state)!$
$!nav("scripting/libmproxy.html", this, state)!$
</ul>
</div>
</div>
<div class="span9">
<div class="page-header">
<h1>@!this.title!@</h1>
</div>
$!body!$
</div>
</div>
<hr>
<footer>
<p>@!copyright!@</p>
</footer>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

151
doc-src/certinstall.html Normal file
View File

@@ -0,0 +1,151 @@
## On This Page
* [Introduction](#docIntro)
* [Quick Setup](#docQuick)
* [Installing the mitmproxy CA certificate manually](#docManual)
* [More on mitmproxy certificates](#docMore)
* [CA and cert files](#docCertfiles)
* [Using a custom certificate](#docCustom)
* [Using a client side certificate](#docClient)
* [Using a custom certificate authority](#docCA)
## <a id="docIntro"></a>Introduction
Mitmproxy can decrypt encrypted traffic on the fly, as long as the client
trusts its built-in certificate authority. Usually this means that the
mitmproxy CA certificates have to be installed on the client device.
## <a id="docQuick"></a>Quick Setup
By far the easiest way to install the mitmproxy certificates is to use the
built-in certificate installation app. To do this, just start mitmproxy and
configure your target device with the correct proxy settings. Now start a
browser on the device, and visit the magic domain **mitm.it**. You should see
something like this:
<img src="@!urlTo("certinstall-webapp.png")!@"></img>
Click on the relevant icon, and follow the setup instructions for the platform
you're on, and you are good to go.
## <a id="docManual"></a>Installing the mitmproxy CA certificate manually
Sometimes using the quick install app is not an option - Java or the IOS
similator spring to mind - or you just need to do it manually for some other
reason. Below is a list of pointers to manual certificate installation
documentation for some common platforms:
<table class="table">
<tr>
<td><a href="https://github.com/ADVTOOLS/ADVTrustStore#how-to-use-advtruststore"</a>iOS Simulator</td>
<td><a href="http://docs.oracle.com/cd/E19906-01/820-4916/geygn/index.html">Java</a></td>
</tr>
<tr>
<td><a href="http://kb.mit.edu/confluence/pages/viewpage.action?pageId=152600377">iOS</a></td>
<td><a href="http://wiki.cacert.org/FAQ/ImportRootCert#Android_Phones_.26_Tablets">Android/Android Simulator</a></td>
</tr>
<tr>
<td><a href="http://windows.microsoft.com/en-ca/windows/import-export-certificates-private-keys#1TC=windows-7">Windows</a></td>
<td><a href="https://support.apple.com/kb/PH7297?locale=en_US">Mac OS X</a></td>
</tr>
<tr>
<td><a href="http://askubuntu.com/questions/73287/how-do-i-install-a-root-certificate/94861#94861">Ubuntu/Debian</a></td>
<td><a href="https://wiki.mozilla.org/MozillaRootCertificate#Mozilla_Firefox">Firefox</a></td>
</tr>
<tr>
<td><a href="https://code.google.com/p/chromium/wiki/LinuxCertManagement">Chrome on Linux</a></td>
</tr>
</table>
## <a id="docMore"></a>More on mitmproxy certificates
The first time __mitmproxy__ or __mitmdump__ is run, the mitmproxy Certificate
Authority(CA) is created in the config directory (~/.mitmproxy by default).
This CA is used for on-the-fly generation of dummy certificates for each of the
SSL sites that your client visits. Since your browser won't trust the
__mitmproxy__ CA out of the box , you will see an SSL certificate warning every
time you visit a new SSL domain through __mitmproxy__. When you are testing a
single site through a browser, just accepting the bogus SSL cert manually is
not too much trouble, but there are a many circumstances where you will want to
configure your testing system or browser to trust the __mitmproxy__ CA as a
signing root authority.
## <a id="docCertfiles"></a>CA and cert files
The files created by mitmproxy in the .mitmproxy directory are as follows:
<table class="table">
<tr>
<td class="nowrap">mitmproxy-ca.pem</td>
<td>The private key and certificate in PEM format.</td>
</tr>
<tr>
<td class="nowrap">mitmproxy-ca-cert.pem</td>
<td>The certificate in PEM format. Use this to distribute to most
non-Windows platforms.</td>
</tr>
<tr>
<td class="nowrap">mitmproxy-ca-cert.p12</td>
<td>The certificate in PKCS12 format. For use on Windows.</td>
</tr>
<tr>
<td class="nowrap">mitmproxy-ca-cert.cer</td>
<td>Same file as .pem, but with an extension expected by some Android
devices.</td>
</tr>
</table>
## <a id="docCustom"></a>Using a custom certificate
You can use your own certificate by passing the <kbd>--cert</kbd> option to
mitmproxy. mitmproxy then uses the provided certificate for interception of the
specified domains instead of generating a certificate signed by its own CA.
The certificate file is expected to be in the PEM format. You can include
intermediary certificates right below your leaf certificate, so that you PEM
file roughly looks like this:
<pre>
-----BEGIN PRIVATE KEY-----
&lt;private key&gt;
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
&lt;cert&gt;
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
&lt;intermediary cert (optional)&gt;
-----END CERTIFICATE-----
</pre>
For example, you can generate a certificate in this format using these instructions:
<pre class="terminal">
$ openssl genrsa -out cert.key 2048
$ openssl req -new -x509 -key cert.key -out cert.crt
(Specify the mitm domain as Common Name, e.g. *.google.com)
$ cat cert.key cert.crt > cert.pem
$ mitmproxy --cert=cert.pem
</pre>
## <a id="docClient"></a>Using a client side certificate
You can use a client certificate by passing the <kbd>--client-certs
DIRECTORY</kbd> option to mitmproxy. If you visit example.org, mitmproxy looks
for a file named example.org.pem in the specified directory and uses this as
the client cert. The certificate file needs to be in the PEM format and should
contain both the unencrypted private key and the certificate.
## <a id="docCA"></a>Using a custom certificate authority
By default, mitmproxy will use <samp>~/.mitmproxy/mitmproxy-ca.pem</samp> as
the certificate authority to generate certificates for all domains for which no
custom certificate is provided (see above). You can use your own certificate
authority by passing the <kbd>--confdir</kbd> option to mitmproxy. Mitmproxy
will then look for <samp>mitmproxy-ca.pem</samp> in the specified directory. If
no such file exists, it will be generated automatically.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -1,46 +0,0 @@
The proxy situation on Android is [an
embarrasment](http://code.google.com/p/android/issues/detail?id=1273). It's
scarcely credible, but Android didn't have a global proxy setting at all until
quite recently, and it's still not supported on many common Android versions.
In the meantime the app ecosystem has grown used to life without this basic
necessity, and many apps merrily ignore it even if it's there. This situation
is improving, but in many circumstances using [transparent
mode](@!urlTo("transparent.html")!@) is mandatory for testing Android apps.
We used an Asus Transformer Prime TF201 with Android 4.0.3 in the examples
below - your device may differ, but the broad process should be similar.
## Getting the certificate onto the device
First we need to get the __mitmproxy-ca-cert.cer__ file into the
__/sdcard/Downloads__ folder on the device. There are a number of ways to do
this. If you have the Android Developer Tools installed, you can use [__adb
push__](http://developer.android.com/tools/help/adb.html) to accomplish this.
Depending on your device, you could also transfer the file using external media
like an SD Card. In this example, we're using wget from within a terminal
emulator to transfer the certificate from a local HTTP server:
<img src="android-shellwgetmitmproxyca.png"/>
## Installing the certificate
Once we have the certificate on the local disk, we need to import it into the
list of trusted CAs. Go to Settings -&gt; Security -&gt; Credential Storage,
and select "Install from storage":
<img src="android-settingssecuritymenu.png"/>
The certificate in /sdcard/Downloads is automatically located and offered for
installation. Installing the cert will delete the download file from the local
disk:
<img src="android-settingssecurityinstallca.png"/>
Afterwards, you should see the certificate listed in the Trusted Credentials
store:
<img src="android-settingssecurityuserinstalledca.png"/>

View File

@@ -1,23 +0,0 @@
How to install the __mitmproxy__ certificate authority in Firefox:
<ol class="tlist">
<li> If needed, copy the ~/.mitmproxy/mitmproxy-ca-cert.pem file to the target. </li>
<li>Open preferences, click on "Advanced", then select"Encryption":
<img src="@!urlTo('firefox3.jpg')!@"/>
</li>
<li> Click "View Certificates", "Import", and select the certificate file:
<img src="@!urlTo('firefox3-import.jpg')!@"/>
</li>
<li>Tick "Trust this CS to identify web sites", and click "Ok":
<img src="@!urlTo('firefox3-trust.jpg')!@"/>
</li>
<li> You should now see the mitmproxy certificate listed in the Authorities
tab.</li>
</ol>

View File

@@ -1,10 +0,0 @@
from countershape import Page
pages = [
Page("firefox.html", "Firefox"),
Page("osx.html", "OSX"),
Page("windows7.html", "Windows 7"),
Page("ios.html", "IOS"),
Page("ios-simulator.html", "IOS Simulator"),
Page("android.html", "Android"),
]

View File

@@ -1,23 +0,0 @@
How to install the __mitmproxy__ certificate authority in the IOS simulator:
<ol class="tlist">
<li> First, check out the <a
href="https://github.com/ADVTOOLS/ADVTrustStore">ADVTrustStore</a> tool
from github.</li>
<li> Now, run the following command:
<pre class="terminal">./iosCertTrustManager.py -a ~/.mitmproxy/mitmproxy-ca-cert.pem</pre>
</li>
</ol>
Note that although the IOS simulator has its own certificate store, it shares
the proxy settings of the host operating system. You will therefore to have
configure your OSX host's proxy settings to use the mitmproxy instance you want
to test with.

View File

@@ -1,21 +0,0 @@
How to install the __mitmproxy__ certificate authority on IOS devices:
<ol class="tlist">
<li>Set up the Mail app on the device to receive email.</li>
<li>Mail the mitmproxy-ca-cert.pem file to the device, and tap on the attachment.</li>
<li>You will be prompted to install a profile. Click "Install":
<img src="@!urlTo('ios-profile.png')!@"/></li>
<li>Accept the warning by clicking "Install" again:
<img src="@!urlTo('ios-warning.png')!@"/></li>
<li>The certificate should now be trusted:
<img src="@!urlTo('ios-installed.png')!@"/></li>
</ol>

View File

@@ -1,16 +0,0 @@
How to install the __mitmproxy__ certificate authority in OSX:
<ol class="tlist">
<li>Open Finder, and double-click on the mitmproxy-ca-cert.pem file.</li>
<li>You will be prompted to add the certificate. Click "Always Trust":
<img src="@!urlTo('osx-addcert-alwaystrust.png')!@"/>
</li>
<li> You may be prompted for your password. You should now see the
mitmproxy cert listed under "Certificates".</li>
</ol>

View File

@@ -1,32 +0,0 @@
How to install the __mitmproxy__ certificate authority in Windows 7:
<ol class="tlist">
<li> Copy the ~/.mitmproxy/mitmproxy-ca-cert.p12 file to the target system. </li>
<li>
Double-click the certificate file. You should see a certificate import wizard:
<img src="@!urlTo('win7-wizard.png')!@"/>
</li>
<li>
Click "Next" until you're prompted for the certificate store:
<img src="@!urlTo('win7-certstore.png')!@"/>
</li>
<li>
<p>Select "Place all certificates in the following store", and select "Trusted Root Certification Authorities":</p>
<img src="@!urlTo('win7-certstore-trustedroot.png')!@"/>
</li>
<li> Click "Next" and "Finish". </li>
</ol>

86
doc-src/config.html Normal file
View File

@@ -0,0 +1,86 @@
Mitmproxy is configured through a set of files in the users ~/.mitmproxy
directory.
<table class="table">
<tbody>
<tr>
<th>mitmproxy.conf</th>
<td>Settings for the <b>mitmproxy</b>. This file can contain any options supported by mitmproxy.</td>
</tr>
<tr>
<th>mitmdump.conf</th>
<td>Settings for the <b>mitmdump</b>. This file can contain any options supported by mitmdump.</td>
</tr>
<tr>
<th>common.conf</th>
<td>Settings shared between all command-line tools. Settings in
this file are over-ridden by those in the tool-specific
files. Only options shared by mitmproxy and mitmdump should be used in this file. </td>
</tr>
</tbody>
</table>
# Syntax
## Comments
<pre>
# this is a comment
; this is also a comment (.ini style)
--- and this is a comment too (yaml style)
</pre>
## Key/Value pairs
- Keys and values are case-sensitive
- Whitespace is ignored
- Lists are comma-delimited, and enclosed in square brackets
<pre>
name = value # (.ini style)
name: value # (yaml style)
--name value # (command-line option style)
fruit = [apple, orange, lemon]
indexes = [1, 12, 35 , 40]
</pre>
## Flags
These are boolean options that take no value but true/false.
<pre>
name = true # (.ini style)
name
--name # (command-line option style)
</pre>
# Options
The options available in the config files are precisely those available as
command-line flags, with the key being the option's long name. To get a
complete list of these, use the __--help__ option on each of the tools. Be
careful to only specify common options in the __common.conf__ file -
unsupported options in this file will be detected as an error on startup.
# Examples
## common.conf
Note that __port__ is an option supported by all tools.
<pre class="code">
port = 8080
</pre>
## mitmproxy.conf
<pre class="code">
palette = light
</pre>

View File

@@ -0,0 +1,24 @@
# Adapted from http://tldp.org/HOWTO/TransparentProxy-6.html (6.2 Second method)
# Note that the choice of firewall mark (3) and routing table (2) was fairly arbitrary.
# If you are already using policy routing or firewall marking for some other purpose,
# make sure you choose unique numbers here. Otherwise, don't worry about it.
# On the router, run
PROXY_IP=192.168.1.100
TARGET_IP=192.168.1.110
iptables -t mangle -A PREROUTING -j ACCEPT -p tcp -m multiport --dports 80,443 -s ! $TARGET_IP
# Alternative to MITM the whole network:
# iptables -t mangle -A PREROUTING -j ACCEPT -p tcp -m multiport --dports 80,443 -s $PROXY_IP
iptables -t mangle -A PREROUTING -j MARK --set-mark 3 -p tcp -m multiport --dports 80,443
ip rule add fwmark 3 table 2
ip route add default via $PROXY_IP dev br0 table 2
# On the proxy machine, run
iptables -A PREROUTING -t nat -i eth0 -p tcp -m multiport --dports 80,443 -j REDIRECT --to-port 8080

View File

@@ -0,0 +1,52 @@
As discussed in [the Flow View section of the mitmproxy
overview](@!urlTo("mitmproxy.html")!@), mitmproxy allows you to inspect and
manipulate flows. When inspecting a single flow, mitmproxy uses a number of
heuristics to show a friendly view of various content types; if mitmproxy
cannot show a friendly view, mitmproxy defaults to a __raw__ view.
Each content type invokes a different flow viewer to parse the data and display
the friendly view. Users can add custom content viewers by adding a view class
to contentview.py, discussed below.
## Adding a new View class to contentview.py
The content viewers used by mitmproxy to present a friendly view of various
content types are stored in contentview.py. Reviewing this file shows a number
of classes named ViewSomeDataType, each with the properties: __name__,
__prompt__, and __content\_types__ and a function named __\_\_call\_\___.
Adding a new content viewer to parse a data type is as simple as writing a new
View class. Your new content viewer View class should have the same properties
as the other View classes: __name__, __prompt__, and __content\_types__ and a
__\_\_call\_\___ function to parse the content of the request/response.
* The __name__ property should be a string describing the contents and new content viewer;
* The __prompt__ property should be a two item tuple:
- __1__: A string that will be used to display the new content viewer's type; and
- __2__: A one character string that will be the hotkey used to select the new content viewer from the Flow View screen;
* The __content\_types__ property should be a list of strings of HTTP Content\-Types that the new content viewer can parse.
* Note that mitmproxy will use the content\_types to try and heuristically show a friendly view of content and that you can override the built-in views by populating content\_types with values for content\_types that are already parsed -- e.g. "image/png".
After defining the __name__, __prompt__, and __content\_types__ properties of
the class, you should write the __\_\_call\_\___ function, which will parse the
request/response data and provide a friendly view of the data. The
__\_\_call\_\___ function should take the following arguments: __self__,
__hdrs__, __content__, __limit__; __hdrs__ is a ODictCaseless object containing
the headers of the request/response; __content__ is the content of the
request/response, and __limit__ is an integer representing the amount of data
to display in the view window.
The __\_\_call\_\___ function returns two values: (1) a string describing the
parsed data; and (2) the parsed data for friendly display. The parsed data to
be displayed should be a list of strings formatted for display. You can use
the __\_view\_text__ function in contentview.py to format text for display.
Alternatively, you can display content as a series of key-value pairs; to do
so, prepare a list of lists, where each list item is a two item list -- a key
that describes the data, and then the data itself; after preparing the list of
lists, use the __common.format\_keyvals__ function on it to prepare it as text
for display.
If the new content viewer fails or throws an exception, mitmproxy will default
to a __raw__ view.

View File

@@ -0,0 +1,8 @@
To give you a better understanding of how mitmproxy works, mitmproxy's
high-level architecture is detailed in the following graphic:
<img class="img-responsive" src="@!urlTo('schematics/architecture.png')!@">
<a href="@!urlTo('schematics/architecture.pdf')!@">(architecture.pdf)</a>
<p>Please don't refrain from asking any further
questions on the mailing list, the IRC channel or the GitHub issue tracker.</p>

8
doc-src/dev/index.py Normal file
View File

@@ -0,0 +1,8 @@
from countershape import Page
pages = [
Page("testing.html", "Testing"),
Page("architecture.html", "Architecture"),
Page("sslkeylogfile.html", "TLS Master Secrets"),
# Page("addingviews.html", "Writing Content Views"),
]

View File

@@ -0,0 +1,8 @@
The SSL master keys can be logged by mitmproxy so that external programs can decrypt TLS connections both from and to the proxy.
Key logging is enabled by setting the environment variable <samp>SSLKEYLOGFILE</samp> so that it points to a writable
text file. Recent versions of WireShark can use these log files to decrypt packets.
You can specify the key file path in WireShark via<br>
<samp>Edit → Preferences → Protocols → SSL → (Pre)-Master-Secret log filename</samp>.
Note that <samp>SSLKEYLOGFILE</samp> is respected by other programs as well, e.g. Firefox and Chrome.
If this creates any issues, you can set <samp>MITMPROXY_SSLKEYLOGFILE</samp> alternatively.

43
doc-src/dev/testing.html Normal file
View File

@@ -0,0 +1,43 @@
All the mitmproxy projects strive to maintain 100% code coverage. In general,
patches and pull requests will be declined unless they're accompanied by a
suitable extension to the test suite.
Our tests are written for the [nose](https://nose.readthedocs.org/en/latest/).
At the point where you send your pull request, a command like this:
<pre class="terminal">
> nosetests --with-cov --cov-report term-missing ./test
</pre>
Should give output something like this:
<pre class="terminal">
> ---------- coverage: platform darwin, python 2.7.2-final-0 --
> Name Stmts Miss Cover Missing
> ----------------------------------------------------
> libmproxy/__init__ 0 0 100%
> libmproxy/app 4 0 100%
> libmproxy/cmdline 100 0 100%
> libmproxy/controller 69 0 100%
> libmproxy/dump 150 0 100%
> libmproxy/encoding 39 0 100%
> libmproxy/filt 201 0 100%
> libmproxy/flow 891 0 100%
> libmproxy/proxy 427 0 100%
> libmproxy/script 27 0 100%
> libmproxy/utils 133 0 100%
> libmproxy/version 4 0 100%
> ----------------------------------------------------
> TOTAL 2045 0 100%
> ----------------------------------------------------
> Ran 251 tests in 11.864s
</pre>
There are exceptions to the coverage requirement - for instance, much of the
console interface code can't sensibly be unit tested. These portions are
excluded from coverage analysis either in the **.coveragerc** file, or using
**#pragma no-cover** directives. To keep our coverage analysis relevant, we use
these measures as sparingly as possible.

View File

@@ -4,11 +4,16 @@ pages = [
Page("anticache.html", "Anticache"),
Page("clientreplay.html", "Client-side replay"),
Page("filters.html", "Filter expressions"),
Page("passthrough.html", "Ignore Domains"),
Page("proxyauth.html", "Proxy Authentication"),
Page("replacements.html", "Replacements"),
Page("responsestreaming.html", "Response Streaming"),
Page("reverseproxy.html", "Reverse proxy mode"),
Page("socksproxy.html", "SOCKS Mode"),
Page("setheaders.html", "Set Headers"),
Page("serverreplay.html", "Server-side replay"),
Page("sticky.html", "Sticky cookies and auth"),
Page("proxyauth.html", "Proxy Authentication"),
Page("replacements.html", "Replacements"),
Page("reverseproxy.html", "Reverse proxy mode"),
Page("tcpproxy.html", "TCP Proxy"),
Page("upstreamcerts.html", "Upstream Certs"),
Page("upstreamproxy.html", "Upstream proxy mode"),
]

View File

@@ -0,0 +1,84 @@
There are two main reasons why you may want to exempt some traffic from mitmproxy's interception mechanism:
- **Certificate pinning:** Some traffic is is protected using
[certificate pinning](https://security.stackexchange.com/questions/29988/what-is-certificate-pinning) and mitmproxy's
interception leads to errors. For example, Windows Update or the Apple App Store fail to work if mitmproxy is active.
- **Convenience:** You really don't care about some parts of the traffic and just want them to go away.
If you want to peek into (SSL-protected) non-HTTP connections, check out the [tcp proxy](@!urlTo("tcpproxy.html")!@) feature.
If you want to ignore traffic from mitmproxy's processing because of large response bodies, take a look at the
[response streaming](@!urlTo("responsestreaming.html")!@) feature.
## How it works
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th> <td>--ignore regex</td>
</tr>
<tr>
<th>mitmproxy shortcut</th> <td><b>I</b></td>
</tr>
</tbody>
</table>
mitmproxy allows you to specify a regex which is matched against a <code>host:port</code> string (e.g. "example.com:443")
to determine hosts that should be excluded.
There are two important quirks to consider:
- **In transparent mode, the ignore pattern is matched against the IP.** While we usually infer the hostname from the
Host header if the --host argument is passed to mitmproxy, we do not have access to this information before the SSL
handshake.
- In regular mode, explicit HTTP requests are never ignored.[^explicithttp] The ignore pattern is applied on CONNECT
requests, which initiate HTTPS or clear-text WebSocket connections.
### Tutorial
If you just want to ignore one specific domain, there's usually a bulletproof method to do so:
1. Run mitmproxy or mitmdump in verbose mode (-v) and observe the host:port information in the serverconnect
messages. mitmproxy will filter on these.
2. Take the host:port string, surround it with ^ and $, escape all dots (. becomes \\.)
and use this as your ignore pattern:
<pre class="terminal">
$ mitmdump -v
127.0.0.1:50588: clientconnect
127.0.0.1:50588: request
-> CONNECT example.com:443 HTTP/1.1
127.0.0.1:50588: Set new server address: example.com:443
127.0.0.1:50588: serverconnect
-> example.com:443
^C
$ mitmproxy --ignore ^example\.com:443$
</pre>
Here are some other examples for ignore patterns:
<pre>
# Exempt traffic from the iOS App Store (the regex is lax, but usually just works):
--ignore apple.com:443
# "Correct" version without false-positives:
--ignore '^(.+\.)?apple\.com:443$'
# Ignore example.com, but not its subdomains:
--ignore '^example.com:'
# Ignore everything but example.com and mitmproxy.org:
--ignore '^(?!example\.com)(?!mitmproxy\.org)'
# Transparent mode:
--ignore 17\.178\.96\.59:443
# IP address range:
--ignore 17\.178\.\d+\.\d+:443
</pre>
### See Also
- [TCP Proxy](@!urlTo("tcpproxy.html")!@)
- [Response Streaming](@!urlTo("responsestreaming.html")!@)
[^explicithttp]: This stems from an limitation of explicit HTTP proxying: A single connection can be re-used for multiple target domains - a <code>GET http://example.com/</code> request may be followed by a <code>GET http://evil.com/</code> request on the same connection. If we start to ignore the connection after the first request, we would miss the relevant second one.

View File

@@ -0,0 +1,58 @@
By using mitmproxy's streaming feature, response contents can be passed to the client incrementally before they have been fully received by the proxy.
This is especially useful for large binary files such as videos, where buffering the whole file slows down the client's browser.
By default, mitmproxy will read the entire response, perform any indicated
manipulations on it and then send the (possibly modified) response to
the client. In some cases this is undesirable and you may wish to "stream"
the reponse back to the client. When streaming is enabled, the response is
not buffered on the proxy but directly sent back to the client instead.
<h2>On the command-line</h2>
Streaming can be enabled on the command line for all response bodies exceeding a certain size. The SIZE argument understands
k/m/g suffixes, e.g. 3m for 3 megabytes.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th>
<td>
--stream SIZE
</td>
</tr>
</tbody>
</table>
<h2>Caveats</h2>
When response streaming is enabled, <strong>streamed response contents will not be
recorded or preserved in any way.</strong>
When response streaming is enabled, the response body cannot be modified.
<h2>Customizing Response Streaming</h2>
You can also use an <a href="@!urlTo("scripting/inlinescripts.html")!@">inline script</a> to customize exactly
which responses are streamed.
Responses that should be tagged for streaming by setting their respective .stream attribute to True:
$!example("examples/stream.py")!$
<h2>Implementation Details</h2>
When response streaming is enabled, portions of the code which would have otherwise performed changes
on the response body will see an empty response body instead (<code>libmproxy.protocol.http.CONTENT_MISSING</code>). Any modifications will be ignored.
Streamed responses are usually sent in chunks of 4096 bytes. If the response is sent with a <code>Transfer-Encoding:
chunked</code> header, the response will be streamed one chunk at a time.
<h2>Modifying streamed data</h2>
If the <code>.stream</code> attribute is callable, .stream will work as a hook in chunk data processing.
$!example("examples/stream_modify.py")!$
### See Also
- [Ignore Domains](@!urlTo("passthrough.html")!@)

View File

@@ -1,17 +1,52 @@
In reverse proxy mode, mitmproxy acts as a standard HTTP server and forwards
all requests to the specified upstream server. Note that the displayed URL for
flows in this mode will use the value of the __Host__ header field from the
request, not the reverse proxy server.
In reverse proxy mode, mitmproxy accepts standard HTTP requests and forwards
them to the specified upstream server. This is in contrast to
<a href="@!urlTo("upstreamproxy.html")!@">upstream proxy mode</a>, in which
mitmproxy forwards HTTP proxy requests to an upstream proxy server.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th> <td>-P http[s]://hostname[:port]</td>
</tr>
<tr>
<th>mitmproxy shortcut</th> <td><b>P</b></td>
<th width="20%">command-line</th> <td>-R <i>schema</i>://hostname[:port]</td>
</tr>
</tbody>
</table>
Here, **schema** is one of http, https, http2https or https2http. The latter
two extended schema specifications control the use of HTTP and HTTPS on
mitmproxy and the upstream server. You can indicate that mitmproxy should use
HTTP, and the upstream server uses HTTPS like this:
http2https://hostname:port
And you can indicate that mitmproxy should use HTTPS while the upstream
service uses HTTP like this:
https2http://hostname:port
### Host Header
In reverse proxy mode, mitmproxy does not rewrite the host header. While often useful, this
may lead to issues with public web servers. For example, consider the following scenario:
$ python mitmdump -d -R http://example.com/ &
$ curl http://localhost:8080/
>> GET https://example.com/
Host: localhost:8080
User-Agent: curl/7.35.0
[...]
<< 404 Not Found 345B
Since the Host header doesn't match <samp>example.com</samp>, an error is returned.<br>
There are two ways to solve this:
<ol>
<li>Modify the hosts file of your OS so that example.com resolves to 127.0.0.1.</li>
<li>
Instruct mitmproxy to rewrite the host header by passing <kbd>&#8209;&#8209;setheader&nbsp;:~q:Host:example.com</kbd>.
However, keep in mind that absolute URLs within the returned document or HTTP redirects will cause the client application
to bypass the proxy.
</li>
</ol>

View File

@@ -0,0 +1,10 @@
In this mode, mitmproxy acts as a SOCKS5 proxy server.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th> <td>--socks</td>
</tr>
</tbody>
</table>

View File

@@ -0,0 +1,30 @@
WebSockets or other non-HTTP protocols are not supported by mitmproxy yet. However, you can exempt hostnames from
processing, so that mitmproxy acts as a generic TCP forwarder. This feature is closely related to the
[ignore domains](@!urlTo("passthrough.html")!@) functionality, but differs in two important aspects:
- The raw TCP messages are printed to the event log.
- SSL connections will be intercepted.
Please note that message interception or modification are not possible yet.
If you are not interested in the raw TCP messages, you should use the ignore domains feature.
## How it works
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th> <td>--tcp HOST</td>
</tr>
<tr>
<th>mitmproxy shortcut</th> <td><b>T</b></td>
</tr>
</tbody>
</table>
For a detailed description on the structure of the hostname pattern, please refer to the [Ignore Domains](@!urlTo("passthrough.html")!@) feature.
### See Also
- [Ignore Domains](@!urlTo("passthrough.html")!@)
- [Response Streaming](@!urlTo("responsestreaming.html")!@)

View File

@@ -0,0 +1,13 @@
In this mode, mitmproxy accepts proxy requests and unconditionally forwards all
requests to a specified upstream proxy server. This is in contrast to <a
href="@!urlTo("reverseproxy.html")!@">reverse proxy mode</a>, in which
mitmproxy forwards ordinary HTTP requests to an upstream server.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th> <td>-U http://hostname[:port]</td>
</tr>
</tbody>
</table>

View File

@@ -26,7 +26,7 @@ This is a proxy GET request - an extended form of the vanilla HTTP GET request
that includes a schema and host specification, and it includes all the
information mitmproxy needs to proceed.
<img src="explicit.png"/>
<img class="img-responsive" src="explicit.png"/>
<table class="table">
<tbody>
@@ -84,7 +84,7 @@ attempts to MITM an SSL connection for analysis. Our answer to this conundrum
is to become a trusted Certificate Authority ourselves. Mitmproxy includes a
full CA implementation that generates interception certificates on the fly. To
get the client to trust these certificates, we [register mitmproxy as a trusted
CA with the device manually](@!urlTo("ssl.html")!@).
CA with the device manually](@!urlTo("certinstall.html")!@).
## Complication 1: What's the remote hostname?
@@ -158,7 +158,7 @@ handshake. Luckily, this is almost never an issue in practice.
Lets put all of this together into the complete explicitly proxied HTTPS flow.
<img src="explicit_https.png"/>
<img class="img-responsive" src="explicit_https.png"/>
<table class="table">
<tbody>
@@ -246,11 +246,11 @@ mechanism has a different way of exposing this data, so this introduces the
second component required for working transparent proxying: a host module that
knows how to retrieve the original destination address from the router. In
mitmproxy, this takes the form of a built-in set of
[modules](https://github.com/cortesi/mitmproxy/tree/master/libmproxy/platform)
[modules](https://github.com/mitmproxy/mitmproxy/tree/master/libmproxy/platform)
that know how to talk to each platform's redirection mechanism. Once we have
this information, the process is fairly straight-forward.
<img src="transparent.png"/>
<img class="img-responsive" src="transparent.png"/>
<table class="table">
@@ -296,7 +296,7 @@ transparently proxying HTTP, and explicitly proxying HTTPS. We use the routing
mechanism to establish the upstream server address, and then proceed as for
explicit HTTPS connections to establish the CN and SANs, and cope with SNI.
<img src="transparent_https.png"/>
<img class="img-responsive" src="transparent_https.png"/>
<table class="table">

View File

@@ -1,4 +1,27 @@
@!index_contents!@
__mitmproxy__ is an interactive, SSL-capable man-in-the-middle proxy for HTTP
with a console interface.
__mitmdump__ is the command-line version of mitmproxy. Think tcpdump for HTTP.
__libmproxy__ is the library that mitmproxy and mitmdump are built on.
Documentation, tutorials and distribution packages can be found on the
mitmproxy.org website:
[mitmproxy.org](http://mitmproxy.org).
Features
--------
- Intercept HTTP requests and responses and modify them on the fly.
- Save complete HTTP conversations for later replay and analysis.
- Replay the client-side of an HTTP conversations.
- Replay HTTP responses of a previously recorded server.
- Reverse proxy mode to forward traffic to a specified server.
- Transparent proxy mode on OSX and Linux.
- Make scripted changes to HTTP traffic using Python.
- SSL certificates for interception are generated on the fly.
- And much, much more.

View File

@@ -1,64 +1,49 @@
import os, sys
import os
import sys
import datetime
import countershape
from countershape import Page, Directory, PythonModule, markup, model
from countershape import Page, Directory, markup
import countershape.template
sys.path.insert(0, "..")
from libmproxy import filt
MITMPROXY_SRC = "~/git/public/mitmproxy"
MITMPROXY_SRC = os.path.abspath(
os.path.expanduser(os.environ.get("MITMPROXY_SRC", ".."))
)
sys.path.insert(0, MITMPROXY_SRC)
from libmproxy import filt, version
ns.VERSION = version.VERSION
if ns.options.website:
ns.idxpath = "doc/index.html"
this.layout = countershape.Layout("_websitelayout.html")
else:
ns.idxpath = "index.html"
this.layout = countershape.Layout("_layout.html")
this.layout = countershape.layout.FileLayout("_layout.html")
ns.title = countershape.template.Template(None, "<h1>@!this.title!@</h1>")
this.titlePrefix = "mitmproxy 0.9 - "
this.titlePrefix = "%s - " % version.NAMEVERSION
this.markup = markup.Markdown(extras=["footnotes"])
ns.docMaintainer = "Aldo Cortesi"
ns.docMaintainerEmail = "aldo@corte.si"
ns.copyright = u"\u00a9 mitmproxy project, 2013"
ns.copyright = u"\u00a9 mitmproxy project, %s" % datetime.date.today().year
def mpath(p):
p = os.path.join(MITMPROXY_SRC, p)
return os.path.expanduser(p)
ns.index_contents = file(mpath("README.mkd")).read()
def example(s):
d = file(mpath(s)).read().rstrip()
extemp = """<div class="example">%s<div class="example_legend">(%s)</div></div>"""
return extemp%(countershape.template.Syntax("py")(d), s)
return extemp % (countershape.template.Syntax("py")(d), s)
ns.example = example
filt_help = []
for i in filt.filt_unary:
filt_help.append(
("~%s"%i.code, i.help)
)
for i in filt.filt_rex:
filt_help.append(
("~%s regex"%i.code, i.help)
)
for i in filt.filt_int:
filt_help.append(
("~%s int"%i.code, i.help)
)
filt_help.sort()
filt_help.extend(
[
("!", "unary not"),
("&", "and"),
("|", "or"),
("(...)", "grouping"),
]
)
ns.filt_help = filt_help
ns.filt_help = filt.help
def nav(page, current, state):
@@ -67,18 +52,23 @@ def nav(page, current, state):
else:
pre = "<li>"
p = state.application.getPage(page)
return pre + '<a href="%s">%s</a></li>'%(model.UrlTo(page), p.title)
return pre + \
'<a href="%s">%s</a></li>' % (countershape.widgets.UrlTo(page), p.title)
ns.nav = nav
ns.navbar = countershape.template.File(None, "_nav.html")
pages = [
Page("index.html", "Introduction"),
Page("install.html", "Installation"),
Page("certinstall.html", "About Certificates"),
Page("howmitmproxy.html", "How mitmproxy works"),
Page("modes.html", "Modes of Operation"),
Page("mitmproxy.html", "mitmproxy"),
Page("mitmdump.html", "mitmdump"),
Page("howmitmproxy.html", "How mitmproxy works"),
Page("config.html", "configuration"),
Page("ssl.html", "Overview"),
Directory("certinstall"),
Directory("scripting"),
Directory("tutorials"),
Page("transparent.html", "Overview"),

View File

@@ -1,47 +1,33 @@
## On This Page
The preferred way to install mitmproxy - whether you're installing the latest
release or from source - is to use [pip](http://www.pip-installer.org/). If you
don't already have pip on your system, you can find installation instructions
[here](http://www.pip-installer.org/en/latest/installing.html).
* [Installation On Ubuntu](#docUbuntu)
* [Installation On Mac OS X](#docOSX)
* [Installation On Windows](#docWindows)
## <a id=docUbuntu></a>Installation On Ubuntu
## Installing the latest release
A single command will download and install the latest release of mitmproxy,
along with all its dependencies:
Ubuntu comes with Python but we need to install pip, python-dev and several libraries. This was tested on a fully patched installation of Ubuntu 14.04.
<pre class="terminal">
pip install mitmproxy
$ sudo apt-get install python-pip python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev
$ sudo pip install mitmproxy
</pre>
Once installation is complete you can run <a href="mitmproxy.html">mitmproxy</a> or <a href="mitmdump.html">mitmdump</a> from a terminal.
## Installing from source
### Installation From Source
When installing from source, the easiest method is still to use pip. In this
case run:
<pre class="terminal">
pip install /path/to/source
</pre>
If you would like to install mitmproxy directly from the master branch on GitHub or would like to get set up to contribute to the project,
install the dependencies as you would for a regular mitmproxy installation (see previous section).
Then see the <a href="https://github.com/mitmproxy/mitmproxy/blob/master/README.mkd#hacking">Hacking</a> section of the README on GitHub.
Note that if you're installing current git master, you will also have to
install the current git master of [netlib](http://github.com/cortesi/netlib) by
hand.
## OSX
## <a id=docOSX></a>Installation On Mac OS X
- If you're running a Python interpreter installed with homebrew (or similar),
you may have to install some dependencies by hand.
- Make sure that XCode is installed from the App Store, and that the
command-line tools have been downloaded (XCode/Preferences/Downloads).
- Now use __pip__ to do the installation, as above.
The easiest way to get up and running on OSX is to download the pre-built binary packages from [mitmproxy.org](http://mitmproxy.org).
There are a few bits of customization you might want to do to make mitmproxy
comfortable to use on OSX. The default color scheme is optimized for a dark
background terminal, but you can select a palette for a light terminal
background with the --palette option. You can use the OSX <b>open</b> program
to create a simple and effective <b>~/.mailcap</b> file to view request and
response bodies:
There are a few bits of customization you might want to do to make mitmproxy comfortable to use on OSX. The default color scheme is optimized for a dark background terminal, but you can select a palette for a light terminal background with the --palette option. You can use the OSX <b>open</b> program to create a simple and effective <b>~/.mailcap</b> file to view request and response bodies:
<pre class="terminal">
application/*; /usr/bin/open -Wn %s
@@ -50,3 +36,44 @@ image/*; /usr/bin/open -Wn %s
video/*; /usr/bin/open -Wn %s
</pre>
Once installation is complete you can run <a href="mitmproxy.html">mitmproxy</a> or <a href="mitmdump.html">mitmdump</a> from a terminal.
### Installation From Source
If you would like to install mitmproxy directly from the master branch on GitHub or would like to get set up to contribute to the project, ithere are a few OS X specific things to keep in mind.
- Make sure that XCode is installed from the App Store, and that the command-line tools have been downloaded (XCode/Preferences/Downloads).
- If you're running a Python interpreter installed with homebrew (or similar), you may have to install some dependencies by hand.
Then see the <a href="https://github.com/mitmproxy/mitmproxy/blob/master/README.mkd#hacking">Hacking</a> section of the README on GitHub.
## <a id=docWindows></a>Installation On Windows
Please note that mitmdump is the only component of mitmproxy that is supported on Windows at the moment.
There is no interactive user interface on Windows.
First, install the latest version of Python 2.7 from the <a href="https://www.python.org/downloads/windows/">Python website</a>.
If you already have an older version of Python 2.7 installed, make sure to install <a href="https://pip.pypa.io/en/latest/installing.html">pip</a>
(pip is included in Python 2.7.9+ by default).
Next, add Python and the Python Scripts directory to your <strong>PATH</strong> variable. You can do this easily by running the following in powershell:
<pre class="terminal">
[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27\;C:\Python27\Scripts\", "User")
</pre>
Now, you can install mitmproxy by running
<pre class="terminal">
pip install mitmproxy
</pre>
Once the installation is complete, you can run <a href="mitmdump.html">mitmdump</a> from a command prompt.
### Installation From Source
If you would like to install mitmproxy directly from the master branch on GitHub or would like to get set up to contribute to the project, install Python as outlined above, then see the <a href="https://github.com/mitmproxy/mitmproxy/blob/master/README.mkd#hacking">Hacking</a> section of the README on GitHub.

BIN
doc-src/mitmproxy-long.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

View File

@@ -7,13 +7,13 @@ documentation from any __mitmproxy__ screen.
## Flow list
The flow list shows an index of captured flows in chronological order.
The flow list shows an index of captured flows in chronological order.
<img src="@!urlTo("screenshots/mitmproxy.png")!@"/>
<img class="img-responsive" src="@!urlTo('screenshots/mitmproxy.png')!@"/>
- __1__: A GET request, returning a 302 Redirect response.
- __2__: A GET request, returning 16.75kb of text/html data.
- __3__: A replayed request.
- __3__: A replayed request.
- __4__: Intercepted flows are indicated with orange text. The user may edit
these flows, and then accept them (using the _a_ key) to continue. In this
case, the request has been intercepted on the way to the server.
@@ -32,7 +32,7 @@ interfaces.
The __Flow View__ lets you inspect and manipulate a single flow:
<img src="@!urlTo("screenshots/mitmproxy-flowview.png")!@"/>
<img class="img-responsive" src="@!urlTo('screenshots/mitmproxy-flowview.png')!@"/>
- __1__: Flow summary.
- __2__: The Request/Response tabs, showing you which part of the flow you are
@@ -53,11 +53,11 @@ using the _m_ key.
Much of the data that we'd like to interact with in mitmproxy is structured.
For instance, headers, queries and form data can all be thought of as a list of
key/value pairs. Mitmproxy has a built-in editor that lays this type of data
out in a grid for easy manipulation.
out in a grid for easy manipulation.
At the moment, the Grid Editor is used in four parts of mitmproxy:
- Editing request or response headers (_e_ for edit, then _h_ for headers in flow view)
- Editing request or response headers (_e_ for edit, then _h_ for headers in flow view)
- Editing a query string (_e_ for edit, then _q_ for query in flow view)
- Editing a URL-encoded form (_e_ for edit, then _f_ for form in flow view)
- Editing replacement patterns (_R_ globally)
@@ -65,13 +65,13 @@ At the moment, the Grid Editor is used in four parts of mitmproxy:
If there is is no data, an empty editor will be started to let you add some.
Here is the editor showing the headers from a request:
<img src="@!urlTo("screenshots/mitmproxy-kveditor.png")!@"/>
<img class="img-responsive" src="@!urlTo('screenshots/mitmproxy-kveditor.png')!@"/>
To edit, navigate to the key or value you want to modify using the arrow or vi
navigation keys, and press enter. The background color will change to show that
you are in edit mode for the specified field:
<img src="@!urlTo("screenshots/mitmproxy-kveditor-editmode.png")!@"/>
<img class="img-responsive" src="@!urlTo('screenshots/mitmproxy-kveditor-editmode.png')!@"/>
Modify the field as desired, then press escape to exit edit mode when you're
done. You can also add a row (_a_ key), delete a row (_d_ key), spawn an
@@ -83,12 +83,12 @@ help (_?_ key) for more.
__mitmproxy__'s interception functionality lets you pause an HTTP request or
response, inspect and modify it, and then accept it to send it on to the server
or client.
or client.
### 1: Set an interception pattern
<img src="@!urlTo('mitmproxy-intercept-filt.png')!@"/>
<img class="img-responsive" src="@!urlTo('mitmproxy-intercept-filt.png')!@"/>
We press _i_ to set an interception pattern. In this case, the __~q__ filter
pattern tells __mitmproxy__ to intercept all requests. For complete filter
@@ -97,19 +97,19 @@ document, or the built-in help function in __mitmproxy__.
### 2: Intercepted connections are indicated with orange text:
<img src="@!urlTo('mitmproxy-intercept-mid.png')!@"/>
<img class="img-responsive" src="@!urlTo('mitmproxy-intercept-mid.png')!@"/>
### 3: You can now view and modify the request:
<img src="@!urlTo('mitmproxy-intercept-options.png')!@"/>
<img class="img-responsive" src="@!urlTo('mitmproxy-intercept-options.png')!@"/>
In this case, we viewed the request by selecting it, pressed _e_ for "edit"
and _m_ for "method" to change the HTTP request method.
### 4: Accept the intercept to continue:
<img src="@!urlTo('mitmproxy-intercept-result.png')!@"/>
<img class="img-responsive" src="@!urlTo('mitmproxy-intercept-result.png')!@"/>
Finally, we press _a_ to accept the modified request, which is then sent on to
the server. In this case, we changed the request from an HTTP GET to
OPTIONS, and Google's server has responded with a 405 "Method not allowed".
OPTIONS, and Google's server has responded with a 405 "Method not allowed".

222
doc-src/modes.html Normal file
View File

@@ -0,0 +1,222 @@
Mitmproxy has four modes of operation that allow you to use mitmproxy in a
variety of scenarios:
- **Regular** (the default)
- **Transparent**
- **Reverse Proxy**
- **Upstream Proxy**
Now, which one should you pick? Use this flow chart:
<img class="img-responsive" src="@!urlTo('schematics/proxy-modes-flowchart.png')!@"/>
<div class="page-header">
<h1>Regular Proxy</h1>
</div>
Mitmproxy's regular mode is the simplest and the easiest to set up.
1. Start mitmproxy.
2. Configure your client to use mitmproxy. For instance on IOS, the settings might look like <a href="@!urlTo('screenshots/ios-manual.png')!@">this</a>.
3. Quick Check: You should already be able to visit an unencrypted HTTP site
through the proxy.
4. Open the magic domain <strong>mitm.it</strong> and install the certificate for your device.
<div class="well">
<strong>Heads Up:</strong> Unfortunately, some applications bypass the
system HTTP proxy settings - Android applications are a common example. In
these cases, you need to use mitmproxy's transparent mode.
</div>
If you are proxying an external device, your network will probably look like this:
<img class="img-responsive" src="@!urlTo('schematics/proxy-modes-regular.png')!@">
The square brackets signify the source and destination IP addresses. Your
client explicitly connects to mitmproxy and mitmproxy explicitly connects
to the target server.
<div class="page-header">
<h1>Transparent Proxy</h1>
</div>
In transparent mode, traffic is directed into a proxy at the network layer,
without any client configuration required. This makes transparent proxying
ideal for situations where you can't change client behaviour. In the graphic
below, a machine running mitmproxy has been inserted between the router and
the internet:
<a href="@!urlTo('schematics/proxy-modes-transparent-1.png')!@">
<img class="img-responsive" src="@!urlTo('schematics/proxy-modes-transparent-1.png')!@">
</a>
The square brackets signify the source and destination IP addresses. Round
brackets mark the next hop on the *Ethernet/data link* layer. This distinction
is important: when the packet arrives at the mitmproxy machine, it must still
be addressed to the target server. This means that Network Address Translation
should not be applied before the traffic reaches mitmproxy, since this would
remove the target information, leaving mitmproxy unable to determine the real
destination.
<a href="@!urlTo('schematics/proxy-modes-transparent-wrong.png')!@">
<img class="img-responsive" src="@!urlTo('schematics/proxy-modes-transparent-wrong.png')!@"></a>
<h2>Common Configurations</h2>
There are many ways to configure your network for transparent proxying. We'll
look at three common scenarios:
1. Configuring the client to use a custom gateway/router/"next hop"
2. Implementing custom routing on the router
In most cases, the first option is recommended due to its ease of use.
<h3>(a) Custom Gateway</h3>
One simple way to get traffic to the mitmproxy machine with the destination IP
intact, is to simply configure the client with the mitmproxy box as the
default gateway.
<a href="@!urlTo('schematics/proxy-modes-transparent-2.png')!@">
<img class="img-responsive" src="@!urlTo('schematics/proxy-modes-transparent-2.png')!@"></a>
In this scenario, we would:
- Configure the proxy machine for transparent mode. You can find instructions
in the <em>Transparent Proxying</em> section of the mitmproxy docs.
- Configure the client to use the proxy machine's IP as the default gateway.
<a href="@!urlTo('screenshots/ios-gateway.png')!@">Here</a> is what this would
look like on IOS.
- Quick Check: At this point, you should already be able to visit an
unencrypted HTTP site over the proxy.
- Open the magic domain <strong>mitm.it</strong> and install the certificate
for your device.
Setting the custom gateway on clients can be automated by serving the settings
out to clients over DHCP. This lets set up an interception network where all
clients are proxied automatically, which can save time and effort.
<div class="well">
<strong style="text-align: center; display: block">Troubleshooting Transparent Mode</strong>
<p>Incorrect transparent mode configurations are a frequent source of
error. If it doesn't work for you, try the following things:</p>
<ul>
<li>
Open mitmproxy's event log (press `e`) - do you see clientconnect
messages? If not, the packets are not arriving at the proxy. One common
cause is the occurrence of ICMP redirects, which means that your
machine is telling the client that there's a faster way to the
internet by contacting your router directly (see the
<em>Transparent Proxying</em> section on how to disable them). If in
doubt, <a href="https://wireshark.org/">Wireshark</a> may help you
to see whether something arrives at your machine or not.
</li>
<li>
Make sure you have not explicitly configured an HTTP proxy on the
client. This is not needed in transparent mode.
</li>
<li>
Re-check the instructions in the <em>Transparent Proxying</em> section. Anything you missed?
</li>
</ul>
If you encounter any other pitfalls that should be listed here, please let us know!
</div>
<h3>(b) Custom Routing</h3>
In some cases, you may need more fine-grained control of which traffic reaches
the mitmproxy instance, and which doesn't. You may, for instance, choose only
to divert traffic to some hosts into the transparent proxy. There are a huge
number of ways to accomplish this, and much will depend on the router or
packet filter you're using. In most cases, the configuration will look like
this:
<a href="@!urlTo('schematics/proxy-modes-transparent-3.png')!@">
<img class="img-responsive" src="@!urlTo('schematics/proxy-modes-transparent-3.png')!@">
</a>
<div class="page-header">
<h1>Reverse Proxy</h1>
</div>
Mitmproxy is usually used with a client that uses the proxy to access the
Internet. Using reverse proxy mode, you can use mitmproxy to act like a normal
HTTP server:
<a href="@!urlTo('schematics/proxy-modes-reverse.png')!@">
<img class="img-responsive" src="@!urlTo('schematics/proxy-modes-reverse.png')!@">
</a>
There are various use-cases:
- Say you have an internal API running at http://example.local/. You could now
set up mitmproxy in reverse proxy mode at http://debug.example.local/ and
dynamically point clients to this new API endpoint, which provides clients
with the same data and you with debug information. Similarly, you could move
your real server to a different IP/port and set up mitmproxy at the original
place to debug all sessions.
- Say you're a web developer working on example.com (with a development
version running on localhost:8000). You can modify your hosts file so that
example.com points to 127.0.0.1 and then run mitmproxy in reverse proxy mode
on port 80. You can test your app on the example.com domain and get all
requests recorded in mitmproxy.
- Say you have some toy project that should get SSL support. Simply set up
mitmproxy with SSL termination and you're done (<code>mitmdump -p 443 -R
https2http://localhost:80/</code>). There are better tools for this specific
task, but mitmproxy is very quick and simple way to set up an SSL-speaking
server.
- Want to add a non-SSL-capable compression proxy in front of your server? You
could even spawn a mitmproxy instance that terminates SSL (https2http://...),
point it to the compression proxy and let the compression proxy point to a
SSL-initiating mitmproxy (http2https://...), which then points to the real
server. As you see, it's a fairly flexible thing.
Note that mitmproxy supports either an HTTP or an HTTPS upstream server, not
both at the same time. You can work around this by spawning a second mitmproxy
instance.
<div class="well">
<strong style="text-align: center; display: block">Caveat: Interactive Use</strong>
One caveat is that reverse proxy mode is often not sufficient for interactive
browsing. Consider trying to clone Google by using:
<code>mitmproxy -R http://google.com/</code>
This works for the initial request, but the HTML served to the client remains
unchanged. As soon as the user clicks on an non-relative URL (or downloads a
non-relative image resource), traffic no longer passes through mitmproxy, and
the client connects to Google directly again.
</div>
<div class="page-header">
<h1>Upstream Proxy</h1>
</div>
If you want to chain proxies by adding mitmproxy in front of a different proxy
appliance, you can use mitmproxy's upstream mode. In upstream mode, all
requests are unconditionally transferred to an upstream proxy of your choice.
<a href="@!urlTo('schematics/proxy-modes-upstream.png')!@">
<img class="img-responsive" src="@!urlTo('schematics/proxy-modes-upstream.png')!@"></a>
mitmproxy supports both explicit HTTP and explicit HTTPS in upstream proxy
mode. You could in theory chain multiple mitmproxy instances in a row, but
that doesn't make any sense in practice (i.e. outside of our tests).

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -2,5 +2,5 @@ from countershape import Page
pages = [
Page("inlinescripts.html", "Inline Scripts"),
Page("libmproxy.html", "libmproxy")
Page("libmproxy.html", "libmproxy"),
]

View File

@@ -1,5 +1,5 @@
__mitmproxy__ has a powerful scripting API that allows you to modify flows
on-the-fly or rewrite previously saved flows locally.
on-the-fly or rewrite previously saved flows locally.
The mitmproxy scripting API is event driven - a script is simply a Python
module that exposes a set of event methods. Here's a complete mitmproxy script
@@ -21,42 +21,59 @@ We can now run this script using mitmdump or mitmproxy as follows:
The new header will be added to all responses passing through the proxy.
## Example Scripts
mitmproxy comes with a variety of example inline scripts, which demonstrate
many basic tasks. We encourage you to either browse them locally or in our
[GitHub repo](https://github.com/mitmproxy/mitmproxy/tree/master/examples).
## Events
### start(ScriptContext)
### start(ScriptContext, argv)
Called once on startup, before any other events.
### clientconnect(ScriptContext, ClientConnect)
### clientconnect(ScriptContext, ConnectionHandler)
Called when a client initiates a connection to the proxy. Note that
a connection can correspond to multiple HTTP requests.
### serverconnect(ScriptContext, ConnectionHandler)
### request(ScriptContext, Flow)
Called when the proxy initiates a connection to the target server. Note that
a connection can correspond to multiple HTTP requests.
Called when a client request has been received. The __Flow__ object is
### request(ScriptContext, HTTPFlow)
Called when a client request has been received. The __HTTPFlow__ object is
guaranteed to have a non-None __request__ attribute.
### responseheaders(ScriptContext, HTTPFlow)
### response(ScriptContext, Flow)
Called when the headers of a server response have been received.
This will always be called before the response hook.
The __HTTPFlow__ object is guaranteed to have non-None __request__ and
__response__ attributes. __response.content__ will be None,
as the response body has not been read yet.
Called when a server response has been received. The __Flow__ object is
### response(ScriptContext, HTTPFlow)
Called when a server response has been received. The __HTTPFlow__ object is
guaranteed to have non-None __request__ and __response__ attributes.
Note that if response streaming is enabled for this response,
__response.content__ will not contain the response body.
### error(ScriptContext, Flow)
### error(ScriptContext, HTTPFlow)
Called when a flow error has occurred, e.g. invalid server responses, or
interrupted connections. This is distinct from a valid server HTTP error
response, which is simply a response with an HTTP error code. The __Flow__
response, which is simply a response with an HTTP error code. The __HTTPFlow__
object is guaranteed to have non-None __request__ and __error__ attributes.
### clientdisconnect(ScriptContext, ClientDisconnect)
### clientdisconnect(ScriptContext, ConnectionHandler)
Called when a client disconnects from the proxy.
@@ -71,58 +88,75 @@ The main classes you will deal with in writing mitmproxy scripts are:
<table class="table">
<tr>
<th>libmproxy.flow.ClientConnection</th>
<th>libmproxy.proxy.server.ConnectionHandler</th>
<td>Describes a proxy client connection session. Always has a client_conn attribute, might have a server_conn
attribute.
</td>
</tr>
<tr>
<th>libmproxy.proxy.connection.ClientConnection</th>
<td>Describes a client connection.</td>
</tr>
<tr>
<th>libmproxy.flow.ClientDisconnection</th>
<td>Describes a client disconnection.</td>
<th>libmproxy.proxy.connection.ServerConnection</th>
<td>Describes a server connection.</td>
</tr>
<tr>
<th>libmproxy.flow.Error</th>
<td>A communications error.</td>
</tr>
<tr>
<th>libmproxy.flow.Flow</th>
<th>libmproxy.protocol.http.HTTPFlow</th>
<td>A collection of objects representing a single HTTP transaction.</td>
</tr>
<tr>
<th>libmproxy.flow.Headers</th>
<td>HTTP headers for a request or response.</td>
</tr>
<tr>
<th>libmproxy.flow.ODict</th>
<td>A dictionary-like object for managing sets of key/value data. There
is also a variant called CaselessODict that ignores key case for some
calls (used mainly for headers).</td>
</tr>
<tr>
<th>libmproxy.flow.Response</th>
<th>libmproxy.protocol.http.HTTPResponse</th>
<td>An HTTP response.</td>
</tr>
<tr>
<th>libmproxy.flow.Request</th>
<th>libmproxy.protocol.http.HTTPRequest</th>
<td>An HTTP request.</td>
</tr>
<tr>
<th>libmproxy.flow.ScriptContext</th>
<td> A handle for interacting with mitmproxy's from within scripts. </td>
<th>libmproxy.protocol.primitives.Error</th>
<td>A communications error.</td>
</tr>
<tr>
<th>libmproxy.certutils.SSLCert</th>
<th>libmproxy.script.ScriptContext</th>
<td> A handle for interacting with mitmproxy's from within scripts.</td>
</tr>
<tr>
<th>netlib.odict.ODict</th>
<td>A dictionary-like object for managing sets of key/value data. There
is also a variant called ODictCaseless that ignores key case for some
calls (used mainly for headers).</td>
</tr>
<tr>
<th>netlib.certutils.SSLCert</th>
<td>Exposes information SSL certificates.</td>
</tr>
</table>
The canonical API documentation is the code. You can view the API documentation
using pydoc (which is installed with Python by default), like this:
The canonical API documentation is the code, which you can browse locally or in our
[GitHub repo](https://github.com/mitmproxy/mitmproxy).
You can view the API documentation using pydoc (which is installed with Python by default), like this:
<pre class="terminal">
> pydoc libmproxy.flow.Request
> pydoc libmproxy.protocol.http.HTTPRequest
</pre>
## Running scripts in parallel
We have a single flow primitive, so when a script is handling something, other requests block.
While that's a very desirable behaviour under some circumstances, scripts can be run threaded by using the <code>libmproxy.script.concurrent</code> decorator.
$!example("examples/nonblocking.py")!$
## Make scripts configurable with arguments
Sometimes, you want to pass runtime arguments to the inline script. This can be simply done by surrounding the script call with quotes, e.g.
<code>mitmdump -s "script.py --foo 42"</code>. The arguments are then exposed in the start event:
$!example("examples/modify_response_body.py")!$
## Running scripts on saved flows
Sometimes, we want to run a script on __Flow__ objects that are already
@@ -132,6 +166,11 @@ flows from a file (see the "scripted data transformation" example on the
one-shot script on a single flow through the _|_ (pipe) shortcut in mitmproxy.
In this case, there are no client connections, and the events are run in the
following order: __start__, __request__, __response__, __error__, __done__. If
following order: __start__, __request__, __responseheaders__, __response__, __error__, __done__. If
the flow doesn't have a __response__ or __error__ associated with it, the
matching event will be skipped.
matching events will be skipped.
## Spaces in the script path
By default, spaces are interpreted as separator between the inline script and its arguments (e.g. <code>-s "foo.py
42"</code>). Consequently, the script path needs to be wrapped in a separate pair of quotes if it contains spaces:
<code>-s "'./foo bar/baz.py' 42"</code>.

View File

@@ -1,3 +1,13 @@
<div class="well">
<strong>Heads up!</strong> We strongly encourage you to use <a href="@!urlTo("scripting/inlinescripts.html")!@">inline scripts</a> rather than libmproxy
directly.<br><br>
<ul>
<li>Inline Scripts are equally powerful and provide an easier syntax.</li>
<li>Most examples are written as inline scripts.</li>
<li>Multiple inline scripts can be combined and used together.</li>
<li>Inline Scripts can either be executed headless with mitmdump or within the mitmproxy UI.</li>
</ul>
</div>
All of mitmproxy's basic functionality is exposed through the __libmproxy__
library. The example below shows a simple implementation of the "sticky cookie"

View File

@@ -1,46 +0,0 @@
The first time __mitmproxy__ or __mitmdump__ is run, a set of certificate files
for the mitmproxy Certificate Authority are created in the config directory
(~/.mitmproxy by default). The files are as follows:
<table class="table">
<tr>
<td class="nowrap">mitmproxy-ca.pem</td>
<td>The private key and certificate in PEM format.</td>
</tr>
<tr>
<td class="nowrap">mitmproxy-ca-cert.pem</td>
<td>The certificate in PEM format. Use this to distribute to most
non-Windows platforms.</td>
</tr>
<tr>
<td class="nowrap">mitmproxy-ca-cert.p12</td>
<td>The certificate in PKCS12 format. For use on Windows.</td>
</tr>
<tr>
<td class="nowrap">mitmproxy-ca-cert.cer</td>
<td>Same file as .pem, but with an extension expected by some Android
devices.</td>
</tr>
</table>
This CA is used for on-the-fly generation of dummy certificates for SSL
interception. Since your browser won't trust the __mitmproxy__ CA out of the
box (and rightly so), you will see an SSL cert warning every time you visit a
new SSL domain through __mitmproxy__. When you're testing a single site through
a browser, just accepting the bogus SSL cert manually is not too much trouble,
but there are a many circumstances where you will want to configure your
testing system or browser to trust the __mitmproxy__ CA as a signing root
authority.
Installing the mitmproxy CA
---------------------------
* [Firefox](@!urlTo("certinstall/firefox.html")!@)
* [OSX](@!urlTo("certinstall/osx.html")!@)
* [Windows 7](@!urlTo("certinstall/windows7.html")!@)
* [iPhone/iPad](@!urlTo("certinstall/ios.html")!@)
* [IOS Simulator](@!urlTo("certinstall/ios-simulator.html")!@)
* [Android](@!urlTo("certinstall/android.html")!@)

View File

@@ -3,7 +3,7 @@ achieve transparent mode.
<ol class="tlist">
<li> <a href="@!urlTo("ssl.html")!@">Install the mitmproxy
<li> <a href="@!urlTo('certinstall.html')!@">Install the mitmproxy
certificates on the test device</a>. </li>
<li> Enable IP forwarding:
@@ -15,13 +15,23 @@ achieve transparent mode.
</li>
<li> If your target machine is on the same physical network and you configured it to use a custom gateway,
disable ICMP redirects:
<pre class="terminal">echo 0 | sudo tee /proc/sys/net/ipv4/conf/*/send_redirects</pre>
You may also want to consider enabling this permanently in
<b>/etc/sysctl.conf</b> as demonstrated <a href="http://unix.stackexchange.com/a/58081">here</a>.
</li>
<li> Create an iptables ruleset that redirects the desired traffic to the
mitmproxy port. Details will differ according to your setup, but the
ruleset should look something like this:
<pre class="terminal">iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080</pre>
</li>
<li> Fire up mitmproxy. You probably want a command like this:
@@ -38,3 +48,6 @@ iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8
running as the default gateway.</li>
</ol>
For a detailed walkthrough, have a look at the <a href="@!urlTo('tutorials/transparent-dhcp.html')!@"><i>Transparently proxify virtual machines</i></a> tutorial.

View File

@@ -7,7 +7,7 @@ OSX.
<ol class="tlist">
<li> <a href="@!urlTo("ssl.html")!@">Install the mitmproxy
<li> <a href="@!urlTo('certinstall.html')!@">Install the mitmproxy
certificates on the test device</a>. </li>
<li> Enable IP forwarding:
@@ -67,3 +67,12 @@ rdr on en2 inet proto tcp to any port 443 -&gt; 127.0.0.1 port 8080
</ol>
Note that the **rdr** rules in the pf.conf given above only apply to inbound
traffic. This means that they will NOT redirect traffic coming from the box
running pf itself. We can't distinguish between an outbound connection from a
non-mitmproxy app, and an outbound connection from mitmproxy itself - if you
want to intercept your OSX traffic, you should use an external host to run
mitmproxy. None the less, pf is flexible to cater for a range of creative
possibilities, like intercepting traffic emanating from VMs. See the
**pf.conf** man page for more.

View File

@@ -2,11 +2,9 @@
## The setup
In this tutorial, I'm going to show you how simple it is to creatively
interfere with Apple Game Center traffic using mitmproxy. To set things up, I
registered my mitmproxy CA certificate with my iPhone - there's a [step by step
set of instructions](@!urlTo("certinstall/ios.html")!@) elsewhere in this manual. I then
started mitmproxy on my desktop, and configured the iPhone to use it as a
proxy.
interfere with Apple Game Center traffic using mitmproxy. To set things up,
install the [mitmproxy root certificate](@!urlTo("certinstall.html")!@). Then
start mitmproxy on your desktop, and confige the iPhone to use it as a proxy.
## Taking a look at the Game Center traffic
@@ -14,17 +12,17 @@ proxy.
Lets take a first look at the Game Center traffic. The game I'll use in this
tutorial is [Super Mega
Worm](http://itunes.apple.com/us/app/super-mega-worm/id388541990?mt=8) - a
great little retro-apocalyptic sidescroller for the iPhone:
great little retro-apocalyptic sidescroller for the iPhone:
<center>
<img src="@!urlTo("tutorials/supermega.png")!@"/>
<img class="img-responsive" src="@!urlTo('tutorials/supermega.png')!@"/>
</center>
After finishing a game (take your time), watch the traffic flowing through
mitmproxy:
<center>
<img src="@!urlTo("tutorials/one.png")!@"/>
<img class="img-responsive" src="@!urlTo('tutorials/one.png')!@"/>
</center>
We see a bunch of things we might expect - initialisation, the retrieval of
@@ -67,8 +65,8 @@ timestamp. Looks pretty simple to mess with.
Lets edit the score submission. First, select it in mitmproxy, then press
__enter__ to view it. Make sure you're viewing the request, not the response -
you can use __tab__ to flick between the two. Now press __e__ for edit. You'll
be prompted for the part of the request you want to change - press __b__ for
body. Your preferred editor (taken from the EDITOR environment variable) will
be prompted for the part of the request you want to change - press __r__ for
raw body. Your preferred editor (taken from the EDITOR environment variable) will
now fire up. Lets bump the score up to something a bit more ambitious:
<!--(block|syntax("xml"))-->
@@ -91,7 +89,7 @@ now fire up. Lets bump the score up to something a bit more ambitious:
</plist>
<!--(end)-->
Save the file and exit your editor.
Save the file and exit your editor.
The final step is to replay this modified request. Simply press __r__ for
replay.
@@ -99,11 +97,11 @@ replay.
## The glorious result and some intrigue
<center>
<img src="@!urlTo("tutorials/leaderboard.png")!@"/>
<img class="img-responsive" src="@!urlTo('tutorials/leaderboard.png')!@"/>
</center>
And that's it - according to the records, I am the greatest Super Mega Worm
player of all time.
player of all time.
There's a curious addendum to this tale. When I first wrote this tutorial, all
the top competitors' scores were the same: 2,147,483,647 (this is no longer the
@@ -119,4 +117,3 @@ phone, then 2^31-1 might well be the maximum score you could get. Then again,
if the game itself stores its score in a signed 32-bit int, you could get the
same score through perfect play, effectively beating the game. So, which is it
in this case? I'll leave that for you to decide.

View File

@@ -3,4 +3,5 @@ from countershape import Page
pages = [
Page("30second.html", "Client playback: a 30 second example"),
Page("gamecenter.html", "Setting highscores on Apple's GameCenter"),
Page("transparent-dhcp.html", "Transparently proxify virtual machines")
]

View File

@@ -0,0 +1,53 @@
This walkthrough illustrates how to set up transparent proxying with mitmproxy. We use VirtualBox VMs with an Ubuntu proxy machine in this example, but the general principle can be applied to other setups.
1. **Configure VirtualBox Network Adapters for the proxy machine**
The network setup is simple: `internet <--> proxy vm <--> (virtual) internal network`.
For the proxy machine, *eth0* represents the outgoing network. *eth1* is connected to the internal network that will be proxified, using a static ip (192.168.3.1).
<hr>VirtualBox configuration:
<img class="img-responsive" src="@!urlTo('tutorials/transparent-dhcp/step1_vbox_eth0.png')!@"/><br><br>
<img class="img-responsive" src="@!urlTo('tutorials/transparent-dhcp/step1_vbox_eth1.png')!@"/>
<br>Proxy VM:
<img class="img-responsive" src="@!urlTo('tutorials/transparent-dhcp/step1_proxy.png')!@"/>
<hr>
2. **Configure DHCP and DNS**
We use dnsmasq to provide DHCP and DNS in our internal network.
Dnsmasq is a lightweight server designed to provide DNS (and optionally DHCP and TFTP) services to a small-scale
network.
- Before we get to that, we need to fix some Ubuntu quirks:
**Ubuntu >12.04** runs an internal dnsmasq instance (listening on loopback only) by default
<a href="https://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/">[1]</a>. For our use case, this needs to be
disabled by changing <br>`dns=dnsmasq` to `#dns=dnsmasq` in */etc/NetworkManager/NetworkManager.conf*
and running `sudo restart network-manager` afterwards.
- Now, dnsmasq can be be installed and configured:
`sudo apt-get install dnsmasq`
Replace */etc/dnsmasq.conf* with the following configuration:
<pre>\# Listen for DNS requests on the internal network
interface=eth1
\# Act as a DHCP server, assign IP addresses to clients
dhcp-range=192.168.3.10,192.168.3.100,96h
\# Broadcast gateway and dns server information
dhcp-option=option:router,192.168.3.1
dhcp-option=option:dns-server,192.168.3.1
</pre>
Apply changes:
`sudo service dnsmasq restart`
<hr>
Your proxied machine's network settings should now look similar to this:
<img class="img-responsive" src="@!urlTo('tutorials/transparent-dhcp/step2_proxied_vm.png')!@"/>
<hr>
3. **Set up traffic redirection to mitmproxy**
To redirect traffic to mitmproxy, we need to add two iptables rules:
<pre class="terminal">
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 \
-j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 \
-j REDIRECT --to-port 8080
</pre>
4. If required, <a href="@!urlTo('certinstall.html')!@">install the mitmproxy
certificates on the test device</a>.
5. Finally, we can run <code>mitmproxy -T</code>.
The proxied machine cannot to leak any data outside of HTTP or DNS requests.

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -1,9 +1,26 @@
add_header.py Simple script that just adds a header to every request.
dup_and_replay.py Duplicates each request, changes it, and then replays the modified request.
flowbasic Basic use of mitmproxy as a library.
modify_form.py Modify all form submissions to add a parameter.
modify_querystring.py Modify all query strings to add a parameters.
proxapp How to embed a WSGI app in a mitmproxy server
stub.py Script stub with a method definition for every event.
stickycookies An example of writing a custom proxy with libmproxy.
upsidedownternet.py Rewrites traffic to turn PNGs upside down.
# inline script examples
add_header.py Simple script that just adds a header to every request.
change_upstream_proxy.py Dynamically change the upstream proxy
dns_spoofing.py Use mitmproxy in a DNS spoofing scenario.
dup_and_replay.py Duplicates each request, changes it, and then replays the modified request.
filt.py Use mitmproxy's filter expressions in your script.
flowwriter.py Only write selected flows into a mitmproxy dumpfile.
iframe_injector.py Inject configurable iframe into pages.
modify_form.py Modify all form submissions to add a parameter.
modify_querystring.py Modify all query strings to add a parameters.
modify_response_body.py Replace arbitrary strings in all responses
nonblocking.py Demonstrate parallel processing with a blocking script.
proxapp.py How to embed a WSGI app in a mitmproxy server
redirect_requests.py Redirect requests or directly reply to them.
stub.py Script stub with a method definition for every event.
upsidedownternet.py Rewrites traffic to turn images upside down.
# libmproxy examples
flowbasic Basic use of mitmproxy as a library.
stickycookies An example of writing a custom proxy with libmproxy.
# misc
read_dumpfile Read a dumpfile generated by mitmproxy.
mitmproxywrapper.py Bracket mitmproxy run with proxy enable/disable on OS X

View File

@@ -0,0 +1,29 @@
# This scripts demonstrates how mitmproxy can switch to a second/different upstream proxy
# in upstream proxy mode.
#
# Usage: mitmdump -U http://default-upstream-proxy.local:8080/ -s
# "change_upstream_proxy.py host"
from libmproxy.protocol.http import send_connect_request
alternative_upstream_proxy = ("localhost", 8082)
def should_redirect(flow):
return flow.request.host == "example.com"
def request(context, flow):
if flow.live and should_redirect(flow):
# If you want to change the target server, you should modify flow.request.host and flow.request.port
# flow.live.change_server should only be used by inline scripts to change the upstream proxy,
# unless you are sure that you know what you are doing.
server_changed = flow.live.change_server(
alternative_upstream_proxy,
persistent_change=True)
if flow.request.scheme == "https" and server_changed:
send_connect_request(
flow.live.c.server_conn,
flow.request.host,
flow.request.port)
flow.live.c.establish_ssl(server=True)

37
examples/dns_spoofing.py Normal file
View File

@@ -0,0 +1,37 @@
"""
This inline scripts makes it possible to use mitmproxy in scenarios where IP spoofing has been used to redirect
connections to mitmproxy. The way this works is that we rely on either the TLS Server Name Indication (SNI) or the
Host header of the HTTP request.
Of course, this is not foolproof - if an HTTPS connection comes without SNI, we don't
know the actual target and cannot construct a certificate that looks valid.
Similarly, if there's no Host header or a spoofed Host header, we're out of luck as well.
Using transparent mode is the better option most of the time.
Usage:
mitmproxy
-p 80
-R http://example.com/ // Used as the target location if no Host header is present
mitmproxy
-p 443
-R https://example.com/ // Used as the target locaction if neither SNI nor host header are present.
mitmproxy will always connect to the default location first, so it must be reachable.
As a workaround, you can spawn an arbitrary HTTP server and use that for both endpoints, e.g.
mitmproxy -p 80 -R http://localhost:8000
mitmproxy -p 443 -R https2http://localhost:8000
"""
def request(context, flow):
if flow.client_conn.ssl_established:
# TLS SNI or Host header
flow.request.host = flow.client_conn.connection.get_servername(
) or flow.request.pretty_host(hostheader=True)
# If you use a https2http location as default destination, these
# attributes need to be corrected as well:
flow.request.port = 443
flow.request.scheme = "https"
else:
# Host header
flow.request.host = flow.request.pretty_host(hostheader=True)

View File

@@ -1,4 +1,4 @@
def request(ctx, flow):
f = ctx.duplicate_flow(flow)
f.request.path = "/changed"
ctx.replay_request(f)
def request(context, flow):
f = context.duplicate_flow(flow)
f.request.path = "/changed"
context.replay_request(f)

16
examples/filt.py Normal file
View File

@@ -0,0 +1,16 @@
# This scripts demonstrates how to use mitmproxy's filter pattern in inline scripts.
# Usage: mitmdump -s "filt.py FILTER"
from libmproxy import filt
def start(context, argv):
if len(argv) != 2:
raise ValueError("Usage: -s 'filt.py FILTER'")
context.filter = filt.parse(argv[1])
def response(context, flow):
if flow.match(context.filter):
print("Flow matches filter:")
print(flow)

View File

@@ -3,11 +3,15 @@
This example shows how to build a proxy based on mitmproxy's Flow
primitives.
Heads Up: In the majority of cases, you want to use inline scripts.
Note that request and response messages are not automatically replied to,
so we need to implement handlers to do this.
"""
import os
from libmproxy import proxy, flow
from libmproxy import flow, proxy
from libmproxy.proxy.server import ProxyServer
class MyMaster(flow.FlowMaster):
def run(self):
@@ -16,24 +20,26 @@ class MyMaster(flow.FlowMaster):
except KeyboardInterrupt:
self.shutdown()
def handle_request(self, r):
f = flow.FlowMaster.handle_request(self, r)
def handle_request(self, f):
f = flow.FlowMaster.handle_request(self, f)
if f:
r.reply()
f.reply()
return f
def handle_response(self, r):
f = flow.FlowMaster.handle_response(self, r)
def handle_response(self, f):
f = flow.FlowMaster.handle_response(self, f)
if f:
r.reply()
print f
f.reply()
print(f)
return f
config = proxy.ProxyConfig(
cacert = os.path.expanduser("~/.mitmproxy/mitmproxy-ca.pem")
port=8080,
# use ~/.mitmproxy/mitmproxy-ca.pem as default CA file.
cadir="~/.mitmproxy/"
)
state = flow.State()
server = proxy.ProxyServer(config, 8080)
server = ProxyServer(config)
m = MyMaster(server, state)
m.run()

20
examples/flowwriter.py Normal file
View File

@@ -0,0 +1,20 @@
import random
import sys
from libmproxy.flow import FlowWriter
def start(context, argv):
if len(argv) != 2:
raise ValueError('Usage: -s "flowriter.py filename"')
if argv[1] == "-":
f = sys.stdout
else:
f = open(argv[1], "wb")
context.flow_writer = FlowWriter(f)
def response(context, flow):
if random.choice([True, False]):
context.flow_writer.add(flow)

254
examples/har_extractor.py Normal file
View File

@@ -0,0 +1,254 @@
"""
This inline script utilizes harparser.HAR from
https://github.com/JustusW/harparser to generate a HAR log object.
"""
from harparser import HAR
from datetime import datetime
class _HARLog(HAR.log):
# The attributes need to be registered here for them to actually be
# available later via self. This is due to HAREncodable linking __getattr__
# to __getitem__. Anything that is set only in __init__ will just be added
# as key/value pair to self.__classes__.
__page_list__ = []
__page_count__ = 0
__page_ref__ = {}
def __init__(self, page_list):
self.__page_list__ = page_list
self.__page_count__ = 0
self.__page_ref__ = {}
HAR.log.__init__(self, {"version": "1.2",
"creator": {"name": "MITMPROXY HARExtractor",
"version": "0.1",
"comment": ""},
"pages": [],
"entries": []})
def reset(self):
self.__init__(self.__page_list__)
def add(self, obj):
if isinstance(obj, HAR.pages):
self['pages'].append(obj)
if isinstance(obj, HAR.entries):
self['entries'].append(obj)
def create_page_id(self):
self.__page_count__ += 1
return "autopage_%s" % str(self.__page_count__)
def set_page_ref(self, page, ref):
self.__page_ref__[page] = ref
def get_page_ref(self, page):
return self.__page_ref__.get(page, None)
def get_page_list(self):
return self.__page_list__
def start(context, argv):
"""
On start we create a HARLog instance. You will have to adapt this to
suit your actual needs of HAR generation. As it will probably be
necessary to cluster logs by IPs or reset them from time to time.
"""
context.dump_file = None
if len(argv) > 1:
context.dump_file = argv[1]
else:
raise ValueError(
'Usage: -s "har_extractor.py filename" '
'(- will output to stdout, filenames ending with .zhar '
'will result in compressed har)'
)
context.HARLog = _HARLog(['https://github.com'])
context.seen_server = set()
def response(context, flow):
"""
Called when a server response has been received. At the time of this
message both a request and a response are present and completely done.
"""
# Values are converted from float seconds to int milliseconds later.
ssl_time = -.001
connect_time = -.001
if flow.server_conn not in context.seen_server:
# Calculate the connect_time for this server_conn. Afterwards add it to
# seen list, in order to avoid the connect_time being present in entries
# that use an existing connection.
connect_time = flow.server_conn.timestamp_tcp_setup - \
flow.server_conn.timestamp_start
context.seen_server.add(flow.server_conn)
if flow.server_conn.timestamp_ssl_setup is not None:
# Get the ssl_time for this server_conn as the difference between
# the start of the successful tcp setup and the successful ssl
# setup. If no ssl setup has been made it is left as -1 since it
# doesn't apply to this connection.
ssl_time = flow.server_conn.timestamp_ssl_setup - \
flow.server_conn.timestamp_tcp_setup
# Calculate the raw timings from the different timestamps present in the
# request and response object. For lack of a way to measure it dns timings
# can not be calculated. The same goes for HAR blocked: MITMProxy will open
# a server connection as soon as it receives the host and port from the
# client connection. So the time spent waiting is actually spent waiting
# between request.timestamp_end and response.timestamp_start thus it
# correlates to HAR wait instead.
timings_raw = {
'send': flow.request.timestamp_end - flow.request.timestamp_start,
'wait': flow.response.timestamp_start - flow.request.timestamp_end,
'receive': flow.response.timestamp_end - flow.response.timestamp_start,
'connect': connect_time,
'ssl': ssl_time
}
# HAR timings are integers in ms, so we have to re-encode the raw timings to
# that format.
timings = dict([(key, int(1000 * value))
for key, value in timings_raw.iteritems()])
# The full_time is the sum of all timings. Timings set to -1 will be ignored
# as per spec.
full_time = 0
for item in timings.values():
if item > -1:
full_time += item
started_date_time = datetime.fromtimestamp(
flow.request.timestamp_start,
tz=utc).isoformat()
request_query_string = [{"name": k, "value": v}
for k, v in flow.request.get_query()]
request_http_version = ".".join([str(v) for v in flow.request.httpversion])
# Cookies are shaped as tuples by MITMProxy.
request_cookies = [{"name": k.strip(), "value": v[0]}
for k, v in (flow.request.get_cookies() or {}).iteritems()]
request_headers = [{"name": k, "value": v} for k, v in flow.request.headers]
request_headers_size = len(str(flow.request.headers))
request_body_size = len(flow.request.content)
response_http_version = ".".join(
[str(v) for v in flow.response.httpversion])
# Cookies are shaped as tuples by MITMProxy.
response_cookies = [{"name": k.strip(), "value": v[0]}
for k, v in (flow.response.get_cookies() or {}).iteritems()]
response_headers = [{"name": k, "value": v}
for k, v in flow.response.headers]
response_headers_size = len(str(flow.response.headers))
response_body_size = len(flow.response.content)
response_body_decoded_size = len(flow.response.get_decoded_content())
response_body_compression = response_body_decoded_size - response_body_size
response_mime_type = flow.response.headers.get_first('Content-Type', '')
response_redirect_url = flow.response.headers.get_first('Location', '')
entry = HAR.entries(
{
"startedDateTime": started_date_time,
"time": full_time,
"request": {
"method": flow.request.method,
"url": flow.request.url,
"httpVersion": request_http_version,
"cookies": request_cookies,
"headers": request_headers,
"queryString": request_query_string,
"headersSize": request_headers_size,
"bodySize": request_body_size,
},
"response": {
"status": flow.response.code,
"statusText": flow.response.msg,
"httpVersion": response_http_version,
"cookies": response_cookies,
"headers": response_headers,
"content": {
"size": response_body_size,
"compression": response_body_compression,
"mimeType": response_mime_type},
"redirectURL": response_redirect_url,
"headersSize": response_headers_size,
"bodySize": response_body_size,
},
"cache": {},
"timings": timings,
})
# If the current url is in the page list of context.HARLog or does not have
# a referrer we add it as a new pages object.
if flow.request.url in context.HARLog.get_page_list() or flow.request.headers.get(
'Referer',
None) is None:
page_id = context.HARLog.create_page_id()
context.HARLog.add(
HAR.pages({
"startedDateTime": entry['startedDateTime'],
"id": page_id,
"title": flow.request.url,
})
)
context.HARLog.set_page_ref(flow.request.url, page_id)
entry['pageref'] = page_id
# Lookup the referer in the page_ref of context.HARLog to point this entries
# pageref attribute to the right pages object, then set it as a new
# reference to build a reference tree.
elif context.HARLog.get_page_ref(flow.request.headers.get('Referer', (None, ))[0]) is not None:
entry['pageref'] = context.HARLog.get_page_ref(
flow.request.headers['Referer'][0]
)
context.HARLog.set_page_ref(
flow.request.headers['Referer'][0], entry['pageref']
)
context.HARLog.add(entry)
def done(context):
"""
Called once on script shutdown, after any other events.
"""
from pprint import pprint
import json
json_dump = context.HARLog.json()
compressed_json_dump = context.HARLog.compress()
if context.dump_file == '-':
context.log(pprint.pformat(json.loads(json_dump)))
elif context.dump_file.endswith('.zhar'):
file(context.dump_file, "w").write(compressed_json_dump)
else:
file(context.dump_file, "w").write(json_dump)
context.log(
"HAR log finished with %s bytes (%s bytes compressed)" % (
len(json_dump), len(compressed_json_dump)
)
)
context.log(
"Compression rate is %s%%" % str(
100. * len(compressed_json_dump) / len(json_dump)
)
)
def print_attributes(obj, filter_string=None, hide_privates=False):
"""
Useful helper method to quickly get all attributes of an object and its
values.
"""
for attr in dir(obj):
if hide_privates and "__" in attr:
continue
if filter_string is not None and filter_string not in attr:
continue
value = getattr(obj, attr)
print("%s.%s" % ('obj', attr), value, type(value))

View File

@@ -1,50 +0,0 @@
#!/usr/bin/env python
"""
Zap encoding in requests and inject iframe after body tag in html responses.
Usage:
iframe_injector http://someurl/somefile.html
"""
from libmproxy import controller, proxy
import os
import sys
class InjectingMaster(controller.Master):
def __init__(self, server, iframe_url):
controller.Master.__init__(self, server)
self._iframe_url = iframe_url
def run(self):
try:
return controller.Master.run(self)
except KeyboardInterrupt:
self.shutdown()
def handle_request(self, msg):
if 'Accept-Encoding' in msg.headers:
msg.headers["Accept-Encoding"] = 'none'
msg.reply()
def handle_response(self, msg):
if msg.content:
c = msg.replace('<body>', '<body><iframe src="%s" frameborder="0" height="0" width="0"></iframe>' % self._iframe_url)
if c > 0:
print 'Iframe injected!'
msg.reply()
def main(argv):
if len(argv) != 2:
print "Usage: %s IFRAME_URL" % argv[0]
sys.exit(1)
iframe_url = argv[1]
config = proxy.ProxyConfig(
cacert = os.path.expanduser("~/.mitmproxy/mitmproxy-ca.pem")
)
server = proxy.ProxyServer(config, 8080)
print 'Starting proxy...'
m = InjectingMaster(server, iframe_url)
m.run()
if __name__ == '__main__':
main(sys.argv)

View File

@@ -0,0 +1,27 @@
# Usage: mitmdump -s "iframe_injector.py url"
# (this script works best with --anticache)
from bs4 import BeautifulSoup
from libmproxy.protocol.http import decoded
def start(context, argv):
if len(argv) != 2:
raise ValueError('Usage: -s "iframe_injector.py url"')
context.iframe_url = argv[1]
def response(context, flow):
if flow.request.host in context.iframe_url:
return
with decoded(flow.response): # Remove content encoding (gzip, ...)
html = BeautifulSoup(flow.response.content)
if html.body:
iframe = html.new_tag(
"iframe",
src=context.iframe_url,
frameborder=0,
height=0,
width=0)
html.body.insert(0, iframe)
flow.response.content = str(html)
context.log("Iframe inserted.")

View File

@@ -0,0 +1,36 @@
# This script makes mitmproxy switch to passthrough mode for all HTTP
# responses with "Connection: Upgrade" header. This is useful to make
# WebSockets work in untrusted environments.
#
# Note: Chrome (and possibly other browsers), when explicitly configured
# to use a proxy (i.e. mitmproxy's regular mode), send a CONNECT request
# to the proxy before they initiate the websocket connection.
# To make WebSockets work in these cases, supply
# `--ignore :80$` as an additional parameter.
# (see http://mitmproxy.org/doc/features/passthrough.html)
from libmproxy.protocol.http import HTTPRequest
from libmproxy.protocol.tcp import TCPHandler
from libmproxy.protocol import KILL
from libmproxy.script import concurrent
def start(context, argv):
HTTPRequest._headers_to_strip_off.remove("Connection")
HTTPRequest._headers_to_strip_off.remove("Upgrade")
def done(context):
HTTPRequest._headers_to_strip_off.append("Connection")
HTTPRequest._headers_to_strip_off.append("Upgrade")
@concurrent
def response(context, flow):
value = flow.response.headers.get_first("Connection", None)
if value and value.upper() == "UPGRADE":
# We need to send the response manually now...
flow.client_conn.send(flow.response.assemble())
# ...and then delegate to tcp passthrough.
TCPHandler(flow.live.c, log=False).handle_messages()
flow.reply(KILL)

166
examples/mitmproxywrapper.py Executable file
View File

@@ -0,0 +1,166 @@
#!/usr/bin/env python
#
# Helper tool to enable/disable OS X proxy and wrap mitmproxy
#
# Get usage information with:
#
# mitmproxywrapper.py -h
#
import subprocess
import re
import argparse
import contextlib
import os
import sys
class Wrapper(object):
def __init__(self, port, extra_arguments=None):
self.port = port
self.extra_arguments = extra_arguments
def run_networksetup_command(self, *arguments):
return subprocess.check_output(
['sudo', 'networksetup'] + list(arguments))
def proxy_state_for_service(self, service):
state = self.run_networksetup_command(
'-getwebproxy',
service).splitlines()
return dict([re.findall(r'([^:]+): (.*)', line)[0] for line in state])
def enable_proxy_for_service(self, service):
print('Enabling proxy on {}...'.format(service))
for subcommand in ['-setwebproxy', '-setsecurewebproxy']:
self.run_networksetup_command(
subcommand, service, '127.0.0.1', str(
self.port))
def disable_proxy_for_service(self, service):
print('Disabling proxy on {}...'.format(service))
for subcommand in ['-setwebproxystate', '-setsecurewebproxystate']:
self.run_networksetup_command(subcommand, service, 'Off')
def interface_name_to_service_name_map(self):
order = self.run_networksetup_command('-listnetworkserviceorder')
mapping = re.findall(
r'\(\d+\)\s(.*)$\n\(.*Device: (.+)\)$',
order,
re.MULTILINE)
return dict([(b, a) for (a, b) in mapping])
def run_command_with_input(self, command, input):
popen = subprocess.Popen(
command,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
(stdout, stderr) = popen.communicate(input)
return stdout
def primary_interace_name(self):
scutil_script = 'get State:/Network/Global/IPv4\nd.show\n'
stdout = self.run_command_with_input('/usr/sbin/scutil', scutil_script)
interface, = re.findall(r'PrimaryInterface\s*:\s*(.+)', stdout)
return interface
def primary_service_name(self):
return self.interface_name_to_service_name_map()[
self.primary_interace_name()]
def proxy_enabled_for_service(self, service):
return self.proxy_state_for_service(service)['Enabled'] == 'Yes'
def toggle_proxy(self):
new_state = not self.proxy_enabled_for_service(
self.primary_service_name())
for service_name in self.connected_service_names():
if self.proxy_enabled_for_service(service_name) and not new_state:
self.disable_proxy_for_service(service_name)
elif not self.proxy_enabled_for_service(service_name) and new_state:
self.enable_proxy_for_service(service_name)
def connected_service_names(self):
scutil_script = 'list\n'
stdout = self.run_command_with_input('/usr/sbin/scutil', scutil_script)
service_ids = re.findall(r'State:/Network/Service/(.+)/IPv4', stdout)
service_names = []
for service_id in service_ids:
scutil_script = 'show Setup:/Network/Service/{}\n'.format(
service_id)
stdout = self.run_command_with_input(
'/usr/sbin/scutil',
scutil_script)
service_name, = re.findall(r'UserDefinedName\s*:\s*(.+)', stdout)
service_names.append(service_name)
return service_names
def wrap_mitmproxy(self):
with self.wrap_proxy():
cmd = ['mitmproxy', '-p', str(self.port)]
if self.extra_arguments:
cmd.extend(self.extra_arguments)
subprocess.check_call(cmd)
def wrap_honeyproxy(self):
with self.wrap_proxy():
popen = subprocess.Popen('honeyproxy.sh')
try:
popen.wait()
except KeyboardInterrupt:
popen.terminate()
@contextlib.contextmanager
def wrap_proxy(self):
connected_service_names = self.connected_service_names()
for service_name in connected_service_names:
if not self.proxy_enabled_for_service(service_name):
self.enable_proxy_for_service(service_name)
yield
for service_name in connected_service_names:
if self.proxy_enabled_for_service(service_name):
self.disable_proxy_for_service(service_name)
@classmethod
def ensure_superuser(cls):
if os.getuid() != 0:
print('Relaunching with sudo...')
os.execv('/usr/bin/sudo', ['/usr/bin/sudo'] + sys.argv)
@classmethod
def main(cls):
parser = argparse.ArgumentParser(
description='Helper tool for OS X proxy configuration and mitmproxy.',
epilog='Any additional arguments will be passed on unchanged to mitmproxy.')
parser.add_argument(
'-t',
'--toggle',
action='store_true',
help='just toggle the proxy configuration')
# parser.add_argument('--honeyproxy', action='store_true', help='run honeyproxy instead of mitmproxy')
parser.add_argument(
'-p',
'--port',
type=int,
help='override the default port of 8080',
default=8080)
args, extra_arguments = parser.parse_known_args()
wrapper = cls(port=args.port, extra_arguments=extra_arguments)
if args.toggle:
wrapper.toggle_proxy()
# elif args.honeyproxy:
# wrapper.wrap_honeyproxy()
else:
wrapper.wrap_mitmproxy()
if __name__ == '__main__':
Wrapper.ensure_superuser()
Wrapper.main()

View File

@@ -1,8 +1,7 @@
def request(context, flow):
if "application/x-www-form-urlencoded" in flow.request.headers["content-type"]:
frm = flow.request.get_form_urlencoded()
frm["mitmproxy"] = ["rocks"]
flow.request.set_form_urlencoded(frm)
if "application/x-www-form-urlencoded" in flow.request.headers[
"content-type"]:
form = flow.request.get_form_urlencoded()
form["mitmproxy"] = ["rocks"]
flow.request.set_form_urlencoded(form)

View File

@@ -4,4 +4,3 @@ def request(context, flow):
if q:
q["mitmproxy"] = ["rocks"]
flow.request.set_query(q)

View File

@@ -0,0 +1,18 @@
# Usage: mitmdump -s "modify_response_body.py mitmproxy bananas"
# (this script works best with --anticache)
from libmproxy.protocol.http import decoded
def start(context, argv):
if len(argv) != 3:
raise ValueError('Usage: -s "modify-response-body.py old new"')
# You may want to use Python's argparse for more sophisticated argument
# parsing.
context.old, context.new = argv[1], argv[2]
def response(context, flow):
with decoded(flow.response): # automatically decode gzipped responses.
flow.response.content = flow.response.content.replace(
context.old,
context.new)

9
examples/nonblocking.py Normal file
View File

@@ -0,0 +1,9 @@
import time
from libmproxy.script import concurrent
@concurrent # Remove this and see what happens
def request(context, flow):
print("handle request: %s%s" % (flow.request.host, flow.request.path))
time.sleep(5)
print("start request: %s%s" % (flow.request.host, flow.request.path))

Some files were not shown because too many files have changed in this diff Show More