Compare commits

..

823 Commits

Author SHA1 Message Date
Maximilian Hils
e6bf033cbd bump version 2015-12-03 18:13:24 +01:00
Maximilian Hils
946bc05187 use version specifiers compatible with old setuptools releases 2015-12-03 17:57:29 +01:00
Maximilian Hils
46ae8b0e30 Revert "make setup.py wheel-ready"
This reverts commit 51bd98d5b1.
2015-12-03 17:28:52 +01:00
Maximilian Hils
51bd98d5b1 make setup.py wheel-ready 2015-12-03 16:25:49 +01:00
Maximilian Hils
8ef0624b51 Merge branch 'master' of https://github.com/mitmproxy/mitmproxy 2015-12-03 14:45:44 +01:00
Maximilian Hils
1619af1486 flow format compat: 0.14 -> 0.15 2015-12-03 14:45:26 +01:00
Maximilian Hils
b362e9a013 test flow conversion 2015-12-03 14:43:56 +01:00
Maximilian Hils
da50120502 appveyor: deploy binaries to snapshot server 2015-12-03 13:16:36 +01:00
Maximilian Hils
9c89bfbccc appveyor: build binaries 2015-12-03 12:56:41 +01:00
Maximilian Hils
d1ce1aa993 fix #839 2015-12-02 21:19:41 +01:00
Maximilian Hils
7274edce05 travis: retry snapshot upload 2015-12-02 21:03:45 +01:00
Maximilian Hils
85b553724c add tnetstring inspection tool 2015-12-02 19:59:02 +01:00
Maximilian Hils
3963a2191b add import capability for old flows, fix #840 2015-12-02 19:50:08 +01:00
Maximilian Hils
b5d5e56fdb remove docs from sdist
This has been broken anyway.
2015-11-29 19:07:27 +01:00
Maximilian Hils
ea3639209b travis: don't install virtualenv manually 2015-11-29 15:26:24 +01:00
Maximilian Hils
f9c000ea6e travis: fix osx binary build condition 2015-11-29 15:23:44 +01:00
Maximilian Hils
4c9fc2e3e9 travis: build binaries on osx 2015-11-29 15:11:08 +01:00
Maximilian Hils
f02da6448d disable concurrency tests on appveyor 2015-11-29 03:13:08 +01:00
Maximilian Hils
bb62f5f3f5 lessen test race conditions 2015-11-29 02:59:25 +01:00
Maximilian Hils
0b06b02c92 add new pyinstaller spec files 2015-11-29 02:48:39 +01:00
Maximilian Hils
43ed82062f fix #847 2015-11-27 21:21:04 +01:00
Maximilian Hils
6b92497d4f remove unnecessary race conditions in tests 2015-11-27 01:11:06 +01:00
Maximilian Hils
abd8881491 add memoryleak debug script 2015-11-26 23:26:01 +01:00
Maximilian Hils
a88004f1ce fix #831 2015-11-26 23:20:31 +01:00
Maximilian Hils
6a239526e5 http: catch all exceptions 2015-11-26 23:19:43 +01:00
Maximilian Hils
a9f64c22f8 simplify Client/ServerConnection.__repr__ 2015-11-26 23:15:21 +01:00
Maximilian Hils
89013eb7af establish tls with client even if server connection fails 2015-11-26 23:13:06 +01:00
Maximilian Hils
3eea7f1216 script reloader: minor fixes 2015-11-26 14:59:54 +01:00
Maximilian Hils
63355421ed travis: add OSX tests 2015-11-26 14:59:43 +01:00
Maximilian Hils
5d332e7218 fix #842 2015-11-26 14:58:08 +01:00
Maximilian Hils
354f84c4c8 skip timing tests on appveyor 2015-11-24 19:07:04 +01:00
Maximilian Hils
d2f69da235 disable script reloader
This currently throws some errors on OSX.
2015-11-24 18:54:16 +01:00
Maximilian Hils
a561e3bd3d Merge branch 'travis-contentviews' 2015-11-20 12:25:15 +01:00
Maximilian Hils
40b1819293 Merge pull request #836 from MatthewShao/fix#835
Fix #835 , can display unicode character correctly
2015-11-18 13:57:33 +01:00
Matthew Shao
b7bea03c68 fix #835 , can display unicode character correctly 2015-11-16 20:47:58 +08:00
Maximilian Hils
57cd9022d9 fix appveyor race conditions in tests 2015-11-14 22:14:18 +01:00
Maximilian Hils
d6bd1cb4a6 fix HTTPS Proxy-Authentication, refs #824 2015-11-14 21:55:02 +01:00
Maximilian Hils
0d98b9dcc5 finalize script reloading 🎉 2015-11-14 05:57:02 +01:00
Maximilian Hils
4499ab61c0 structure libmproxy.script 2015-11-14 04:21:38 +01:00
Maximilian Hils
247f27d821 minor stylistic fixes 2015-11-14 03:46:34 +01:00
Maximilian Hils
dce469d4c1 Merge pull request #833 from zbuc/contentview_scripts
Contentview scripts
2015-11-13 18:41:05 -08:00
Maximilian Hils
3cd709d982 Merge pull request #821 from zbuc/protobuf_contentview_test_fix
Fix failing protobuf contentview test
2015-11-13 18:35:10 -08:00
Chris Czub
e72a9a62a1 Feedback from PR #832 2015-11-13 16:55:27 -05:00
Chris Czub
d3feaa3bc6 Add custom content view plugin support for mitmproxy/mitmdump 2015-11-13 15:09:05 -05:00
Chris Czub
d7239d665e Add new contentviews' content type mappings 2015-11-13 15:08:52 -05:00
Chris Czub
82a90511bc Add "add" ContentView method & test 2015-11-13 15:07:56 -05:00
Maximilian Hils
f62d564cfb be more conservative about dependency versions
We had various examples in the past where new releases break mitmproxy completely. Just as of today, the lxml guys pushed a new release to pypi, but did not include wheels - you cannot install mitmproxy on Windows without a compiler installed now.
2015-11-13 19:57:02 +01:00
Matthew Shao
cd0b9e01be Decouple libmproxy.script from libmproxy.flow 2015-11-13 21:08:39 +08:00
Matthew Shao
2522ba69fa Move the observer initalization to the constructor of Script
class.Should work with both mitmproxy and mitmdump now.
Change the names in PEP8 style.
2015-11-11 20:59:12 +08:00
Matthew Shao
3f6521f912 Use watchdog to reload scripts automatically. 2015-11-11 09:03:05 +08:00
Maximilian Hils
3739e1fe82 fix scripteditor bug 2015-11-10 04:48:30 +01:00
Maximilian Hils
59d3e9d954 docs++ 2015-11-07 20:43:10 +01:00
Maximilian Hils
9298325ca5 Merge pull request #822 from ddworken/master
Added information on cert pinning (Fixes #689)
2015-11-07 11:30:28 -08:00
Maximilian Hils
c302bec198 travis: test optional content views as well 2015-11-07 20:17:46 +01:00
David Dworken
96465075f4 Added information on cert pinning (Fixes #689) 2015-11-06 21:23:10 -05:00
Aldo Cortesi
58aeb2b843 Bump version for next release cycle 2015-11-07 09:30:38 +13:00
Chris Czub
b0648ee8a6 Fix failing protobuf contentview test 2015-11-06 11:18:48 -05:00
Aldo Cortesi
9beae933ba Bump version, update CONTRIBUTORS, CHANGELOG 2015-11-06 13:52:08 +13:00
Aldo Cortesi
f16f2b9ce3 Adjust pyinstaller spec paths 2015-11-06 11:44:37 +13:00
Aldo Cortesi
6135e16482 Catch and ignore thread errors on exit
Keyboard interrupts bugger up Queues in some way, which causes a traceback on
exit in many of our tools. The issue seems easiest to reproduce with binary
builds on OSX.
2015-11-06 11:35:54 +13:00
Maximilian Hils
de5df2e4d4 Merge pull request #819 from tekii/hotfix-broken-copy
fix copy to clipboard command when copying content
2015-11-05 04:17:08 +01:00
Marcelo Glezer
6b6b0a9416 fix copy to clipboard command when copying content 2015-11-05 00:09:22 -03:00
Maximilian Hils
fb463f50ed Merge pull request #809 from zbuc/pfctl_errhandling
Better error handling/reporting for pfctl failures on OS X
2015-11-04 21:32:12 +01:00
Chris Czub
9398d5896b PR 809 make code more pythonic 2015-11-04 15:04:18 -05:00
Maximilian Hils
c62abd67d2 docs: fix broken graphic 2015-11-02 13:04:35 +01:00
Maximilian Hils
96db5edc5c docs: improve mode flowchart 2015-11-02 11:50:08 +01:00
Maximilian Hils
51a3378290 improve reverse proxy docs 2015-11-02 10:47:14 +01:00
Maximilian Hils
07b60acb7f try to fix appveyor race conditions in tests 2015-11-01 18:44:50 +01:00
Maximilian Hils
1bf34e6f45 Merge branch 'master' of https://github.com/mitmproxy/mitmproxy 2015-11-01 18:39:55 +01:00
Maximilian Hils
978eb17d66 fix #811 2015-11-01 18:37:20 +01:00
Maximilian Hils
5e90459569 Merge pull request #810 from gecko655/ctrl_fb
Use ctrl+f and ctrl+b to scroll a page
2015-10-31 18:00:14 +01:00
gecko655
6aa7454f92 Use ctrl+f and ctrl+b to scroll a page 2015-10-30 12:48:38 +09:00
Chris Czub
88451ef245 Declare & define insufficient_priv 2015-10-29 16:01:24 -04:00
Chris Czub
70c28f5d34 Better error handling/reporting for pfctl failures on OS X 2015-10-29 15:56:43 -04:00
Maximilian Hils
65c08ec899 Merge pull request #791 from tunz/master
Prevent flowview from creating duplicated windows
2015-10-28 13:10:38 +01:00
Maximilian Hils
8e9cd77b55 Merge pull request #805 from Badg/patch-1
Update ubuntu installation to includ libjpeg
2015-10-23 03:25:23 +02:00
Nick Badger
4537d561c6 Ubuntu install missing libjpeg8-dev, zlib1g-dev
As per https://pillow.readthedocs.org/en/3.0.0/installation.html#linux-installation, to avoid missing install dependencies.
2015-10-22 18:11:06 -07:00
Nick Badger
a6fee43384 Update ubuntu installation to includ libjpeg
Otherwise install fails with error "--enable-jpeg requested but jpeg not found"
2015-10-22 17:38:55 -07:00
Maximilian Hils
ed56eadd28 Merge branch 'master' of https://github.com/mitmproxy/mitmproxy 2015-10-22 02:38:14 +02:00
Maximilian Hils
726b70ccdc fix #800 2015-10-22 02:38:00 +02:00
Maximilian Hils
4d772d7ce0 Merge pull request #801 from ben-lerner/doc_fix
doc typo fix
2015-10-14 09:37:24 +02:00
Ben Lerner
22191d63ab doc typo fix 2015-10-13 21:09:56 -04:00
Maximilian Hils
7d8191ee37 update web builds, use watchify 2015-10-08 12:43:55 +02:00
Maximilian Hils
442f079e0b Merge pull request #797 from colinbendell/colinbendell-patch-1
server_conn.address might not yet be established
2015-10-08 12:37:43 +02:00
Choongwoo Han
9c0efdf2ec Refresh flowview instead of reopen the same flowview 2015-10-08 11:31:33 +09:00
Colin Bendell
a85e4bc75c default should not be None
Fixed default value when self.address has not been set
2015-10-07 21:46:08 -04:00
Colin Bendell
77aeac11a9 Check if server connection hasn't yet been initiated
This fixes #761 when NoneType error is thrown when non-TLS requests initiate a client request but the server connection hasn't yet been initiated.
2015-10-07 20:30:31 -04:00
Maximilian Hils
09e36fae4e Merge pull request #792 from tunz/patch-1
Correct a wrong link in CONTRIBUTING.md
2015-10-04 10:36:52 +02:00
Choongwoo Han
3ffc3404b0 Update CONTRIBUTING.md
Wrong link
2015-10-04 14:49:41 +09:00
Choongwoo Han
45494d1c79 Prevent flowview from creating duplicated windows 2015-10-04 14:21:51 +09:00
Maximilian Hils
ce38a05a20 Merge remote-tracking branch 'origin/master' 2015-10-03 23:59:13 +02:00
Maximilian Hils
26631621ee fix #786 2015-10-03 14:48:51 +02:00
Maximilian Hils
d67f4fa3cc Merge pull request #788 from sethp-jive/patch-1
Allow reading scripts from an anonymous pipe
2015-10-01 00:59:25 +02:00
sethp-jive
fd8c921a2f Allow reading scripts from an anonymous pipe
Bash (and many other shells) provide a nifty feature in "anonymous pipe" or "anonymous fifo" whereby the output of a subshell may be treated as a simple file by the parent shell: http://unix.stackexchange.com/a/156088

Unfortunately, libmproxy complains because that "file" is not a regular file, as os.path.isfile checks, e.g. giving the error "Not a file: /dev/fd/11". This patch is intended to provide for the following use-case:

```
mitmdump -s <(echo "def response(context, flow):\n  flow.response.headers['newheader'] = [`hostname`]")
```

where `hostname` may be replaced with a more complicated lookup.
2015-09-30 15:55:43 -07:00
Maximilian Hils
c6811bd0e8 fix #773 2015-09-28 14:55:13 +02:00
Maximilian Hils
86ef19b450 fix tests 2015-09-28 14:04:41 +02:00
Maximilian Hils
c11ab3676d Merge branch 'http-models' 2015-09-28 13:54:53 +02:00
Maximilian Hils
6661770d4e handle Expect: 100-continue header, fix #770 2015-09-28 10:59:10 +02:00
Maximilian Hils
6075957a97 move tests to netlib 2015-09-27 00:50:14 +02:00
Maximilian Hils
1b6ea5caf3 adjust to netlib response changes + docs 2015-09-26 17:41:14 +02:00
Maximilian Hils
b13acd7956 adjust to netlib request changes + docs 2015-09-26 01:23:59 +02:00
Maximilian Hils
a978c6b9ce fix tests 2015-09-21 23:39:22 +02:00
Maximilian Hils
2536e1d3e7 appveyor: use py.test 2015-09-21 23:05:12 +02:00
Maximilian Hils
bba5ec7144 experimental: run tests using py.tests 2015-09-21 18:31:30 +02:00
Maximilian Hils
88375ad64a fix minor bugs, add py.test compatibility 2015-09-21 02:26:47 +02:00
Maximilian Hils
6d27901b6f fix replay functionality 2015-09-19 11:59:05 +02:00
Maximilian Hils
42bbd3c928 don't cache changed messages, fix #777 2015-09-19 11:50:02 +02:00
Maximilian Hils
fde2420e37 fix #778 2015-09-19 11:18:57 +02:00
Maximilian Hils
2d4a5fb116 experimental: don't interfere with headers, fix #93 2015-09-18 18:07:38 +02:00
Maximilian Hils
66d21fa4ba trigger inline script hooks for artifical responses, fix #775 2015-09-18 13:51:05 +02:00
Maximilian Hils
5df5ee15f2 remove old server replay workaround, fix #774 2015-09-18 13:27:05 +02:00
Maximilian Hils
906360f63f code -> status_code, httpversion -> http_version 2015-09-17 15:16:33 +02:00
Maximilian Hils
12984f149c move body assembly to netlib 2015-09-17 02:40:08 +02:00
Maximilian Hils
14a5f405fd use new netlib exceptions 2015-09-17 02:13:28 +02:00
Maximilian Hils
8fbed971ae Merge pull request #768 from mitmproxy/netlib-http1-refactor
Adjust to netlib changes
2015-09-16 20:24:48 +02:00
Maximilian Hils
0af0608978 adjust to netlib changes 2015-09-16 18:45:22 +02:00
Maximilian Hils
ee6969c1fa s/below/above/ 2015-09-16 13:40:50 +02:00
Maximilian Hils
f5900d1a7b simplify test script 2015-09-16 04:09:05 +02:00
Maximilian Hils
1f3844da89 make pypi happy 2015-09-16 04:08:29 +02:00
Maximilian Hils
774d5b42a2 improve readme 2015-09-16 03:59:22 +02:00
Maximilian Hils
457025df9a Merge pull request #751 from mitmproxy/readthedocs
Move Docs to readthedocs
2015-09-16 02:53:01 +02:00
Maximilian Hils
436a9ea839 minor fixes 2015-09-14 23:58:06 +02:00
Maximilian Hils
32b487109f Merge pull request #765 from mitmproxy/such-colors-very-wow
Improve Content Views
2015-09-12 17:57:21 +02:00
Maximilian Hils
4106e19612 relax test suite time tests 2015-09-12 17:50:24 +02:00
Maximilian Hils
5fe12a467f fix tests 2015-09-12 17:40:30 +02:00
Maximilian Hils
eb2264e91a improve display of non-ascii contents
fixes #283
2015-09-12 17:10:38 +02:00
Maximilian Hils
049d253a83 simplify contentview api 2015-09-12 13:49:16 +02:00
Maximilian Hils
9c31669211 mitmdump: colorize output, add content views 2015-09-11 19:03:50 +02:00
Maximilian Hils
b7b46bac46 content view: fix fallback 2015-09-11 16:40:58 +02:00
Maximilian Hils
02d80631dc Merge pull request #764 from mitmproxy/contentviews
Extract Content Views from Console
2015-09-11 15:31:25 +02:00
Maximilian Hils
47602dc1a5 clean up tests 2015-09-11 13:41:16 +02:00
Maximilian Hils
960f62f363 fix bugs 2015-09-11 13:37:52 +02:00
Maximilian Hils
625a719eb1 completely remove console from contentviews 2015-09-11 12:26:52 +02:00
Maximilian Hils
7c186a4edb Merge branch 'master' into contentviews 2015-09-11 12:13:39 +02:00
Maximilian Hils
dd414e4852 better error messages, remove error cause 2015-09-11 02:17:04 +02:00
Maximilian Hils
40ce06e780 tls layer: fix early peek 2015-09-11 01:47:13 +02:00
Maximilian Hils
ffdf143be4 better exception handling 2015-09-11 01:39:33 +02:00
Maximilian Hils
c159c8ca13 fix chunked encoding 2015-09-11 01:18:17 +02:00
Maximilian Hils
30f0ee40c5 nicer error messages 2015-09-11 00:49:37 +02:00
Maximilian Hils
d1bc966e5b polish for release: introduce http2 and rawtcp as command line switches 2015-09-11 00:00:00 +02:00
Maximilian Hils
33c0d36530 fix exception re-raise 2015-09-10 18:36:50 +02:00
Maximilian Hils
35a99d2faf start reraising exceptions properly 2015-09-10 16:24:22 +02:00
Maximilian Hils
ebba79b655 raw tcp mode: use ssl_read_select 2015-09-10 11:33:03 +02:00
Maximilian Hils
3b6140dfff fix send_response if content is missing 2015-09-10 10:32:08 +02:00
Maximilian Hils
c573d8c292 inline scripts: provide __file__ 2015-09-10 10:31:01 +02:00
Maximilian Hils
cf2b2e0cc7 simplify streaming http layer 2015-09-10 10:20:11 +02:00
Maximilian Hils
61f4319491 http protocol: use new tls attribute 2015-09-09 18:49:32 +02:00
Maximilian Hils
e63ef3a520 add inline script for conditional tls passthrough
fix #646
2015-09-08 21:35:15 +02:00
Maximilian Hils
c3f73552b8 docs: add travis integration 2015-09-08 16:07:27 +02:00
Maximilian Hils
4b8e162a8b Merge branch 'master' into readthedocs 2015-09-08 15:36:37 +02:00
Maximilian Hils
c3ba98b681 docs: update documentedlist, add filter table headers 2015-09-08 15:36:24 +02:00
Maximilian Hils
8dfa15c2d4 whitelist next_layer for @concurrent 2015-09-07 16:05:16 +02:00
Maximilian Hils
d002371d30 expose next_layer to inline scripts 2015-09-07 13:52:58 +02:00
Maximilian Hils
c4286b15dc docs: minor fixes 2015-09-07 10:52:18 +02:00
Maximilian Hils
31ee4607c8 remove old docs 2015-09-07 10:30:40 +02:00
Maximilian Hils
b4013659a8 docs 🎉 2015-09-06 03:20:58 +02:00
Maximilian Hils
eb2334c6cb Merge branch 'master' into readthedocs 2015-09-06 01:37:19 +02:00
Maximilian Hils
853cd81075 docs++ 2015-09-06 01:37:15 +02:00
Maximilian Hils
23e8260a99 finish tools section 2015-09-05 23:50:37 +02:00
Maximilian Hils
a8d931089c fix tests 2015-09-05 20:53:44 +02:00
Maximilian Hils
5125c669cc adjust to new netlib Headers class 2015-09-05 20:45:58 +02:00
Maximilian Hils
1165e35e1b docs++ 2015-09-05 20:15:35 +02:00
Maximilian Hils
1fb28594ed doc: headers class 2015-09-05 13:27:11 +02:00
Maximilian Hils
b62498e125 remove urwid from contentviews 2015-09-04 17:33:21 +02:00
Maximilian Hils
018c693dee remove urwid from contentviews (wip) 2015-09-04 17:07:14 +02:00
Maximilian Hils
74b3b842fe rewrite basic docs for readthedocs 2015-09-04 16:17:55 +02:00
Maximilian Hils
00561d280c speed up filters 2015-09-04 02:11:09 +02:00
Maximilian Hils
e88c7e4c58 Merge branch 'master' into readthedocs 2015-09-04 00:47:04 +02:00
Maximilian Hils
ee8e5947df Merge branch 'master' of https://github.com/mitmproxy/mitmproxy 2015-09-04 00:46:51 +02:00
Maximilian Hils
a18db90ea3 update example inline scripts 2015-09-04 00:46:42 +02:00
Maximilian Hils
2d1c382f38 docs, docs, docs! 2015-09-04 00:45:47 +02:00
Thomas Kriechbaumer
47ab7f04ea http2: Ping frames are handled in netlib 2015-09-03 21:23:19 +02:00
Maximilian Hils
29698aa83c add dev docs 2015-09-03 19:46:58 +02:00
Maximilian Hils
14457f29b3 docs++ 2015-09-03 18:55:38 +02:00
Maximilian Hils
99126f62ed remove depth attribute from set_server 2015-09-03 18:25:36 +02:00
Maximilian Hils
8da683a638 Merge branch 'master' of https://github.com/mitmproxy/mitmproxy 2015-09-03 17:01:37 +02:00
Maximilian Hils
f4272de5ec remove ServerConnectionMixin.reconnect 2015-09-03 17:01:25 +02:00
Thomas Kriechbaumer
3a229f60e3 http2: fix ping response 2015-09-03 14:26:36 +02:00
Thomas Kriechbaumer
1f6d05f89f http2: server can send WindowUpdate frames as well 2015-09-03 14:09:59 +02:00
Thomas Kriechbaumer
bc93600a66 http2: add GoAway support for client 2015-09-03 13:55:13 +02:00
Thomas Kriechbaumer
b4d6f2e12b http2: fix PingFrame again 2015-09-03 13:55:13 +02:00
Thomas Kriechbaumer
29ae2bbf91 http2: fix multiple stream per connection
fixes #746
2015-09-03 13:54:58 +02:00
Thomas Kriechbaumer
bde4bdd1d2 http2: fix unhandled frames 2015-09-03 13:40:35 +02:00
Maximilian Hils
a0f3803233 Merge pull request #748 from Kriechi/tls-ciphers
pass-through ciphers from client to server
2015-09-03 12:57:56 +02:00
Maximilian Hils
7a1e2789a8 Merge pull request #749 from Kriechi/ignore-priority-frames
ignore http2 priority frames
2015-09-03 12:54:54 +02:00
Thomas Kriechbaumer
37e6b3c401 http2: improve unexpected frame handling and shutdown 2015-09-03 11:09:59 +02:00
Maximilian Hils
cc2a6a3919 fix circular imports 2015-09-02 20:56:19 +02:00
Thomas Kriechbaumer
c79af62763 ignore http2 priority frames 2015-09-02 20:50:50 +02:00
Thomas Kriechbaumer
0047ac4cdc pass-through ciphers from client to server 2015-09-02 20:46:14 +02:00
Chris Czub
b4e0be9052 PR #700
Start moving the contentview up a level
Started shifting the contentview class up to libmproxy
2015-09-02 20:30:58 +02:00
Maximilian Hils
c14fbc7794 Merge pull request #741 from mitmproxy/proxy-refactor-cb
Proxy Refactor
2015-09-02 01:16:48 +02:00
Maximilian Hils
f1c8b47b1e better tls error messages, fix #672 2015-09-01 19:24:36 +02:00
Maximilian Hils
2f0d650729 Merge branch 'master' into proxy-refactor-cb 2015-09-01 02:39:59 +02:00
Maximilian Hils
6719aa5986 Merge branch 'proxy-refactor-cb' of https://github.com/mitmproxy/mitmproxy into proxy-refactor-cb 2015-09-01 02:39:57 +02:00
Maximilian Hils
e8de7595c2 .env: fix windows compatibility 2015-09-01 02:37:03 +02:00
Maximilian Hils
b5f1c38e78 minor docs improvements 2015-09-01 02:35:05 +02:00
Maximilian Hils
de10b3f7ec Merge pull request #744 from Kriechi/proxy-refactor-cb
do not log WindowUpdateFrame frames
2015-08-31 23:20:30 +02:00
Thomas Kriechbaumer
c4d6b35726 do not log WindowUpdateFrame frames 2015-08-31 22:22:10 +02:00
Maximilian Hils
481cc6ea84 we don't support socks auth, refs #738 2015-08-31 17:29:14 +02:00
Maximilian Hils
b04e6e56ab update inline script hooks 2015-08-31 17:05:52 +02:00
Maximilian Hils
41e6e538df fix layer initialization 2015-08-31 13:49:47 +02:00
Maximilian Hils
7450bef615 fix dns_spoofing example, avoid connecting to itself 2015-08-31 13:43:30 +02:00
Maximilian Hils
1e9aef5b1e fix upstream proxy server change, update example 2015-08-31 00:14:42 +02:00
Maximilian Hils
63ad4a4f51 coverage++ 2015-08-30 15:59:50 +02:00
Maximilian Hils
a86ec56012 move files around 2015-08-30 15:27:29 +02:00
Maximilian Hils
421b241ff0 remove http2http references 2015-08-30 13:40:23 +02:00
Maximilian Hils
3873e08339 remove old code 2015-08-30 03:42:11 +02:00
Maximilian Hils
08655cb956 Merge remote-tracking branch 'origin/master' into proxy-refactor-cb 2015-08-30 03:24:05 +02:00
Maximilian Hils
21e7f420d2 minor fixes 2015-08-30 03:23:57 +02:00
Maximilian Hils
1dd09a5509 always insert tls layer for inline script upgrades 2015-08-30 02:27:38 +02:00
Maximilian Hils
dd7f50d64b restructure code, remove cruft 2015-08-30 01:21:58 +02:00
Maximilian Hils
100ea27c30 simplify raw tcp protocol 2015-08-29 23:08:16 +02:00
Maximilian Hils
a7058e2a3c fix bugs, fix tests 2015-08-29 20:53:25 +02:00
Maximilian Hils
63844df343 fix streaming 2015-08-29 14:28:11 +02:00
Maximilian Hils
2dfba2105b move sslversion mapping to netlib 2015-08-29 12:34:01 +02:00
Maximilian Hils
1cc48345e1 clean up config/cmdline, fix bugs, remove cruft 2015-08-28 01:51:13 +02:00
Maximilian Hils
a86491eeed Revert "unify SSL version/method handling"
This reverts commit 14e49f4fc7.
2015-08-27 18:37:16 +02:00
Maximilian Hils
5b17496c7e start fixing proxy config 2015-08-27 18:31:15 +02:00
Maximilian Hils
83decd6771 fix inline script redirects 2015-08-27 17:35:53 +02:00
Maximilian Hils
515c024448 handle tls server errors more gracefully 2015-08-27 15:59:56 +02:00
Maximilian Hils
ecfde4247f re-add http1 replay 2015-08-27 15:48:41 +02:00
Maximilian Hils
0f97899fbd re-add --ignore and --tcp 2015-08-27 15:26:21 +02:00
Maximilian Hils
9389c186ba improve travis 2015-08-27 02:57:09 +02:00
Maximilian Hils
23e2d2136c Merge pull request #735 from ender672/disable-mouse-option
console: add command line flag to disable mouse interaction
2015-08-27 01:25:42 +02:00
Maximilian Hils
f6dadc2b0d no more sni double-connects! 2015-08-27 00:07:44 +02:00
Maximilian Hils
9c6b3eb58a clean up clienthello parsing 2015-08-26 22:00:50 +02:00
Maximilian Hils
2cfc1b1b40 fix non-alpn clients 2015-08-26 20:48:59 +02:00
Maximilian Hils
778644d4b8 http2: fix bugs, chrome works 🎉 2015-08-26 15:12:04 +02:00
Maximilian Hils
605af2d3d4 Merge branch 'proxy-refactor-cb' of https://github.com/mitmproxy/mitmproxy into proxy-refactor-cb 2015-08-26 14:03:58 +02:00
Maximilian Hils
aebe342025 improve alpn handling 2015-08-26 14:03:51 +02:00
Maximilian Hils
85b3899126 Merge pull request #739 from Kriechi/proxy-refactor-cb
fix return value and empty requests
2015-08-26 13:49:42 +02:00
Thomas Kriechbaumer
158906444f fix return value and empty requests 2015-08-26 13:48:39 +02:00
Maximilian Hils
1093d185ec manually read tls clienthello 2015-08-26 06:38:03 +02:00
Maximilian Hils
3fa65c48dd manually read tls clienthello [wip] 2015-08-26 05:39:00 +02:00
Maximilian Hils
b19eb2126b update slackin url 2015-08-25 23:40:09 +02:00
Maximilian Hils
8ce0de8bed minor fixes 2015-08-25 18:24:17 +02:00
Maximilian Hils
56a4bc381e request -> request_method 2015-08-24 18:17:04 +02:00
Maximilian Hils
f1f34e7713 fix bugs, fix tests 2015-08-24 16:52:03 +02:00
Thomas Kriechbaumer
05d26545e4 adapt netlib changes 2015-08-21 10:26:28 +02:00
Thomas Kriechbaumer
55cfd259dc http2: simplify protocol-related code 2015-08-20 20:31:01 +02:00
Thomas Kriechbaumer
5746472426 fix typo 2015-08-20 19:53:17 +02:00
Timothy Elliott
fb4af4eb78 console: add command line flag to disable mouse interaction
Adds the --no-mouse command line option to disable the mouse.

Fixes #685
2015-08-19 13:07:39 -07:00
Thomas Kriechbaumer
4339b8e7fa http2: use callback for handle unexpected frames 2015-08-19 21:09:48 +02:00
Maximilian Hils
721bd1c136 Merge pull request #734 from Kriechi/proxy-refactor-cb
move read methods to lower HTTP layer
2015-08-19 18:15:49 +02:00
Thomas Kriechbaumer
f2ace5493b move read methods to lower HTTP layer 2015-08-19 18:09:45 +02:00
Maximilian Hils
eda88428da Merge pull request #733 from Kriechi/proxy-refactor-cb
Proxy refactor cb
2015-08-19 16:44:28 +02:00
Thomas Kriechbaumer
97bfd1d856 move send method to lower layers 2015-08-19 16:36:37 +02:00
Thomas Kriechbaumer
c9fa8491cc improve next_layer detection 2015-08-19 16:32:02 +02:00
Maximilian Hils
b8db81969d make dev installation instructions copy-pasteable 2015-08-19 15:11:32 +02:00
Maximilian Hils
7730d2e0c0 fix virtualenv activation 2015-08-19 15:10:15 +02:00
Maximilian Hils
98583ce870 fix docs typo
refs mitmproxy/mitmproxy.org#7
2015-08-19 14:08:32 +02:00
Thomas Kriechbaumer
26052767a2 Merge pull request #732 from FreeArtMan/master
Fixing issue #710. Prety printing in read_dumpfile
2015-08-19 11:45:27 +02:00
FreeArtMan
4d9bf45e82 Fixing issue #710. Prety printing in read_dumpfile 2015-08-19 09:59:13 +01:00
Thomas Kriechbaumer
9bae97eb17 http2: fix connection preface and wrappers 2015-08-19 09:43:43 +02:00
Thomas Kriechbaumer
cd419300a9 temporarily disable pypy with new openssl on travis 2015-08-18 21:24:40 +02:00
Thomas Kriechbaumer
af6fefb5b4 temporarily disable pypy on travis 2015-08-18 21:14:37 +02:00
Maximilian Hils
ab1549e0ef yield -> callbacks 2015-08-18 15:59:44 +02:00
Maximilian Hils
96de7ad562 various fixes 2015-08-18 14:15:08 +02:00
Maximilian Hils
99129ab5a1 Merge remote-tracking branch 'Kriechi/proxy-refactor' into proxy-refactor
Conflicts:
	libmproxy/protocol2/http.py
2015-08-17 19:20:28 +02:00
Aldo Cortesi
9286f5b5b4 Small tweaks to read_dumpfile example. 2015-08-17 11:29:24 +12:00
Maximilian Hils
a2b8504889 improve protocol handling 2015-08-16 23:25:02 +02:00
Thomas Kriechbaumer
38c456bb62 implement Http1 and Http2 protocols as layers 2015-08-16 15:19:11 +02:00
Maximilian Hils
c04fa1b233 minor fixes 2015-08-16 12:52:34 +02:00
Maximilian Hils
61afac8637 Merge remote-tracking branch 'Kriechi/proxy-refactor' into proxy-refactor
Conflicts:
	libmproxy/protocol2/http_proxy.py
	libmproxy/protocol2/tls.py
	libmproxy/proxy/connection.py
2015-08-16 12:47:13 +02:00
Maximilian Hils
4c31ffd90f minor fixes 2015-08-16 12:43:15 +02:00
Aldo Cortesi
19a17933cc Disable mitmweb OSX binary generation for now 2015-08-16 21:40:41 +12:00
Thomas Kriechbaumer
1e40d34e94 add ALPN to proxy connections 2015-08-16 11:36:31 +02:00
Aldo Cortesi
be498bc1a3 Adapt mitmdump and mitmweb for certifi and release process 2015-08-16 19:55:55 +12:00
Aldo Cortesi
2973a79c59 Adapt mitmproxy.spec for new cryptography, certifi and new release structure 2015-08-16 17:24:40 +12:00
Aldo Cortesi
7e4020213c Remove release tools 2015-08-16 12:31:51 +12:00
Maximilian Hils
a175572447 Merge remote-tracking branch 'Kriechi/proxy-refactor' into proxy-refactor 2015-08-15 20:22:45 +02:00
Maximilian Hils
2a15479cdb fix bugs, make https work 2015-08-15 20:20:46 +02:00
Thomas Kriechbaumer
a9dd82c986 add ALPN to proxy connections 2015-08-15 17:49:40 +02:00
Maximilian Hils
0dd243c5e4 various fixes 2015-08-15 16:26:12 +02:00
Maximilian Hils
747699b126 more work on http protocol 2015-08-14 16:49:52 +02:00
Maximilian Hils
808218f4bc more work on http layer 2015-08-14 10:41:11 +02:00
Maximilian Hils
aef3b626a7 wip commit 2015-08-11 20:32:14 +02:00
Maximilian Hils
026330a3b0 cleaner Exceptions, ssl -> tls, upstream proxy mode 2015-08-11 20:32:13 +02:00
Maximilian Hils
314e0f5839 add reverseproxy mode, fix bugs 2015-08-11 20:32:12 +02:00
Maximilian Hils
aac0ab23eb simplify layer code, add yield_from_callback decorator 2015-08-11 20:32:12 +02:00
Maximilian Hils
c46e3f90bb apply fixes from proxy-refactor-cb branch 2015-08-11 20:32:11 +02:00
Maximilian Hils
531ca4a356 minor fixes 2015-08-11 20:32:10 +02:00
Maximilian Hils
e815915b22 add auto layer, multiple other fixes 2015-08-11 20:32:10 +02:00
Maximilian Hils
c1d016823c move files around 2015-08-11 20:32:09 +02:00
Maximilian Hils
be995ddbd6 add ssl layer 2015-08-11 20:32:09 +02:00
Maximilian Hils
863113f989 first initial proof-of-concept 2015-08-11 20:32:08 +02:00
Maximilian Hils
a9fcef868b Merge pull request #720 from Kriechi/cleanup
move code to netlib
2015-08-11 11:59:37 +02:00
Thomas Kriechbaumer
891fa50e55 move code to netlib 2015-08-10 21:04:17 +02:00
Maximilian Hils
a10c31c698 dev script: fix Linux+vagrant+virtualenv 2015-08-07 14:51:27 +02:00
Maximilian Hils
85f977aacd dev script: fix Windows+vagrant+virtualenv 2015-08-07 14:45:48 +02:00
Maximilian Hils
69ce4c3f14 remove evil unicode_literals 2015-08-06 10:49:41 +02:00
Maximilian Hils
adf2877020 fix #705 2015-08-03 18:07:30 +02:00
Thomas Kriechbaumer
6cce2f14d7 fix tests 2015-08-02 11:26:33 +02:00
Thomas Kriechbaumer
ff1e7e6409 fix imports for encoding 2015-08-01 14:53:34 +02:00
Thomas Kriechbaumer
fa568c2d3b move encoding tests from mitmproxy to netlib 2015-08-01 14:53:20 +02:00
Thomas Kriechbaumer
b732a1cb3d reimplement streaming for HTTP/1 2015-08-01 14:37:33 +02:00
Thomas Kriechbaumer
54866c0faa revert hard-coded HTTP/2 protocol changes 2015-08-01 14:37:33 +02:00
Thomas Kriechbaumer
db02553e2a move code from mitmproxy to netlib 2015-08-01 14:37:32 +02:00
Thomas Kriechbaumer
8a05151170 revert ALPN-related changes to fix master
In the future this should be added again to support HTTP/2.
2015-08-01 14:37:32 +02:00
Aldo Cortesi
c31b6c3c36 Merge pull request #698 from Kriechi/http2-wip
[WIP] Protocol Refactoring for HTTP/2
2015-08-01 11:38:33 +12:00
Thomas Kriechbaumer
4f38c6b90e attach application protocol to connection 2015-07-30 19:53:29 +02:00
Thomas Kriechbaumer
a5d9e1f44d move code to netlib and implement protocols 2015-07-30 13:53:17 +02:00
Thomas Kriechbaumer
89f22f7359 refactor connection & protocol handling 2015-07-30 13:53:17 +02:00
Maximilian Hils
cdc84f52d2 Merge pull request #699 from onlywade/bugfix/docs_update_shortcut_keys
Update docs to reflect current shortcut keys for features which have …
2015-07-30 10:47:12 +02:00
Wade Catron
3346daa65a Update docs to reflect current shortcut keys for features which have been moved into the options menu. 2015-07-29 16:18:49 -07:00
Maximilian Hils
d2ae6b630e Merge pull request #548 from macmantrl/no_serverconn
Prevent unnecessary upstream server connects
2015-07-26 11:58:21 +02:00
Aldo Cortesi
ee163ed5b0 Bump version for dev 2015-07-26 17:46:49 +12:00
Aldo Cortesi
675e70c7eb Changelog for v0.13 2015-07-26 14:21:18 +12:00
Thomas Kriechbaumer
e9bbcfadc1 fix module imports 2015-07-25 20:00:34 +02:00
Thomas Kriechbaumer
07c9d46fab remove debug output in tests 2015-07-24 18:01:55 +02:00
Maximilian Hils
0892649d31 Merge pull request #675 from Kriechi/protocol-refactor
HTTP protocol refactoring
2015-07-24 17:52:44 +02:00
Maximilian Hils
e0d1e8caf6 fix tests 2015-07-24 03:09:08 +02:00
Maximilian Hils
7bf8088d80 improve inline scripts, fix #683, fix #684 2015-07-24 02:57:56 +02:00
Maximilian Hils
9b3fe80697 minor style improvements 2015-07-22 16:00:32 +02:00
Thomas Kriechbaumer
cedc0407de refactor to use netlib.http protocols 2015-07-22 15:30:12 +02:00
Thomas Kriechbaumer
bb265d0c40 use new netlib module names 2015-07-22 15:30:11 +02:00
Thomas Kriechbaumer
df1b0df39f use netlib.http_semantics for generic data 2015-07-22 15:30:11 +02:00
Maximilian Hils
c3c3d28bb1 update build script 2015-07-22 13:49:18 +02:00
Maximilian Hils
fe03a656a9 make build script amazing 2015-07-22 02:43:45 +02:00
Maximilian Hils
d2d2edc140 make build script executable on *nix 2015-07-22 00:44:24 +02:00
Maximilian Hils
170568ded0 fix text selection hint 2015-07-22 00:41:02 +02:00
Maximilian Hils
cacf767b5c bump version 2015-07-22 00:16:38 +02:00
Maximilian Hils
ec02eda0b4 preliminary release script 2015-07-21 19:03:25 +02:00
Maximilian Hils
7fcbbb86cc streamline build process 2015-07-21 17:51:59 +02:00
Maximilian Hils
a08172f6cc fix slack badge 2015-07-17 20:49:58 +02:00
Maximilian Hils
1abd2647b4 Add Slack to README. 2015-07-15 04:20:04 +02:00
Maximilian Hils
822bd10465 Merge pull request #677 from isra17/json_error
Use `ensure_ascii` in wep.app#broadcast
2015-07-14 00:53:32 +02:00
Maximilian Hils
3dcc05ca97 Merge pull request #676 from isra17/master
Add source address filter
2015-07-14 00:42:48 +02:00
isra17
c33df9dd1c Use ensure_ascii in wep.app#broadcast
Otherwise, a non-unicode character in a flow cause mitmweb to crash.
2015-07-13 18:19:33 -04:00
isra17
471e196e08 Add ~src ~dst REGEX filters
This filter allow to match on the request source and destination address
in the form of `<IP>:<Port>`.

Also fixed the parsing grammar to add a `WordEnd` after each filter
name. That way, `~src` doesn't match `~s` instead and keep the behavior
consistent with `~hq` != `~h`.
2015-07-13 18:11:14 -04:00
Maximilian Hils
2af2e60f1f Merge pull request #673 from jlhonora/master
Match g/G shortcuts to less
2015-07-08 18:36:49 +02:00
jlhonora
1ebdda7902 Match g/G shortcuts to less, fix #631 2015-07-08 12:10:03 -03:00
Maximilian Hils
f8243086f6 improve dependency management in setup.py 2015-07-04 19:38:41 +02:00
Maximilian Hils
5a2b121f50 fix #648 2015-07-04 19:11:02 +02:00
Maximilian Hils
08476e988f clarify docs 2015-07-04 17:44:52 +02:00
Maximilian Hils
9960565359 fix #653 2015-07-04 15:46:45 +02:00
Terry Long
4c50c36345 Prevent unecessary upstream server connects
Selectively connect to upstream server based on no_upstream_cert
option. When no_upstream_cert is used during server replay, prevent
connecting to the upstream server unless absolutely necessary.
2015-07-03 07:55:37 -07:00
Maximilian Hils
4c831992aa fix #593, fix #656, coverage++ 2015-07-03 02:47:12 +02:00
Maximilian Hils
9bffd9cf03 fix windows compatibility 2015-07-03 02:46:06 +02:00
Aldo Cortesi
5ad6773e78 Merge pull request #661 from kyle-m/master
Enabling upstream server verification.
2015-06-30 10:51:46 +12:00
Kyle Morton
f0ad1f334c Enabling upstream server verification. Added flags --verify_upstream_cert,
--upstream-trusted-cadir, and --upstream-trusted-ca.
2015-06-29 11:00:20 -07:00
Maximilian Hils
aebad44d55 synchronize metadata files across projects 2015-06-26 23:43:19 +02:00
Maximilian Hils
c8f6bf66fb Merge branch 'appveyor2' 2015-06-26 23:24:31 +02:00
Aldo Cortesi
5f277408cf Merge pull request #654 from mitmproxy/remove_certforward
Remove Certforward Feature
2015-06-27 09:22:41 +12:00
Maximilian Hils
7990503eaf docs: fix certinstall image max-width 2015-06-26 23:04:15 +02:00
Maximilian Hils
643accd5f8 add appveyor 2015-06-26 18:33:31 +02:00
Maximilian Hils
b369962cbe remove certforward feature
The certforward feature was implemented to support #gotofail,
which only works on unpatched iOS devices. Given that many apps don't
support iOS 7 anymore, jailbreak+ssl killswitch is usually the better option.
By removing certforward, we can make netlib a pure python module again,
which significantly simplifies distribution.
2015-06-26 13:27:40 +02:00
Aldo Cortesi
876252eba8 Remove stray print & massage whitespace a bit 2015-06-25 10:27:22 +12:00
Aldo Cortesi
becc790d83 Merge pull request #645 from elitest/hardfailvenv
Add a check to see if virtualenv is installed.
2015-06-24 15:10:41 +12:00
Jim Shaver
080e453425 Merge branch 'master' into hardfailvenv
Conflicts:
	dev
2015-06-23 21:48:05 -05:00
Jim Shaver
db5c0b210b merged with upstream changes in dev 2015-06-23 20:50:51 -05:00
Jim Shaver
854dc004ee revert change, already done on master. 2015-06-23 20:47:36 -05:00
Jim Shaver
951fe2f7ed Add a check to see if virtualenv is installed. 2015-06-23 20:17:57 -05:00
Aldo Cortesi
074d8d7c74 Merge pull request #640 from Kriechi/ssl-version-handling
unify SSL version/method handling
2015-06-23 22:20:10 +12:00
Thomas Kriechbaumer
14e49f4fc7 unify SSL version/method handling 2015-06-23 12:05:34 +02:00
Aldo Cortesi
2c928181e8 Merge branch 'master' of ssh.github.com:mitmproxy/mitmproxy 2015-06-23 14:01:50 +12:00
Aldo Cortesi
237e05c823 Travis to Slack 2015-06-23 14:01:31 +12:00
Aldo Cortesi
e2069d52a8 Merge pull request #638 from iroiro123/http-transparent
HTTP Transparent Proxy
2015-06-23 09:40:25 +12:00
iroiro123
fbb23b5c9f changed error handling (ssl spoof mode) 2015-06-23 01:49:22 +09:00
iroiro123
5c7fa7a594 add unit tests for spoof mode 2015-06-23 00:57:33 +09:00
iroiro123
fd90367329 SSL Spoof mode 2015-06-21 00:51:56 +09:00
iroiro123
378aa78324 Spoof mode 2015-06-20 21:43:50 +09:00
Maximilian Hils
159543dd2b Update README.mkd 2015-06-18 18:10:06 +02:00
iroiro123
59ec291b6c HTTP Transparent Proxy 2015-06-18 23:53:27 +09:00
Thomas Kriechbaumer
e9fecbf830 add landscape/prospector config 2015-06-18 10:31:27 +02:00
Maximilian Hils
36d7e3fcd6 Update README.mkd 2015-06-16 03:05:21 +02:00
Thomas Kriechbaumer
5fea5d7813 fix pep8 config 2015-06-15 12:01:42 +02:00
Aldo Cortesi
7890450b0c Handle invalid IDNA encoding in hostnames
Fixes #622
2015-06-12 16:00:16 +12:00
Aldo Cortesi
fcc1558180 Fix typo in docs - thanks to Jim_Showalter@intuit.com 2015-06-12 14:15:26 +12:00
Aldo Cortesi
85e1ae7543 Merge pull request #624 from drahosj/master
Added flow marking functionality in the console
2015-06-12 13:53:07 +12:00
Jake Drahos
946030367f Added unmark all functionality
- 'U' to unmark all marked flows
2015-06-11 20:31:54 -05:00
Jake Drahos
2a6698bf5a Moved marking from flow to console
No longer taints the flow primitive
2015-06-11 20:27:33 -05:00
Jake Drahos
f2d7a6aa57 Merge remote-tracking branch 'origin/master'
Conflicts:
	libmproxy/console/flowlist.py
2015-06-11 16:34:53 -05:00
Jake Drahos
dd1e401e01 Changed mark symbol
Smaller symbol now, still just as easy to see while scrolling
2015-06-11 16:33:46 -05:00
Jake Drahos
486177edc7 Added functionality to write marked flows to file
w (write) -> m (marked)
2015-06-11 16:25:28 -05:00
Jake Drahos
d45d0ce22a Added functionality to write marked flows to file
w (write) -> m (marked)
2015-06-11 16:15:24 -05:00
Jake Drahos
122ee88021 Unmark duplicated flows
If a marked flow is duplicated, the duplicate will now be unmarked
2015-06-11 12:52:15 -05:00
Jake Drahos
13e71eba10 Changed symbols and colors
Added a better symbol for the mark, and changed the color to red. This helps it
stand out more easily.
2015-06-11 12:02:15 -05:00
Jake Drahos
a34eeb9a28 Fixed console rendering bug
Clearing all flows now works properly
2015-06-11 11:49:23 -05:00
Jake Drahos
e53a2426c1 Marked flows not deleted on clear all
Marked flows survive a clear all unless all current flows are marked.

Bug: They don't show up until another flow is added
2015-06-11 11:40:03 -05:00
Jake Drahos
8b998cfbea Implemented basic marking of flows
- Press m to toggle flow mark
- Flow mark is set in libmproxy/console/common.py. Currently set to "==="
2015-06-11 10:27:48 -05:00
Maximilian Hils
d389b9c59d fix #615 2015-06-08 19:01:32 +02:00
Maximilian Hils
083b404bba fix #618 2015-06-08 18:26:02 +02:00
Thomas Kriechbaumer
c59f045bd9 import travis config from netlib
this enables ALPN support with OpenSSL 1.0.2
2015-06-08 13:39:46 +02:00
David Weinstein
9b70d4bd2a Merge pull request #613 from dweinstein/patch/docker-tweaks
match name of automated build base img
2015-06-07 21:43:26 -04:00
David Weinstein
84b4ca6a65 match name of automated build base img 2015-06-07 11:06:47 -04:00
Aldo Cortesi
60ee1dd3aa Merge pull request #611 from dweinstein/feature/dockerfiles
initial add of docker mitmproxy
2015-06-07 10:12:49 +12:00
David Weinstein
3bd36b58e5 initial add of docker mitmproxy 2015-06-06 00:14:53 -04:00
Aldo Cortesi
bf7b76a997 Merge pull request #610 from tekii/fix-607
Fix 607
2015-06-06 11:10:33 +12:00
Marcelo Glezer
1befa9477c fix #607 fix message 2015-06-05 15:33:36 -03:00
Marcelo Glezer
17b34de28d fix #607 decode data before sending it to pyperclip 2015-06-05 15:19:57 -03:00
Aldo Cortesi
783e904b92 Merge pull request #603 from Kriechi/remove-contrib
replace contrib libraries with pypi dependencies
2015-06-04 13:30:18 +12:00
Aldo Cortesi
249bb4a2ac Bump version 2015-06-04 11:15:29 +12:00
Aldo Cortesi
946fd375fa Changelog for v0.12.1 2015-06-03 09:33:09 +12:00
Thomas Kriechbaumer
fbb2633dd3 replace contrib libraries with pypi dependencies 2015-06-02 10:00:34 +02: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
425 changed files with 111965 additions and 129755 deletions

29
.appveyor.yml Normal file
View File

@@ -0,0 +1,29 @@
version: '{build}'
shallow_clone: true
environment:
matrix:
- PYTHON: "C:\\Python27"
PATH: "C:\\Python27;C:\\Python27\\Scripts;%PATH%"
PYINSTALLER_VERSION: "git+https://github.com/pyinstaller/pyinstaller.git"
install:
- "pip install --src .. -r requirements.txt"
- "python -c \"from OpenSSL import SSL; print(SSL.SSLeay_version(SSL.SSLEAY_VERSION))\""
build: off # Not a C# project
test_script:
- "py.test -n 4"
after_test:
- |
git clone https://github.com/mitmproxy/release.git ..\release
pip install -e ..\release
python ..\release\rtool.py -p mitmproxy bdist
- ps: Get-ChildItem ..\release\dist\*.zip | ForEach { Push-AppveyorArtifact $_.FullName -FileName $_.Name }
deploy:
- provider: FTP
host: 46.101.230.67:2222
protocol: sftp
username: travis
password:
secure: +Ousom/XDCLx9+bUjr1mRKepgIzLdqP+clMpoAiPXUysZCDGxODD/7ij4z8GJ3AF
folder: snapshots
on:
branch: master

View File

@@ -1,6 +1,11 @@
[rum]
[run]
branch = True
[report]
omit = *contrib*, *tnetstring*, *platform*, *console*, *main.py
show_missing = True
include = *libmproxy*
exclude_lines =
pragma: nocover
pragma: no cover
raise NotImplementedError()
omit = *contrib*, *tnetstring*, *platform*, *console*, *main.py

1
.dockerignore Normal file
View File

@@ -0,0 +1 @@
.git

6
.env Normal file
View File

@@ -0,0 +1,6 @@
DIR="$( dirname "${BASH_SOURCE[0]}" )"
ACTIVATE_DIR="$(if [ -f "$DIR/../venv.mitmproxy/bin/activate" ]; then echo 'bin'; else echo 'Scripts'; fi;)"
if [ -z "$VIRTUAL_ENV" ] && [ -f "$DIR/../venv.mitmproxy/$ACTIVATE_DIR/activate" ]; then
echo "Activating mitmproxy virtualenv..."
source "$DIR/../venv.mitmproxy/$ACTIVATE_DIR/activate"
fi

1
.gitignore vendored
View File

@@ -18,6 +18,7 @@ mitmdumpc
netlib
pathod
libpathod
.cache/
# UI

16
.landscape.yml Normal file
View File

@@ -0,0 +1,16 @@
max-line-length: 120
pylint:
options:
dummy-variables-rgx: _$|.+_$|dummy_.+
disable:
- missing-docstring
- protected-access
- too-few-public-methods
- too-many-arguments
- too-many-instance-attributes
- too-many-locals
- too-many-public-methods
- too-many-return-statements
- too-many-statements
- unpacking-non-sequence

View File

@@ -1,23 +1,95 @@
language: python
sudo: false
python:
- "2.7"
- pypy
# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
language: python
matrix:
fast_finish: true
include:
- python: 2.7
- language: generic
os: osx
osx_image: xcode7.1
- python: 2.7
env: OPENSSL=1.0.2
addons:
apt:
sources:
# Debian sid currently holds OpenSSL 1.0.2
# change this with future releases!
- debian-sid
packages:
- libssl-dev
- python: 2.7
env: DOCS=1
script: 'cd docs && make html'
- python: pypy
- python: pypy
env: OPENSSL=1.0.2
addons:
apt:
sources:
# Debian sid currently holds OpenSSL 1.0.2
# change this with future releases!
- debian-sid
packages:
- libssl-dev
allow_failures:
# We allow pypy to fail until Travis fixes their infrastructure to a pypy
# with a recent enought CFFI library to run cryptography 1.0+.
- python: pypy
install:
- "pip install --upgrade --src . -r requirements.txt"
# command to run tests, e.g. python setup.py test
script:
- "nosetests --with-cov --cov-report term-missing"
after_success:
- |
if [[ $TRAVIS_OS_NAME == "osx" ]]
then
brew update || brew update # try again if it fails
brew outdated openssl || brew upgrade openssl
brew install python
fi
- "pip install --src .. -r requirements.txt"
before_script:
- "openssl version -a"
script:
- "py.test -n 4 --cov libmproxy"
after_success:
- coveralls
- |
if [[ $TRAVIS_OS_NAME == "osx" && $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]]
then
brew install curl --with-libssh2
git clone https://github.com/mitmproxy/release.git ../release
pip install -e ../release
python ../release/rtool.py -p mitmproxy bdist
for f in ../release/dist/*
do
$(brew --prefix curl)/bin/curl -u $SNAPSHOT_AUTH --hostpubmd5 $SNAPSHOT_PUBKEY --retry 5 -T $f sftp://$SNAPSHOT_HOST/
done
fi
notifications:
irc:
channels:
- "irc.oftc.net#mitmproxy"
on_success: change
on_failure: always
slack:
rooms:
- mitmproxy:YaDGC9Gt9TEM7o8zkC2OLNsu
on_success: change
on_failure: always
# exclude cryptography from cache
# it depends on libssl-dev version
# which needs to be compiled specifically to each version
before_cache:
- pip uninstall -y cryptography
cache:
directories:
- /home/travis/virtualenv/python2.7.9/lib/python2.7/site-packages
- /home/travis/virtualenv/pypy-2.4.0/site-packages
- $HOME/.cache/pip
- /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

170
CHANGELOG
View File

@@ -1,3 +1,137 @@
6 November 2015: mitmproxy 0.14
* Statistics: 399 commits, 13 contributors, 79 closed issues, 37 closed
PRs, 103 days
* Docs: Greatly updated docs now hosted on ReadTheDocs!
http://docs.mitmproxy.org
* Docs: Fixed Typos, updated URLs etc. (Nick Badger, Ben Lerner, Choongwoo
Han, onlywade, Jurriaan Bremer)
* mitmdump: Colorized TTY output
* mitmdump: Use mitmproxy's content views for human-readable output (Chris
Czub)
* mitmproxy and mitmdump: Support for displaying UTF8 contents
* mitmproxy: add command line switch to disable mouse interaction (Timothy
Elliott)
* mitmproxy: bug fixes (Choongwoo Han, sethp-jive, FreeArtMan)
* mitmweb: bug fixes (Colin Bendell)
* libmproxy: Add ability to fall back to TCP passthrough for non-HTTP
connections.
* libmproxy: Avoid double-connect in case of TLS Server Name Indication.
This yields a massive speedup for TLS handshakes.
* libmproxy: Prevent unneccessary upstream connections (macmantrl)
* Inline Scripts: New API for HTTP Headers:
http://docs.mitmproxy.org/en/latest/dev/models.html#netlib.http.Headers
* Inline Scripts: Properly handle exceptions in `done` hook
* Inline Scripts: Allow relative imports, provide `__file__`
* Examples: Add probabilistic TLS passthrough as an inline script
* netlib: Refactored HTTP protocol handling code
* netlib: ALPN support
* netlib: fixed a bug in the optional certificate verification.
* netlib: Initial Python 3.5 support (this is the first prerequisite for
3.x support in mitmproxy)
24 July 2015: mitmproxy 0.13
* Upstream certificate validation. See the --verify-upstream-cert,
--upstream-trusted-cadir and --upstream-trusted-ca parameters. Thanks to
Kyle Morton (github.com/kyle-m) for his work on this.
* Add HTTP transparent proxy mode. This uses the host headers from HTTP
traffic (rather than SNI and IP address information from the OS) to
implement perform transparent proxying. Thanks to github.com/ijiro123 for
this feature.
* Add ~src and ~dst REGEX filters, allowing matching on source and
destination addresses in the form of <IP>:<Port>
* mitmproxy console: change g/G keyboard shortcuts to match less. Thanks to
Jose Luis Honorato (github.com/jlhonora).
* mitmproxy console: Flow marking and unmarking. Marked flows are not
deleted when the flow list is cleared. Thanks to Jake Drahos
(github.com/drahosj).
* mitmproxy console: add marking of flows
* Remove the certforward feature. It was added to allow exploitation of
#gotofail, which is no longer a common vulnerability. Permitting this
hugely increased the complexity of packaging and distributing mitmproxy.
3 June 2015: mitmproxy 0.12.1
* 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
@@ -8,11 +142,11 @@
15 November 2014: mitmproxy 0.11.1:
* Bug fixes: connection leaks some crashes
* 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
@@ -26,7 +160,7 @@
* 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
* Pass arguments to inline scripts
* Configurable size limit on HTTP request and response bodies
@@ -56,7 +190,7 @@
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
@@ -76,7 +210,7 @@
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.
@@ -90,38 +224,38 @@
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.
* 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.
@@ -132,12 +266,12 @@
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.
@@ -146,7 +280,7 @@
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.rst).

View File

@@ -1,44 +1,63 @@
902 Aldo Cortesi
323 Maximilian Hils
1124 Aldo Cortesi
810 Maximilian Hils
80 Marcelo Glezer
48 Thomas Kriechbaumer
28 Jim Shaver
18 Henrik Nordstrom
13 Thomas Roth
12 Pedro Worcel
11 Jake Drahos
11 Justus Wingert
11 Stephen Altamirano
10 András Veres-Szentkirályi
8 Rouli
9 Chris Czub
9 Legend Tang
8 Jason A. Novak
8 Rouli
7 Alexis Hildebrandt
5 Tomaz Muraus
5 Brad Peabody
5 Choongwoo Han
5 Matthias Urlichs
4 root
4 Marc Liyanage
4 Valtteri Virtanen
5 Tomaz Muraus
5 elitest
5 iroiro123
4 Bryan Bishop
4 Marc Liyanage
4 Matthew Shao
4 Valtteri Virtanen
4 Wade 524
4 Youhei Sakurai
4 root
3 Chris Neasbitt
3 Zack B
3 David Weinstein
3 Eli Shvartsman
3 Kyle Manna
2 Michael Frister
3 Zack B
2 Bennett Blodinger
2 Jim Lloyd
2 Rob Wills
2 israel
2 Jaime Soriano Pastor
2 Colin Bendell
2 Heikki Hannikainen
2 Jaime Soriano Pastor
2 Jim Lloyd
2 Krzysztof Bielicki
2 Mark E. Haase
2 Michael Frister
2 Nick Badger
2 Rob Wills
2 Terry Long
2 Wade Catron
2 alts
1 davidpshaw
1 deployable
1 joebowbeer
1 meeee
1 phil plante
1 Michael Bisbjerg
2 isra17
2 israel
1 Andy Smith
1 Ben Lerner
1 Dan Wilbraham
1 David Dworken
1 David Shaw
1 Doug Lethin
1 Eric Entzel
1 Felix Wolfsteller
1 FreeArtMan
1 Gabriel Kirkpatrick
1 Henrik Nordström
1 Ivaylo Popov
1 JC
@@ -46,20 +65,43 @@
1 James Billingham
1 Jean Regisser
1 Kit Randel
1 Marcelo Glezer
1 Kyle Morton
1 Lucas Cimon
1 Mathieu Mitchell
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 TearsDontFalls
1 Timothy Elliott
1 Ulrich Petri
1 Vyacheslav Bakhmutov
1 Yuangxuan Wang
1 capt8bit
1 davidpshaw
1 deployable
1 gecko655
1 jlhonora
1 joebowbeer
1 meeee
1 michaeljau
1 peralta
1 phil plante
1 sentient07
1 sethp-jive
1 vzvu3k6k

4
Dockerfile Normal file
View File

@@ -0,0 +1,4 @@
FROM mitmproxy/base:latest-onbuild
EXPOSE 8080
EXPOSE 8081
VOLUME /certs

View File

@@ -1,10 +1,7 @@
include mitmproxy mitmdump
include LICENSE CHANGELOG CONTRIBUTORS README.txt
exclude README.mkd
recursive-include examples *
recursive-include doc *
recursive-include test *
recursive-include libmproxy *
include mitmproxy mitmdump mitmweb
include LICENSE CHANGELOG CONTRIBUTORS CONTRIBUTING.md README.rst
graft examples
graft test
prune test/tools
graft libmproxy
recursive-exclude * *.pyc *.pyo *.swo *.swp
recursive-exclude netlib *
recursive-exclude libpathod *

View File

@@ -1,86 +0,0 @@
[![Build Status](https://travis-ci.org/mitmproxy/mitmproxy.png?branch=master)](https://travis-ci.org/mitmproxy/mitmproxy) [![Coverage Status](https://coveralls.io/repos/mitmproxy/mitmproxy/badge.png?branch=master)](https://coveralls.io/r/mitmproxy/mitmproxy)
__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).
You can find complete directions for installing mitmproxy [here](http://mitmproxy.org/doc/install.html).
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.
__mitmproxy__ is tested and developed on OSX, Linux and OpenBSD. On Windows,
only mitmdump is supported, which does not have a graphical user interface.
Hacking
-------
### Requirements
* [Python](http://www.python.org) 2.7.x.
* [netlib](http://pypi.python.org/pypi/netlib), version matching mitmproxy.
* Third-party packages listed in [setup.py](https://github.com/mitmproxy/mitmproxy/blob/master/setup.py)
Optional packages 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.
* [cssutils](http://cthedot.de/cssutils/) version 1.0 or newer.
For convenience, all optional dependencies can be installed with
`pip install "mitmproxy[contentviews]"`
### Setting up a dev environment
The following procedure is recommended to set up your dev environment:
```
$ git clone https://github.com/mitmproxy/mitmproxy.git
$ cd mitmproxy
$ pip install --src . -r requirements.txt
```
This installs the latest GitHub versions of mitmproxy, netlib and pathod into `mitmproxy/`. All other development dependencies save countershape are installed into their usual locations.
### Testing
The test suite requires the `dev` extra requirements listed in [setup.py](https://github.com/mitmproxy/mitmproxy/blob/master/setup.py) and [pathod](http://pathod.net), version matching mitmproxy. Install these with:
`pip install "mitmproxy[dev]"`
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`

157
README.rst Normal file
View File

@@ -0,0 +1,157 @@
|travis| |coveralls| |downloads| |latest-release| |python-versions|
``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 & Help
--------------------
Documentation, tutorials and distribution packages can be found on the
mitmproxy website.
|site|
Installation Instructions are available in the docs.
|docs|
You can join our developer chat on Slack.
|slack|
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.
``mitmproxy`` is tested and developed on OSX, Linux and OpenBSD.
On Windows, only mitmdump is supported, which does not have a graphical user interface.
Hacking
-------
To get started hacking on mitmproxy, make sure you have Python_ 2.7.x. with
virtualenv_ installed (you can find installation instructions for virtualenv here_).
Then do the following:
.. code-block:: text
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:
.. code-block:: text
. ../venv.mitmproxy/bin/activate # ..\venv.mitmproxy\Scripts\activate.bat on Windows
py.test -n 4 --cov libmproxy
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:
.. code-block:: text
mitmdump --version
For convenience, the project includes an autoenv_ file (`.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:
.. code-block:: text
py.test -n 4 --cov libmproxy
Please ensure that all patches are accompanied by matching changes in the test
suite. The project maintains 100% test coverage.
Docs
----
The mitmproxy documentation is build using Sphinx_, which is installed automatically if you set up a development
environment as described above.
After installation, you can render the documentation like this:
.. code-block:: text
cd docs
make clean
make html
make livehtml
The last command invokes `sphinx-autobuild`_, which watches the Sphinx directory and rebuilds
the documentation when a change is detected.
.. |site| image:: https://img.shields.io/badge/https%3A%2F%2F-mitmproxy.org-blue.svg
:target: https://mitmproxy.org/
:alt: mitmproxy.org
.. |docs| image:: https://readthedocs.org/projects/mitmproxy/badge/
:target: http://docs.mitmproxy.org/en/latest/
:alt: Documentation
.. |slack| image:: http://slack.mitmproxy.org/badge.svg
:target: http://slack.mitmproxy.org/
:alt: Slack Developer Chat
.. |travis| image:: https://img.shields.io/travis/mitmproxy/mitmproxy/master.svg
:target: https://travis-ci.org/mitmproxy/mitmproxy
:alt: Build Status
.. |coveralls| image:: https://img.shields.io/coveralls/mitmproxy/mitmproxy/master.svg
:target: https://coveralls.io/r/mitmproxy/mitmproxy
:alt: Coverage Status
.. |downloads| image:: https://img.shields.io/pypi/dm/mitmproxy.svg?color=orange
:target: https://pypi.python.org/pypi/mitmproxy
:alt: Downloads
.. |latest-release| image:: https://img.shields.io/pypi/v/mitmproxy.svg
:target: https://pypi.python.org/pypi/mitmproxy
:alt: Latest Version
.. |python-versions| image:: https://img.shields.io/pypi/pyversions/mitmproxy.svg
:target: https://pypi.python.org/pypi/mitmproxy
:alt: Supported Python versions
.. _Python: https://www.python.org/
.. _virtualenv: https://virtualenv.pypa.io/en/latest/
.. _here: https://virtualenv.pypa.io/en/latest/installation.html
.. _autoenv: https://github.com/kennethreitz/autoenv
.. _.env: https://github.com/mitmproxy/mitmproxy/blob/master/.env
.. _Sphinx: http://sphinx-doc.org/
.. _sphinx-autobuild: https://pypi.python.org/pypi/sphinx-autobuild

View File

@@ -1,11 +0,0 @@
**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.
Complete documentation and a set of practical tutorials is included in the
distribution package, and is also available at mitmproxy.org_.
.. _mitmproxy.org: http://mitmproxy.org

12
dev Executable file
View File

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

14
dev.bat Normal file
View File

@@ -0,0 +1,14 @@
@echo off
set VENV=..\venv.mitmproxy
virtualenv %VENV% --always-copy
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

View File

@@ -1,20 +0,0 @@
body {
padding-top: 60px;
padding-bottom: 40px;
}
.tablenum {
font-weight: bold;
}
.nowrap {
white-space: nowrap;
}
h1 {
line-height: 1.1;
}
.page-header {
margin: 0px 0 22px;
}

View File

@@ -1,36 +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(idxpath)!@">mitmproxy $!VERSION!$ docs</a>
</div><!--/.nav-collapse -->
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="span3">
<div class="well sidebar-nav">
$!navbar!$
</div>
</div>
<div class="span9">
<div class="page-header">
<h1>@!this.title!@</h1>
</div>
$!body!$
</div>
</div>
<hr>
<footer>
<p>@!copyright!@</p>
</footer>
</div>

View File

@@ -1,59 +0,0 @@
<ul class="nav nav-list">
$!nav(idxpath, this, state)!$
$!nav("install.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">Installing Certificates</li>
$!nav("ssl.html", this, state)!$
$!nav("certinstall/webapp.html", this, state)!$
$!nav("certinstall/android.html", this, state)!$
$!nav("certinstall/firefox.html", this, state)!$
$!nav("certinstall/ios.html", this, state)!$
$!nav("certinstall/ios-simulator.html", this, state)!$
$!nav("certinstall/java.html", this, state)!$
$!nav("certinstall/osx.html", this, state)!$
$!nav("certinstall/windows7.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 mitmproxy</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)!$
</ul>

View File

@@ -1,42 +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(idxpath)!@">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">
$!navbar!$
</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.

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,53 +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 both an Asus Transformer Prime TF201 (Android 4.0.3) and a Nexus 4
(Android 4.4.4) in the examples below - your device may differ, but the broad
process should be similar. On **emulated devices**, there are some [additional
quirks](https://github.com/mitmproxy/mitmproxy/issues/204#issuecomment-32837093)
to consider.
## Getting the certificate onto the device
The easiest way to get the certificate to the device is to use [the web
app](@!urlTo("webapp.html")!@). In the rare cases where the web app doesn't
work, you will need to get the __mitmproxy-ca-cert.cer__ file into the
__/sdcard__ folder on the device (/sdcard/Download on older devices). This can
be accomplished in a number of ways:
- If you have the Android Developer Tools installed, you can use [__adb
push__](http://developer.android.com/tools/help/adb.html).
- Using a file transfer program like wget (installed on the Android device) to
copy the file over.
- Transfer the file using external media like an SD Card.
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 is automatically located and offered for
installation. Installing the cert will delete the download file from the local
disk.
## Installing the certificate
You should now see something like this (you may have to explicitly name the
certificate):
<img src="android-settingssecurityinstallca.png"/>
Click OK, and you should then see the certificate listed in the Trusted
Credentials store:
<img src="android-settingssecurityuserinstalledca.png"/>

View File

@@ -1,31 +0,0 @@
## Get the certificate to the browser
The easiest way to get the certificate to the browser is to use [the web
app](@!urlTo("webapp.html")!@). If this fails, do the following:
<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"Certificates":
<img src="@!urlTo('firefox3.jpg')!@"/>
</li>
<li> Click "View Certificates", "Import", and select the certificate file:
<img src="@!urlTo('firefox3-import.jpg')!@"/>
</li>
</ol>
## Installing the certificate
<ol class="tlist">
<li>Tick "Trust this CA 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,13 +0,0 @@
from countershape import Page
pages = [
Page("webapp.html", "Using the Web App"),
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"),
Page("java.html", "Java"),
Page("mitm.it-error.html", "Error: No proxy configured"),
]

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,27 +0,0 @@
## Getting the certificate onto the device
The easiest way to get the certificate to the device is to use [the web
app](@!urlTo("webapp.html")!@). In the rare cases where the web app doesn't
work, you will need to get the __mitmproxy-ca-cert.pem__ file to the device to
install it. The easiest way to accomplish this is to set up the Mail app on the
device, and to email it over as an attachment. Open the email, tap on the
attachment, then proceed with the install.
## Installing the certificate
<ol class="tlist">
<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,13 +0,0 @@
You can add the mitmproxy certificates to the Java trust store using
[keytool](http://docs.oracle.com/javase/6/docs/technotes/tools/solaris/keytool.html).
On OSX, the required command looks like this:
<pre class="terminal">
sudo keytool -importcert -alias mitmproxy -storepass "password" \
-keystore /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts \
-trustcacerts -file ~/.mitmproxy/mitmproxy-ca-cert.pem
</pre>
Note that your store password will (hopefully) be different from the one above.

View File

@@ -1,5 +0,0 @@
**Looks like you wanted to install the mitmproxy CA using the web app?**
Unfortunately, there's been no mitmproxy instance on the wire that could have intercepted your request.
Please configure your client to use mitmproxy and try again.<br>
The request to <a href="http://mitm.it/">http://mitm.it/</a> must go through your mitmproxy instance.

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,13 +0,0 @@
By far the easiest way to install the mitmproxy certs is to use the built-in
web app. To do this, 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("webapp.png")!@"></img>
Just click on the relevant icon, and then follow the setup instructions
for the platform you're on.
Make sure you aren't using a bandwith optimizer (like Google's Data Compression
Proxy on Chrome for Android) or the page will not load.

View File

@@ -1,35 +0,0 @@
How to install the __mitmproxy__ certificate authority in Windows 7:
<ol class="tlist">
<li> The easiest way to get the certificate to the device is to use <a
href="@!urlTo("webapp.html")!@">the web app</a>. If this fails for some
reason, simply copy the ~/.mitmproxy/mitmproxy-ca-cert.p12 file to the
target system and double-click it. </li>
<li>
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>

View File

@@ -1,86 +0,0 @@
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

@@ -1,8 +0,0 @@
To give you a better understanding of how mitmproxy works, mitmproxy's high-level architecture is detailed
in the following graphic:
<img 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>

View File

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

View File

@@ -1,43 +0,0 @@
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

@@ -1,18 +0,0 @@
When the __anticache__ option is passed to mitmproxy, it removes headers
(__if-none-match__ and __if-modified-since__) that might elicit a
304-not-modified response from the server. This is useful when you want to make
sure you capture an HTTP exchange in its totality. It's also often used during
[client replay](@!urlTo("clientreplay.html")!@), when you want to make sure the
server responds with complete data.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th> <td>--anticache</td>
</tr>
<tr>
<th>mitmproxy shortcut</th> <td><b>o</b> then <b>a</b></td>
</tr>
</tbody>
</table>

View File

@@ -1,19 +0,0 @@
from countershape import Page
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("tcpproxy.html", "TCP Proxy"),
Page("upstreamcerts.html", "Upstream Certs"),
Page("upstreamproxy.html", "Upstream proxy mode"),
]

View File

@@ -1,81 +0,0 @@
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
<span style="color: white">127.0.0.1:50588: serverconnect
-> example.com:443</span>
^C
$ <span style="color: white">mitmproxy --ignore ^example\.com:443$</span>
</pre>
Here are some other examples for ignore patterns:
<pre>
# Exempt traffic from the iOS App Store (usually just works):
--ignore apple.com:443
# "Correct" version without false-positives:
--ignore ^(.+\.)?apple\.com:443$
# Ignore example.com on all ports, but no subdomains:
--ignore ^example.com:
# 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

@@ -1,26 +0,0 @@
Asks the user for authentication before they are permitted to use the proxy.
Authentication headers are stripped from the flows, so they are not passed to
upstream servers. For now, only HTTP Basic authentication is supported. The
proxy auth options are ignored if the proxy is in transparent or reverse proxy
mode.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th>
<td>
<ul>
<li>--nonanonymous</li>
<li>--singleuser USER</li>
<li>--htpasswd PATH</li>
</ul>
</td>
</tr>
</tbody>
</table>

View File

@@ -1,54 +0,0 @@
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.
### See Also
- [Ignore Domains](@!urlTo("passthrough.html")!@)

View File

@@ -1,52 +0,0 @@
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>-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

@@ -1,18 +0,0 @@
This feature lets you specify a set of headers to be added to requests or
responses, based on a filter pattern. You can specify these either on the
command-line, or through an interactive editor in mitmproxy.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th>
<td>
--setheader PATTERN
</td>
</tr>
<tr>
<th>mitmproxy shortcut</th> <td><b>H</b></td>
</tr>
</tbody>
</table>

View File

@@ -1,10 +0,0 @@
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

@@ -1,60 +0,0 @@
## Sticky cookies
When the sticky cookie option is set, __mitmproxy__ will add the cookie most
recently set by the server to any cookie-less request. Consider a service that
sets a cookie to track the session after authentication. Using sticky cookies,
you can fire up mitmproxy, and authenticate to a service as you usually would
using a browser. After authentication, you can request authenticated resources
through mitmproxy as if they were unauthenticated, because mitmproxy will
automatically add the session tracking cookie to requests. Among other things,
this lets you script interactions with authenticated resources (using tools
like wget or curl) without having to worry about authentication.
Sticky cookies are especially powerful when used in conjunction with [client
replay](@!urlTo("clientreplay.html")!@) - you can record the authentication
process once, and simply replay it on startup every time you need to interact
with the secured resources.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th>
<td>
<ul>
<li>-t FILTER</li>
</ul>
</td>
</tr>
<tr>
<th>mitmproxy shortcut</th> <td><b>t</b></td>
</tr>
</tbody>
</table>
## Sticky auth
The sticky auth option is analogous to the sticky cookie option, in that HTTP
__Authorization__ headers are simply replayed to the server once they have been
seen. This is enough to allow you to access a server resource using HTTP Basic
authentication through the proxy. Note that __mitmproxy__ doesn't (yet) support
replay of HTTP Digest authentication.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th>
<td>
<ul>
<li>-u FILTER</li>
</ul>
</td>
</tr>
<tr>
<th>mitmproxy shortcut</th> <td><b>u</b></td>
</tr>
</tbody>
</table>

View File

@@ -1,30 +0,0 @@
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

@@ -1,27 +0,0 @@
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>
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

View File

@@ -1,360 +0,0 @@
Mitmproxy is an enormously flexible tool. Knowing exactly how the proxying
process works will help you deploy it creatively, and take into account its
fundamental assumptions and how to work around them. This document explains
mitmproxy's proxy mechanism in detail, starting with the simplest unencrypted
explicit proxying, and working up to the most complicated interaction -
transparent proxying of SSL-protected traffic[^ssl] in the presence of
[SNI](http://en.wikipedia.org/wiki/Server_Name_Indication).
<div class="page-header">
<h1>Explicit HTTP</h1>
</div>
Configuring the client to use mitmproxy as an explicit proxy is the simplest
and most reliable way to intercept traffic. The proxy protocol is codified in
the [HTTP RFC](http://www.ietf.org/rfc/rfc2068.txt), so the behaviour of both
the client and the server is well defined, and usually reliable. In the
simplest possible interaction with mitmproxy, a client connects directly to the
proxy, and makes a request that looks like this:
<pre>GET http://example.com/index.html HTTP/1.1</pre>
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"/>
<table class="table">
<tbody>
<tr>
<td><b>1</b></td>
<td>The client connects to the proxy and makes a request.</td>
</tr>
<tr>
<td><b>2</b></td>
<td>Mitmproxy connects to the upstream server and simply forwards
the request on.</td>
</tr>
</tbody>
</table>
<div class="page-header">
<h1>Explicit HTTPS</h1>
</div>
The process for an explicitly proxied HTTPS connection is quite different. The
client connects to the proxy and makes a request that looks like this:
<pre>CONNECT example.com:443 HTTP/1.1</pre>
A conventional proxy can neither view nor manipulate an SSL-encrypted data
stream, so a CONNECT request simply asks the proxy to open a pipe between the
client and server. The proxy here is just a facilitator - it blindly forwards
data in both directions without knowing anything about the contents. The
negotiation of the SSL connection happens over this pipe, and the subsequent
flow of requests and responses are completely opaque to the proxy.
## The MITM in mitmproxy
This is where mitmproxy's fundamental trick comes into play. The MITM in its
name stands for Man-In-The-Middle - a reference to the process we use to
intercept and interfere with these theoretically opaque data streams. The basic
idea is to pretend to be the server to the client, and pretend to be the client
to the server, while we sit in the middle decoding traffic from both sides. The
tricky part is that the [Certificate
Authority](http://en.wikipedia.org/wiki/Certificate_authority) system is
designed to prevent exactly this attack, by allowing a trusted third-party to
cryptographically sign a server's SSL certificates to verify that they are
legit. If this signature doesn't match or is from a non-trusted party, a secure
client will simply drop the connection and refuse to proceed. Despite the many
shortcomings of the CA system as it exists today, this is usually fatal to
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")!@).
## Complication 1: What's the remote hostname?
To proceed with this plan, we need to know the domain name to use in the
interception certificate - the client will verify that the certificate is for
the domain it's connecting to, and abort if this is not the case. At first
blush, it seems that the CONNECT request above gives us all we need - in this
example, both of these values are "example.com". But what if the client had
initiated the connection as follows:
<pre>CONNECT 10.1.1.1:443 HTTP/1.1</pre>
Using the IP address is perfectly legitimate because it gives us enough
information to initiate the pipe, even though it doesn't reveal the remote
hostname.
Mitmproxy has a cunning mechanism that smooths this over - [upstream
certificate sniffing](@!urlTo("features/upstreamcerts.html")!@). As soon as we
see the CONNECT request, we pause the client part of the conversation, and
initiate a simultaneous connection to the server. We complete the SSL handshake
with the server, and inspect the certificates it used. Now, we use the Common
Name in the upstream SSL certificates to generate the dummy certificate for the
client. Voila, we have the correct hostname to present to the client, even if
it was never specified.
## Complication 2: Subject Alternative Name
Enter the next complication. Sometimes, the certificate Common Name is not, in
fact, the hostname that the client is connecting to. This is because of the
optional [Subject Alternative
Name](http://en.wikipedia.org/wiki/SubjectAltName) field in the SSL certificate
that allows an arbitrary number of alternative domains to be specified. If the
expected domain matches any of these, the client will proceed, even though the
domain doesn't match the certificate Common Name. The answer here is simple:
when extract the CN from the upstream cert, we also extract the SANs, and add
them to the generated dummy certificate.
## Complication 3: Server Name Indication
One of the big limitations of vanilla SSL is that each certificate requires its
own IP address. This means that you couldn't do virtual hosting where multiple
domains with independent certificates share the same IP address. In a world
with a rapidly shrinking IPv4 address pool this is a problem, and we have a
solution in the form of the [Server Name
Indication](http://en.wikipedia.org/wiki/Server_Name_Indication) extension to
the SSL and TLS protocols. This lets the client specify the remote server name
at the start of the SSL handshake, which then lets the server select the right
certificate to complete the process.
SNI breaks our upstream certificate sniffing process, because when we connect
without using SNI, we get served a default certificate that may have nothing to
do with the certificate expected by the client. The solution is another tricky
complication to the client connection process. After the client connects, we
allow the SSL handshake to continue until just _after_ the SNI value has been
passed to us. Now we can pause the conversation, and initiate an upstream
connection using the correct SNI value, which then serves us the correct
upstream certificate, from which we can extract the expected CN and SANs.
There's another wrinkle here. Due to a limitation of the SSL library mitmproxy
uses, we can't detect that a connection _hasn't_ sent an SNI request until it's
too late for upstream certificate sniffing. In practice, we therefore make a
vanilla SSL connection upstream to sniff non-SNI certificates, and then discard
the connection if the client sends an SNI notification. If you're watching your
traffic with a packet sniffer, you'll see two connections to the server when an
SNI request is made, the first of which is immediately closed after the SSL
handshake. Luckily, this is almost never an issue in practice.
## Putting it all together
Lets put all of this together into the complete explicitly proxied HTTPS flow.
<img src="explicit_https.png"/>
<table class="table">
<tbody>
<tr>
<td><b>1</b></td>
<td>The client makes a connection to mitmproxy, and issues an HTTP
CONNECT request.</td>
</tr>
<tr>
<td><b>2</b></td>
<td>Mitmproxy responds with a 200 Connection Established, as if it
has set up the CONNECT pipe.</td>
</tr>
<tr>
<td><b>3</b></td>
<td>The client believes it's talking to the remote server, and
initiates the SSL connection. It uses SNI to indicate the hostname
it is connecting to.</td>
</tr>
<tr>
<td><b>4</b></td>
<td>Mitmproxy connects to the server, and establishes an SSL
connection using the SNI hostname indicated by the client.</td>
</tr>
<tr>
<td><b>5</b></td>
<td>The server responds with the matching SSL certificate, which
contains the CN and SAN values needed to generate the interception
certificate.</td>
</tr>
<tr>
<td><b>6</b></td>
<td>Mitmproxy generates the interception cert, and continues the
client SSL handshake paused in step 3.</td>
</tr>
<tr>
<td><b>7</b></td>
<td>The client sends the request over the established SSL
connection.</td>
</tr>
<tr>
<td><b>7</b></td>
<td>Mitmproxy passes the request on to the server over the SSL
connection initiated in step 4.</td>
</tr>
</tbody>
</table>
<div class="page-header">
<h1>Transparent HTTP</h1>
</div>
When a transparent proxy is used, the HTTP/S connection is redirected into a
proxy at the network layer, without any client configuration being required.
This makes transparent proxying ideal for those situations where you can't
change client behaviour - proxy-oblivious Android applications being a common
example.
To achieve this, we need to introduce two extra components. The first is a
redirection mechanism that transparently reroutes a TCP connection destined for
a server on the Internet to a listening proxy server. This usually takes the
form of a firewall on the same host as the proxy server -
[iptables](http://www.netfilter.org/) on Linux or
[pf](http://en.wikipedia.org/wiki/PF_\(firewall\)) on OSX. Once the client has
initiated the connection, it makes a vanilla HTTP request, which might look
something like this:
<pre>GET /index.html HTTP/1.1</pre>
Note that this request differs from the explicit proxy variation, in that it
omits the scheme and hostname. How, then, do we know which upstream host to
forward the request to? The routing mechanism that has performed the
redirection keeps track of the original destination for us. Each routing
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/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"/>
<table class="table">
<tbody>
<tr>
<td><b>1</b></td>
<td>The client makes a connection to the server.</td>
</tr>
<tr>
<td><b>2</b></td>
<td>The router redirects the connection to mitmproxy, which is
typically listening on a local port of the same host. Mitmproxy
then consults the routing mechanism to establish what the original
destination was.</td>
</tr>
<tr>
<td><b>3</b></td>
<td>Now, we simply read the client's request...</td>
</tr>
<tr>
<td><b>4</b></td>
<td>... and forward it upstream.</td>
</tr>
</tbody>
</table>
<div class="page-header">
<h1>Transparent HTTPS</h1>
</div>
The first step is to determine whether we should treat an incoming connection
as HTTPS. The mechanism for doing this is simple - we use the routing mechanism
to find out what the original destination port is. By default, we treat all
traffic destined for ports 443 and 8443 as SSL.
From here, the process is a merger of the methods we've described for
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"/>
<table class="table">
<tbody>
<tr>
<td><b>1</b></td>
<td>The client makes a connection to the server.</td>
</tr>
<tr>
<td><b>2</b></td>
<td>The router redirects the connection to mitmproxy, which is
typically listening on a local port of the same host. Mitmproxy
then consults the routing mechanism to establish what the original
destination was.</td>
</tr>
<tr>
<td><b>3</b></td>
<td>The client believes it's talking to the remote server, and
initiates the SSL connection. It uses SNI to indicate the hostname
it is connecting to.</td>
</tr>
<tr>
<td><b>4</b></td>
<td>Mitmproxy connects to the server, and establishes an SSL
connection using the SNI hostname indicated by the client.</td>
</tr>
<tr>
<td><b>5</b></td>
<td>The server responds with the matching SSL certificate, which
contains the CN and SAN values needed to generate the interception
certificate.</td>
</tr>
<tr>
<td><b>6</b></td>
<td>Mitmproxy generates the interception cert, and continues the
client SSL handshake paused in step 3.</td>
</tr>
<tr>
<td><b>7</b></td>
<td>The client sends the request over the established SSL
connection.</td>
</tr>
<tr>
<td><b>7</b></td>
<td>Mitmproxy passes the request on to the server over the SSL
connection initiated in step 4.</td>
</tr>
</tbody>
</table>
[^ssl]: I use "SSL" to refer to both SSL and TLS in the generic sense, unless otherwise specified.

View File

@@ -1,76 +0,0 @@
import os
import sys
import datetime
import countershape
from countershape import Page, Directory, markup, model
import countershape.template
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")
ns.title = countershape.template.Template(None, "<h1>@!this.title!@</h1>")
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, %s" % datetime.date.today().year
def mpath(p):
p = os.path.join(MITMPROXY_SRC, p)
return os.path.expanduser(p)
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)
ns.example = example
ns.filt_help = filt.help
def nav(page, current, state):
if current.match(page, False):
pre = '<li class="active">'
else:
pre = "<li>"
p = state.application.getPage(page)
return pre + '<a href="%s">%s</a></li>'%(model.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("howmitmproxy.html", "How mitmproxy works"),
Page("modes.html", "Modes of Operation"),
Page("mitmproxy.html", "mitmproxy"),
Page("mitmdump.html", "mitmdump"),
Page("config.html", "configuration"),
Page("ssl.html", "Overview"),
Directory("certinstall"),
Directory("scripting"),
Directory("tutorials"),
Page("transparent.html", "Overview"),
Directory("transparent"),
]

View File

@@ -1,59 +0,0 @@
## Installing from source
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).
<pre class="terminal">
pip install mitmproxy
</pre>
If you also want to install the optional packages AMF, protobuf and CSS
content views, do this:
<pre class="terminal">
pip install "mitmproxy[contentviews]"
</pre>
## OSX
The easiest way to get up and running on OSX is to download the pre-built
binary packages from [mitmproxy.org](http://mitmproxy.org). If you still want
to install using pip, there are a few things to keep in mind:
- 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).
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
audio/*; /usr/bin/open -Wn %s
image/*; /usr/bin/open -Wn %s
video/*; /usr/bin/open -Wn %s
</pre>
## Ubuntu
On Ubuntu, you will need the following native packages to install mitmproxy
from source:
- build-essential
- python-dev
- libffi-dev
- libssl-dev
- libxml2-dev
- libxslt1-dev

View File

@@ -1,68 +0,0 @@
__mitmdump__ is the command-line companion to mitmproxy. It provides
tcpdump-like functionality to let you view, record, and programmatically
transform HTTP traffic. See the _--help_ flag output for complete
documentation.
# Examples
## Saving traffic
<pre class="terminal">
> mitmdump -w outfile
</pre>
Start up mitmdump in proxy mode, and write all traffic to __outfile__.
## Filtering saved traffic
<pre class="terminal">
> mitmdump -nr infile -w outfile "~m post"
</pre>
Start mitmdump without binding to the proxy port (_-n_), read all flows from
infile, apply the specified filter expression (only match POSTs), and write to
outfile.
## Client replay
<pre class="terminal">
> mitmdump -nc outfile
</pre>
Start mitmdump without binding to the proxy port (_-n_), then replay all
requests from outfile (_-c filename_). Flags combine in the obvious way, so
you can replay requests from one file, and write the resulting flows to
another:
<pre class="terminal">
> mitmdump -nc srcfile -w dstfile
</pre>
See the [Client-side Replay](@!urlTo("clientreplay.html")!@) section for more information.
## Running a script
<pre class="terminal">
> mitmdump -s examples/add_header.py
</pre>
This runs the __add_header.py__ example script, which simply adds a new header
to all responses.
## Scripted data transformation
<pre class="terminal">
> mitmdump -ns examples/add_header.py -r srcfile -w dstfile
</pre>
This command loads flows from __srcfile__, transforms it according to the
specified script, then writes it back to __dstfile__.

View File

@@ -1,115 +0,0 @@
__mitmproxy__ is a console tool that allows interactive examination and
modification of HTTP traffic. It differs from mitmdump in that all flows are
kept in memory, which means that it's intended for taking and manipulating
small-ish samples. Use the _?_ shortcut key to view, context-sensitive
documentation from any __mitmproxy__ screen.
## Flow list
The flow list shows an index of captured flows in chronological order.
<img 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.
- __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.
- __5__: A response intercepted from the server on the way to the client.
- __6__: The event log can be toggled on and off using the _e_ shortcut key. This
pane shows events and errors that may not result in a flow that shows up in the
flow pane.
- __7__: Flow count.
- __8__: Various information on mitmproxy's state. In this case, we have an
interception pattern set to ".*".
- __9__: Bind address indicator - mitmproxy is listening on port 8080 of all
interfaces.
## Flow view
The __Flow View__ lets you inspect and manipulate a single flow:
<img src="@!urlTo('screenshots/mitmproxy-flowview.png')!@"/>
- __1__: Flow summary.
- __2__: The Request/Response tabs, showing you which part of the flow you are
currently viewing. In the example above, we're viewing the Response. Hit _tab_
to switch between the Response and the Request.
- __3__: Headers.
- __4__: Body.
- __5__: View Mode indicator. In this case, we're viewing the body in __hex__
mode. The other available modes are __pretty__, which uses a number of
heuristics to show you a friendly view of various content types, and __raw__,
which shows you exactly what's there without any changes. You can change modes
using the _m_ key.
## Grid Editor
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.
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 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)
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')!@"/>
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')!@"/>
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
external editor on a field (_e_ key). Be sure to consult the context-sensitive
help (_?_ key) for more.
# Example: Interception
__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.
### 1: Set an interception pattern
<img 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
syntax, see the [Filter expressions](@!urlTo("filters.html")!@) section of this
document, or the built-in help function in __mitmproxy__.
### 2: Intercepted connections are indicated with orange text:
<img src="@!urlTo('mitmproxy-intercept-mid.png')!@"/>
### 3: You can now view and modify the request:
<img 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')!@"/>
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".

View File

@@ -1,222 +0,0 @@
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 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 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 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 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 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 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 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 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.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

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

View File

@@ -1,177 +0,0 @@
__mitmproxy__ has a powerful scripting API that allows you to modify flows
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
that adds a new header to every HTTP response before it is returned to the
client:
$!example("examples/add_header.py")!$
The first argument to each event method is an instance of ScriptContext that
lets the script interact with the global mitmproxy state. The __response__
event also gets an instance of Flow, which we can use to manipulate the
response itself.
We can now run this script using mitmdump or mitmproxy as follows:
<pre class="terminal">
> mitmdump -s add_header.py
</pre>
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, argv)
Called once on startup, before any other events.
### 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)
Called when the proxy initiates a connection to the target server. Note that
a connection can correspond to multiple HTTP requests.
### 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)
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.
### 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, 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 __HTTPFlow__
object is guaranteed to have non-None __request__ and __error__ attributes.
### clientdisconnect(ScriptContext, ConnectionHandler)
Called when a client disconnects from the proxy.
### done(ScriptContext)
Called once on script shutdown, after any other events.
## API
The main classes you will deal with in writing mitmproxy scripts are:
<table class="table">
<tr>
<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.proxy.connection.ServerConnection</th>
<td>Describes a server connection.</td>
</tr>
<tr>
<th>libmproxy.protocol.http.HTTPFlow</th>
<td>A collection of objects representing a single HTTP transaction.</td>
</tr>
<tr>
<th>libmproxy.protocol.http.HTTPResponse</th>
<td>An HTTP response.</td>
</tr>
<tr>
<th>libmproxy.protocol.http.HTTPRequest</th>
<td>An HTTP request.</td>
</tr>
<tr>
<th>libmproxy.protocol.primitives.Error</th>
<td>A communications error.</td>
</tr>
<tr>
<th>libmproxy.script.ScriptContext</th>
<td> A handle for interacting with mitmproxy's from within scripts.</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.certutils.SSLCert</th>
<td>Exposes information SSL certificates.</td>
</tr>
</table>
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.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
complete. This happens when you start a script, and then load a saved set of
flows from a file (see the "scripted data transformation" example on the
[mitmdump](@!urlTo("mitmdump.html")!@) page). It also happens when you run a
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__, __responseheaders__, __response__, __error__, __done__. If
the flow doesn't have a __response__ or __error__ associated with it, the
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,22 +0,0 @@
<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"
functionality included in the interactive mitmproxy program. Traffic is
monitored for __cookie__ and __set-cookie__ headers, and requests are rewritten
to include a previously seen cookie if they don't already have one. In effect,
this lets you log in to a site using your browser, and then make subsequent
requests using a tool like __curl__, which will then seem to be part of the
authenticated session.
$!example("examples/stickycookies")!$

View File

@@ -1,92 +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). 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.
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>
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 cert 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 8192
> 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>
Using a custom certificate authority
------------------------------------
By default, mitmproxy will (generate and) use <samp>~/.mitmproxy/mitmproxy-ca.pem</samp> as the default 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.
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

@@ -1,120 +0,0 @@
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #808080 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0040D0 } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
.grokdoc { background: #f8f8f8; }
.grokdoc .c { color: #408080; font-style: italic } /* Comment */
.grokdoc .err { border: 1px solid #FF0000 } /* Error */
.grokdoc .k { color: #008000; font-weight: bold } /* Keyword */
.grokdoc .o { color: #666666 } /* Operator */
.grokdoc .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.grokdoc .cp { color: #BC7A00 } /* Comment.Preproc */
.grokdoc .c1 { color: #408080; font-style: italic } /* Comment.Single */
.grokdoc .cs { color: #408080; font-style: italic } /* Comment.Special */
.grokdoc .gd { color: #A00000 } /* Generic.Deleted */
.grokdoc .ge { font-style: italic } /* Generic.Emph */
.grokdoc .gr { color: #FF0000 } /* Generic.Error */
.grokdoc .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.grokdoc .gi { color: #00A000 } /* Generic.Inserted */
.grokdoc .go { color: #808080 } /* Generic.Output */
.grokdoc .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.grokdoc .gs { font-weight: bold } /* Generic.Strong */
.grokdoc .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.grokdoc .gt { color: #0040D0 } /* Generic.Traceback */
.grokdoc .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.grokdoc .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.grokdoc .kp { color: #008000 } /* Keyword.Pseudo */
.grokdoc .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.grokdoc .kt { color: #B00040 } /* Keyword.Type */
.grokdoc .m { color: #666666 } /* Literal.Number */
.grokdoc .s { color: #BA2121 } /* Literal.String */
.grokdoc .na { color: #7D9029 } /* Name.Attribute */
.grokdoc .nb { color: #008000 } /* Name.Builtin */
.grokdoc .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.grokdoc .no { color: #880000 } /* Name.Constant */
.grokdoc .nd { color: #AA22FF } /* Name.Decorator */
.grokdoc .ni { color: #999999; font-weight: bold } /* Name.Entity */
.grokdoc .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.grokdoc .nf { color: #0000FF } /* Name.Function */
.grokdoc .nl { color: #A0A000 } /* Name.Label */
.grokdoc .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.grokdoc .nt { color: #008000; font-weight: bold } /* Name.Tag */
.grokdoc .nv { color: #19177C } /* Name.Variable */
.grokdoc .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.grokdoc .w { color: #bbbbbb } /* Text.Whitespace */
.grokdoc .mf { color: #666666 } /* Literal.Number.Float */
.grokdoc .mh { color: #666666 } /* Literal.Number.Hex */
.grokdoc .mi { color: #666666 } /* Literal.Number.Integer */
.grokdoc .mo { color: #666666 } /* Literal.Number.Oct */
.grokdoc .sb { color: #BA2121 } /* Literal.String.Backtick */
.grokdoc .sc { color: #BA2121 } /* Literal.String.Char */
.grokdoc .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.grokdoc .s2 { color: #BA2121 } /* Literal.String.Double */
.grokdoc .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.grokdoc .sh { color: #BA2121 } /* Literal.String.Heredoc */
.grokdoc .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.grokdoc .sx { color: #008000 } /* Literal.String.Other */
.grokdoc .sr { color: #BB6688 } /* Literal.String.Regex */
.grokdoc .s1 { color: #BA2121 } /* Literal.String.Single */
.grokdoc .ss { color: #19177C } /* Literal.String.Symbol */
.grokdoc .bp { color: #008000 } /* Name.Builtin.Pseudo */
.grokdoc .vc { color: #19177C } /* Name.Variable.Class */
.grokdoc .vg { color: #19177C } /* Name.Variable.Global */
.grokdoc .vi { color: #19177C } /* Name.Variable.Instance */
.grokdoc .il { color: #666666 } /* Literal.Number.Integer.Long */

View File

@@ -1,6 +0,0 @@
from countershape import Page
pages = [
Page("osx.html", "OSX"),
Page("linux.html", "Linux"),
]

View File

@@ -1,53 +0,0 @@
On Linux, mitmproxy integrates with the iptables redirection mechanism to
achieve transparent mode.
<ol class="tlist">
<li> <a href="@!urlTo('ssl.html')!@">Install the mitmproxy
certificates on the test device</a>. </li>
<li> Enable IP forwarding:
<pre class="terminal">sysctl -w net.ipv4.ip_forward=1</pre>
You may also want to consider enabling this permanently in
<b>/etc/sysctl.conf</b>.
</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:
<pre class="terminal">mitmproxy -T --host</pre>
The <b>-T</b> flag turns on transparent mode, and the <b>--host</b>
argument tells mitmproxy to use the value of the Host header for URL
display.
</li>
<li> Finally, configure your test device to use the host on which mitmproxy is
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

@@ -1,81 +0,0 @@
OSX Lion integrated the [pf](http://www.openbsd.org/faq/pf/) packet filter from
the OpenBSD project, which mitmproxy uses to implement transparent mode on OSX.
Note that this means we don't support transparent mode for earlier versions of
OSX.
<ol class="tlist">
<li> <a href="@!urlTo('ssl.html')!@">Install the mitmproxy
certificates on the test device</a>. </li>
<li> Enable IP forwarding:
<pre class="terminal">sudo sysctl -w net.inet.ip.forwarding=1</pre>
</li>
<li> Place the following two lines in a file called, say, <b>pf.conf</b>:
<pre class="terminal">rdr on en2 inet proto tcp to any port 80 -&gt; 127.0.0.1 port 8080
rdr on en2 inet proto tcp to any port 443 -&gt; 127.0.0.1 port 8080
</pre>
These rules tell pf to redirect all traffic destined for port 80 or 443
to the local mitmproxy instance running on port 8080. You should
replace <b>en2</b> with the interface on which your test device will
appear.
</li>
<li> Configure pf with the rules:
<pre class="terminal">sudo pfctl -f pf.conf</pre>
</li>
<li> And now enable it:
<pre class="terminal">sudo pfctl -e</pre>
</li>
<li> Configure sudoers to allow mitmproxy to access pfctl. Edit the file
<b>/etc/sudoers</b> on your system as root. Add the following line to the end
of the file:
<pre>ALL ALL=NOPASSWD: /sbin/pfctl -s state</pre>
Note that this allows any user on the system to run the command
"/sbin/pfctl -s state" as root without a password. This only allows
inspection of the state table, so should not be an undue security risk. If
you're special feel free to tighten the restriction up to the user running
mitmproxy.</li>
<li> Fire up mitmproxy. You probably want a command like this:
<pre class="terminal">mitmproxy -T --host</pre>
The <b>-T</b> flag turns on transparent mode, and the <b>--host</b>
argument tells mitmproxy to use the value of the Host header for URL
display.
</li>
<li> Finally, configure your test device to use the host on which mitmproxy is
running as the default gateway.</li>
</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

@@ -1,122 +0,0 @@
## 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.
## Taking a look at the Game Center traffic
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:
<center>
<img 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')!@"/>
</center>
We see a bunch of things we might expect - initialisation, the retrieval of
leaderboards and so forth. Then, right at the end, there's a POST to this
tantalising URL:
<pre>
https://service.gc.apple.com/WebObjects/GKGameStatsService.woa/wa/submitScore
</pre>
The contents of the submission are particularly interesting:
<!--(block|syntax("xml"))-->
<plist version="1.0">
<dict>
<key>scores</key>
<array>
<dict>
<key>category</key>
<string>SMW_Adv_USA1</string>
<key>context</key>
<integer>0</integer>
<key>score-value</key>
<integer>0</integer>
<key>timestamp</key>
<integer>1363515361321</integer>
</dict>
</array>
</dict>
</plist>
<!--(end)-->
This is a [property list](http://en.wikipedia.org/wiki/Property_list),
containing an identifier for the game, a score (55, in this case), and a
timestamp. Looks pretty simple to mess with.
## Modifying and replaying the score submission
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 __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"))-->
<plist version="1.0">
<dict>
<key>scores</key>
<array>
<dict>
<key>category</key>
<string>SMW_Adv_USA1</string>
<key>context</key>
<integer>0</integer>
<key>score-value</key>
<integer>2200272667</integer>
<key>timestamp</key>
<integer>1363515361321</integer>
</dict>
</array>
</dict>
</plist>
<!--(end)-->
Save the file and exit your editor.
The final step is to replay this modified request. Simply press __r__ for
replay.
## The glorious result and some intrigue
<center>
<img 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.
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
case, beacause there are now so many fellow cheaters using this tutorial). If
you think that number seems familiar, you're right: it's 2^31-1, the maximum
value you can fit into a signed 32-bit int. Now let me tell you another
peculiar thing about Super Mega Worm - at the end of every game, it submits
your highest previous score to the Game Center, not your current score. This
means that it stores your highscore somewhere, and I'm guessing that it reads
that stored score back into a signed integer. So, if you _were_ to cheat by the
relatively pedestrian means of modifying the saved score on your jailbroken
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

@@ -1,7 +0,0 @@
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

@@ -1,54 +0,0 @@
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 src="@!urlTo('tutorials/transparent-dhcp/step1_vbox_eth0.png')!@"/><br><br>
<img src="@!urlTo('tutorials/transparent-dhcp/step1_vbox_eth1.png')!@"/>
<br>Proxy VM:
<img 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 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('ssl.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.

1
docs/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
_build/

195
docs/Makefile Normal file
View File

@@ -0,0 +1,195 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/mitmproxy.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/mitmproxy.qhc"
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/mitmproxy"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/mitmproxy"
@echo "# devhelp"
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
livehtml:
sphinx-autobuild -b html -z '../libmproxy' -z '../../netlib/netlib' -r '___jb_(old|bak)___$$' $(ALLSPHINXOPTS) $(BUILDDIR)/html

View File

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

184
docs/certinstall.rst Normal file
View File

@@ -0,0 +1,184 @@
.. _certinstall:
About Certificates
==================
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.
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:
.. image:: certinstall-webapp.png
Click on the relevant icon, follow the setup instructions for the platform
you're on and you are good to go.
Installing the mitmproxy CA certificate manually
------------------------------------------------
Sometimes using the quick install app is not an option - Java or the iOS
Simulator 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.
The mitmproxy CA cert is located in ``~/.mitmproxy`` after it has been generated at the first
start of mitmproxy.
iOS
^^^
http://kb.mit.edu/confluence/pages/viewpage.action?pageId=152600377
iOS Simulator
^^^^^^^^^^^^^
See https://github.com/ADVTOOLS/ADVTrustStore#how-to-use-advtruststore
Java
^^^^
See http://docs.oracle.com/cd/E19906-01/820-4916/geygn/index.html
Android/Android Simulator
^^^^^^^^^^^^^^^^^^^^^^^^^
See http://wiki.cacert.org/FAQ/ImportRootCert#Android_Phones_.26_Tablets
Windows
^^^^^^^
See http://windows.microsoft.com/en-ca/windows/import-export-certificates-private-keys#1TC=windows-7
Windows (automated)
^^^^^^^^^^^^^^^^^^^
>>> certutil.exe -importpfx mitmproxy-ca-cert.p12
See also: https://technet.microsoft.com/en-us/library/cc732443.aspx
Mac OS X
^^^^^^^^
See https://support.apple.com/kb/PH7297?locale=en_US
Ubuntu/Debian
^^^^^^^^^^^^^
See http://askubuntu.com/questions/73287/how-do-i-install-a-root-certificate/94861#94861
Mozilla Firefox
^^^^^^^^^^^^^^^
See https://wiki.mozilla.org/MozillaRootCertificate#Mozilla_Firefox
Chrome on Linux
^^^^^^^^^^^^^^^
See https://code.google.com/p/chromium/wiki/LinuxCertManagement
The mitmproxy certificate authority
-----------------------------------
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. For security reasons, the mitmproxy CA is generated uniquely on the first start and is not shared between mitmproxy installations on different devices.
Certificate Pinning
^^^^^^^^^^^^^^^^^^^
Some applications employ `Certificate Pinning`_ to prevent man-in-the-middle attacks.
This means that **mitmproxy** and **mitmdump's** certificates will not be
accepted by these applications without modifying them. It is recommended to use the
:ref:`passthrough` feature in order to prevent **mitmproxy** and **mitmdump** from intercepting
traffic to these specific domains. If you want to intercept the pinned connections, you need to patch the application manually. For Android and (jailbroken) iOS devices, various tools exist to accomplish this.
CA and cert files
-----------------
The files created by mitmproxy in the .mitmproxy directory are as follows:
===================== ==========================================================================
mitmproxy-ca.pem The certificate **and the private key** in PEM format.
mitmproxy-ca-cert.pem The certificate in PEM format.
Use this to distribute on most non-Windows platforms.
mitmproxy-ca-cert.p12 The certificate in PKCS12 format. For use on Windows.
mitmproxy-ca-cert.cer Same file as .pem, but with an extension expected by some Android devices.
===================== ==========================================================================
Using a custom certificate
--------------------------
You can use your own certificate by passing the ``--cert`` 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:
.. code-block:: none
-----BEGIN PRIVATE KEY-----
<private key>
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<cert>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<intermediary cert (optional)>
-----END CERTIFICATE-----
For example, you can generate a certificate in this format using these instructions:
>>> 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
Using a custom certificate authority
------------------------------------
By default, mitmproxy will use ``~/.mitmproxy/mitmproxy-ca.pem`` 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 ``--cadir DIRECTORY`` option to mitmproxy. Mitmproxy
will then look for ``mitmproxy-ca.pem`` in the specified directory. If
no such file exists, it will be generated automatically.
Using a client side certificate
-------------------------------
You can use a client certificate by passing the ``--client-certs DIRECTORY`` 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.
.. _Certificate Pinning: http://security.stackexchange.com/questions/29988/what-is-certificate-pinning/

219
docs/conf.py Normal file
View File

@@ -0,0 +1,219 @@
# -*- coding: utf-8 -*-
#
# mitmproxy documentation build configuration file, created by
# sphinx-quickstart on Thu Sep 03 14:04:13 2015.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys
import os
import shlex
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('..'))
import libmproxy.version
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.doctest',
'sphinx.ext.viewcode',
'sphinx.ext.napoleon',
'sphinxcontrib.documentedlist'
]
# https://github.com/sphinx-doc/sphinx/pull/2053
napoleon_include_special_with_doc = False
autodoc_member_order = "bysource"
# Add any paths that contain templates here, relative to this directory.
#templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'mitmproxy docs'
copyright = u'2015, the mitmproxy project'
author = u'The mitmproxy project'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = libmproxy.version.VERSION
# The full version, including alpha/beta/rc tags.
release = libmproxy.version.VERSION
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build']
# The reST default role (used for this markup: `text`) to use for all
# documents.
#default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
modindex_common_prefix = ['libmproxy.']
# If true, keep warnings as "system message" paragraphs in the built documents.
#keep_warnings = False
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = False
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'sphinx_rtd_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
html_theme_options = {
# 'logo_only': True,
}
# Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
html_title = "mitmproxy %s documentation" % version
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
html_logo = "mitmproxy-long.png"
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
html_favicon = "favicon.ico"
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static']
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
#html_extra_path = []
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# Language to be used for generating the HTML full-text search index.
# Sphinx supports the following languages:
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
#html_search_language = 'en'
# A dictionary with options for the search language support, empty by default.
# Now only 'ja' uses this config value
#html_search_options = {'type': 'default'}
# The name of a javascript file (relative to the configuration directory) that
# implements a search results scorer. If empty, the default will be used.
#html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder.
htmlhelp_basename = 'mitmproxydoc'

86
docs/config.rst Normal file
View File

@@ -0,0 +1,86 @@
.. _config:
Configuration
=============
Mitmproxy is configured through a set of files in the users ~/.mitmproxy
directory.
mitmproxy.conf
Settings for the :program:`mitmproxy`. This file can contain any options supported by
mitmproxy.
mitmdump.conf
Settings for the :program:`mitmdump`. This file can contain any options supported by mitmdump.
common.conf
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.
Syntax
------
Comments
^^^^^^^^
.. code-block:: none
# this is a comment
; this is also a comment (.ini style)
--- and this is a comment too (yaml style)
Key/Value pairs
^^^^^^^^^^^^^^^
- Keys and values are case-sensitive
- Whitespace is ignored
- Lists are comma-delimited, and enclosed in square brackets
.. code-block:: none
name = value # (.ini style)
name: value # (yaml style)
--name value # (command-line option style)
fruit = [apple, orange, lemon]
indexes = [1, 12, 35 , 40]
Flags
^^^^^
These are boolean options that take no value but true/false.
.. code-block:: none
name = true # (.ini style)
name
--name # (command-line option style)
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 :option:`--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 :option:`--port` is an option supported by all tools.
.. code-block:: none
port = 8080
mitmproxy.conf
^^^^^^^^^^^^^^
.. code-block:: none
palette = light

14
docs/dev/architecture.rst Normal file
View File

@@ -0,0 +1,14 @@
.. _architecture:
Architecture
============
To give you a better understanding of how mitmproxy works, mitmproxy's
high-level architecture is detailed in the following graphic:
.. image:: ../schematics/architecture.png
:download:`architecture.pdf <../schematics/architecture.pdf>`
Please don't refrain from asking any further
questions on the mailing list, the Slack channel or the GitHub issue tracker.

9
docs/dev/exceptions.rst Normal file
View File

@@ -0,0 +1,9 @@
.. _exceptions:
Exceptions
==========
.. automodule:: libmproxy.exceptions
:show-inheritance:
:members:
:undoc-members:

59
docs/dev/models.rst Normal file
View File

@@ -0,0 +1,59 @@
.. _models:
Models
======
.. automodule:: netlib.http
.. autoclass:: Request
.. rubric:: Data
.. autoattribute:: first_line_format
.. autoattribute:: method
.. autoattribute:: scheme
.. autoattribute:: host
.. autoattribute:: port
.. autoattribute:: path
.. autoattribute:: http_version
.. autoattribute:: headers
.. autoattribute:: content
.. autoattribute:: timestamp_start
.. autoattribute:: timestamp_end
.. rubric:: Computed Properties and Convenience Methods
.. autoattribute:: text
.. autoattribute:: url
.. autoattribute:: pretty_host
.. autoattribute:: pretty_url
.. autoattribute:: query
.. autoattribute:: cookies
.. autoattribute:: path_components
.. automethod:: anticache
.. automethod:: anticomp
.. automethod:: constrain_encoding
.. autoattribute:: urlencoded_form
.. autoattribute:: multipart_form
.. autoclass:: Response
.. rubric:: Data
.. autoattribute:: http_version
.. autoattribute:: status_code
.. autoattribute:: reason
.. autoattribute:: headers
.. autoattribute:: content
.. autoattribute:: timestamp_start
.. autoattribute:: timestamp_end
.. rubric:: Computed Properties and Convenience Methods
.. autoattribute:: text
.. autoattribute:: cookies
.. autoclass:: Headers
:members:
:special-members:
:no-undoc-members:
.. autoclass:: decoded
.. automodule:: libmproxy.models
:show-inheritance:
:members: HTTPFlow, Error, ClientConnection, ServerConnection

15
docs/dev/protocols.rst Normal file
View File

@@ -0,0 +1,15 @@
.. _protocols:
Protocols
=========
.. automodule:: libmproxy.protocol
.. autoclass:: Layer
:members:
:special-members:
.. autoclass:: ServerConnectionMixin
:members:
.. autoexception:: Kill

12
docs/dev/proxy.rst Normal file
View File

@@ -0,0 +1,12 @@
.. _proxy:
Proxy Server
============
.. automodule:: libmproxy.proxy
.. autoclass:: ProxyServer
.. autoclass:: DummyServer
.. autoclass:: ProxyConfig
.. autoclass:: RootContext
:members:

View File

@@ -0,0 +1,14 @@
.. _sslkeylogfile:
TLS Master Secrets
==================
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
:envvar:`SSLKEYLOGFILE` 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
:samp:`Edit -> Preferences -> Protocols -> SSL -> (Pre)-Master-Secret log filename`.
Note that :envvar:`SSLKEYLOGFILE` is respected by other programs as well, e.g. Firefox and Chrome.
If this creates any issues, you can set :envvar:`MITMPROXY_SSLKEYLOGFILE` alternatively.

47
docs/dev/testing.rst Normal file
View File

@@ -0,0 +1,47 @@
.. _testing:
Testing
=======
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 `py.test`_ or nose_ test frameworks.
At the point where you send your pull request, a command like this:
>>> py.test -n 4 --cov libmproxy
Should give output something like this:
.. code-block:: none
> ---------- 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
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.
.. _nose: https://nose.readthedocs.org/en/latest/
.. _py.test: https://pytest.org/

BIN
docs/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@@ -0,0 +1,15 @@
.. _anticache:
Anticache
=========
When the :option:`--anticache` option is passed to mitmproxy, it removes headers
(``if-none-match`` and ``if-modified-since``) that might elicit a
``304 not modified`` response from the server. This is useful when you want to make
sure you capture an HTTP exchange in its totality. It's also often used during
:ref:`clientreplay`, when you want to make sure the server responds with complete data.
================== ======================
command-line :option:`--anticache`
mitmproxy shortcut :kbd:`o` then :kbd:`a`
================== ======================

View File

@@ -1,3 +1,7 @@
.. _clientreplay:
Client-side replay
==================
Client-side replay does what it says on the tin: you provide a previously saved
HTTP conversation, and mitmproxy replays the client requests one by one. Note
@@ -6,17 +10,9 @@ before starting the next request. This might differ from the recorded
conversation, where requests may have been made concurrently.
You may want to use client-side replay in conjunction with the
[anticache](@!urlTo("anticache.html")!@) option, to make sure the server
responds with complete data.
:ref:`anticache` option, to make sure the server responds with complete data.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th> <td>-c path</td>
</tr>
<tr>
<th>mitmproxy shortcut</th> <td><b>c</b></td>
</tr>
</tbody>
</table>
================== =================
command-line :option:`-c path`
mitmproxy shortcut :kbd:`c`
================== =================

View File

@@ -1,36 +1,39 @@
.. _filters:
Many commands in __mitmproxy__ and __mitmdump__ take a filter expression.
Filter expressions
==================
Many commands in :program:`mitmproxy` and :program:`mitmdump` take a filter expression.
Filter expressions consist of the following operators:
<table class="table">
<tbody>
<!--(for i in filt_help)-->
<tr>
<td class="filt_cmd">@!i[0]!@</td>
<td class="filt_help">@!i[1]!@</td>
</tr>
<!--(end)-->
</tbody>
</table>
.. documentedlist::
:header: "Expression" "Description"
:listobject: libmproxy.filt.help
- Regexes are Python-style
- Regexes can be specified as quoted strings
- Header matching (~h, ~hq, ~hs) is against a string of the form "name: value".
- Strings with no operators are matched against the request URL.
- The default binary operator is &amp;.
- The default binary operator is &.
Examples
========
--------
URL containing "google.com":
.. code-block:: none
google\.com
Requests whose body contains the string "test":
.. code-block:: none
~q ~b test
Anything but requests with a text/html content type:
!(~q & ~t \"text/html\")
.. code-block:: none
!(~q & ~t "text/html")

View File

@@ -0,0 +1,97 @@
.. _passthrough:
Ignore Domains
==============
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`_ and
mitmproxy's interception leads to errors. For example, the Twitter app, 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 :ref:`tcpproxy`
feature.
If you want to ignore traffic from mitmproxy's processing because of large response bodies,
take a look at the :ref:`responsestreaming` feature.
How it works
------------
================== =============================
command-line :option:`--ignore regex`
mitmproxy shortcut :kbd:`o` then :kbd:`I`
================== =============================
mitmproxy allows you to specify a regex which is matched against a ``host:port`` 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 :option:`--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 (:option:`-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:
.. code-block:: none
:emphasize-lines: 6,7,9
>>> 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$
Here are some other examples for ignore patterns:
.. code-block:: none
# 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
.. seealso::
- :ref:`tcpproxy`
- :ref:`responsestreaming`
.. rubric:: Footnotes
.. [#explicithttp] This stems from an limitation of explicit HTTP proxying:
A single connection can be re-used for multiple target domains - a
``GET http://example.com/`` request may be followed by a ``GET http://evil.com/`` request on the
same connection. If we start to ignore the connection after the first request,
we would miss the relevant second one.
.. _Certificate Pinning: https://security.stackexchange.com/questions/29988/what-is-certificate-pinning

View File

@@ -0,0 +1,17 @@
.. _proxyauth:
Proxy Authentication
====================
Asks the user for authentication before they are permitted to use the proxy.
Authentication headers are stripped from the flows, so they are not passed to
upstream servers. For now, only HTTP Basic authentication is supported. The
proxy auth options are not compatible with the transparent, socks or reverse proxy
mode.
================== =============================
command-line :option:`--nonanonymous`,
:option:`--singleuser USER`,
:option:`--htpasswd PATH`
================== =============================

View File

@@ -1,3 +1,8 @@
.. _replacements:
Replacements
============
Mitmproxy lets you specify an arbitrary number of patterns that define text
replacements within flows. Each pattern has 3 components: a filter that defines
which flows a replacement applies to, a regular expression that defines what
@@ -9,66 +14,59 @@ replace hook is triggered on server response, the replacement is only run on
the Response object leaving the Request intact. You control whether the hook
triggers on the request, response or both using the filter pattern. If you need
finer-grained control than this, it's simple to create a script using the
replacement API on Flow components.
replacement API on Flow components.
Replacement hooks are extremely handy in interactive testing of applications.
For instance you can use a replace hook to replace the text "XSS" with a
complicated XSS exploit, and then "inject" the exploit simply by interacting
with the application through the browser. When used with tools like Firebug and
mitmproxy's own interception abilities, replacement hooks can be an amazingly
flexible and powerful feature.
flexible and powerful feature.
## On the command-line
On the command-line
-------------------
The replacement hook command-line options use a compact syntax to make it easy
to specify all three components at once. The general form is as follows:
.. code-block:: none
/patt/regex/replacement
Here, __patt__ is a mitmproxy filter expression, __regex__ is a valid Python
regular expression, and __replacement__ is a string literal. The first
character in the expression (__/__ in this case) defines what the separation
Here, **patt** is a mitmproxy filter expression, **regex** is a valid Python
regular expression, and **replacement** is a string literal. The first
character in the expression (``/`` in this case) defines what the separation
character is. Here's an example of a valid expression that replaces "foo" with
"bar" in all requests:
.. code-block:: none
:~q:foo:bar
In practice, it's pretty common for the replacement literal to be long and
complex. For instance, it might be an XSS exploit that weighs in at hundreds or
thousands of characters. To cope with this, there's a variation of the
replacement hook specifier that lets you load the replacement text from a file.
So, you might start __mitmdump__ as follows:
So, you might start **mitmdump** as follows:
<pre class="terminal">
mitmdump --replace-from-file :~q:foo:~/xss-exploit
</pre>
>>> mitmdump --replace-from-file :~q:foo:~/xss-exploit
This will load the replacement text from the file __~/xss-exploit__.
This will load the replacement text from the file ``~/xss-exploit``.
Both the _--replace_ and _--replace-from-file_ flags can be passed multiple
Both the :option:`--replace` and :option:`--replace-from-file` flags can be passed multiple
times.
## Interactively
Interactively
-------------
The _R_ shortcut key in mitmproxy lets you add and edit replacement hooks using
a built-in editor. The context-sensitive help (_h_) has complete usage
information.
The :kbd:`R` shortcut key in the mitmproxy options menu (:kbd:`o`) lets you add and edit
replacement hooks using a built-in editor. The context-sensitive help (:kbd:`?`) has
complete usage information.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th>
<td>
<ul>
<li>--replace</li>
<li>--replace-from-file</li>
</ul>
</td>
</tr>
<tr>
<th>mitmproxy shortcut</th> <td><b>R</b></td>
</tr>
</tbody>
</table>
================== =============================
command-line :option:`--replace`,
:option:`--replace-from-file`
mitmproxy shortcut :kbd:`o` then :kbd:`R`
================== =============================

View File

@@ -0,0 +1,69 @@
.. _responsestreaming:
Response Streaming
==================
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.
On the command-line
-------------------
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.
================== =============================
command-line :option:`--stream SIZE`
================== =============================
.. warning::
When response streaming is enabled, **streamed response contents will not be
recorded or preserved in any way.**
.. note::
When response streaming is enabled, the response body cannot be modified by the usual means.
Customizing Response Streaming
------------------------------
You can also use an :ref:`inlinescripts` to customize exactly
which responses are streamed.
Responses that should be tagged for streaming by setting their ``.stream`` attribute to ``True``:
.. literalinclude:: ../../examples/stream.py
:caption: examples/stream.py
:language: python
Implementation Details
----------------------
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
(:py:data:`netlib.http.CONTENT_MISSING`). Any modifications will be ignored.
Streamed responses are usually sent in chunks of 4096 bytes. If the response is sent with a
``Transfer-Encoding: chunked`` header, the response will be streamed one chunk at a time.
Modifying streamed data
-----------------------
If the ``.stream`` attribute is callable, ``.stream`` will wrap the generator that yields all
chunks.
.. literalinclude:: ../../examples/stream_modify.py
:caption: examples/stream_modify.py
:language: python
.. seealso::
- :ref:`passthrough`

View File

@@ -0,0 +1,57 @@
.. _reverseproxy:
Reverse Proxy
=============
In reverse proxy mode, mitmproxy accepts standard HTTP(S) requests and forwards
them to the specified upstream server. This is in contrast to :ref:`upstreamproxy`, in which
mitmproxy forwards HTTP(S) proxy requests to an upstream proxy server.
================== =====================================
command-line :option:`-R http[s]://hostname[:port]`
================== =====================================
Here, **http[s]** signifies if the proxy should use TLS to connect to the server.
mitmproxy always accepts both encrypted and unencrypted requests and transforms
them to what the server expects.
.. code-block:: none
>>> mitmdump -R https://httpbin.org -p 80
>>> curl http://localhost/
# requests will be transparently upgraded to TLS by mitmproxy
>>> mitmdump -R https://httpbin.org -p 443
>>> curl https://localhost/
# mitmproxy will use TLS on both ends.
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:
.. code-block:: none
:emphasize-lines: 5
>>> 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 "example.com", an error is returned.
There are two ways to solve this:
1. Modify the hosts file of your OS so that "example.com" resolves to your proxy's IP.
Then, access example.com directly. Make sure that your proxy can still resolve the original IP
or specify an IP in mitmproxy.
2. Use mitmproxy's :ref:`setheaders` feature to rewrite the host header:
``--setheader :~q:Host:example.com``.
However, keep in mind that absolute URLs within the returned document or HTTP redirects will
cause the client application to bypass the proxy.

View File

@@ -1,6 +1,7 @@
.. _serverreplay:
- command-line: _-S path_
- mitmproxy shortcut: _S_
Server-side replay
==================
Server-side replay lets us replay server responses from a saved HTTP
conversation.
@@ -8,12 +9,12 @@ conversation.
Matching requests with responses
--------------------------------
By default, __mitmproxy__ excludes request headers when matching incoming
By default, :program:`mitmproxy` excludes request headers when matching incoming
requests with responses from the replay file. This works in most circumstances,
and makes it possible to replay server responses in situations where request
headers would naturally vary, e.g. using a different user agent. The _--rheader
headername_ command-line option allows you to override this behaviour by
specifying individual headers that should be included in matching.
headers would naturally vary, e.g. using a different user agent.
The :option:`--rheader headername` command-line option allows you to override
this behaviour by specifying individual headers that should be included in matching.
Response refreshing
@@ -22,14 +23,17 @@ Response refreshing
Simply replaying server responses without modification will often result in
unexpected behaviour. For example cookie timeouts that were in the future at
the time a conversation was recorded might be in the past at the time it is
replayed. By default, __mitmproxy__ refreshes server responses before sending
them to the client. The __date__, __expires__ and __last-modified__ headers are
replayed. By default, :program:`mitmproxy` refreshes server responses before sending
them to the client. The **date**, **expires** and **last-modified** headers are
all updated to have the same relative time offset as they had at the time of
recording. So, if they were in the past at the time of recording, they will be
in the past at the time of replay, and vice versa. Cookie expiry times are
updated in a similar way.
You can turn off response refreshing using the _--norefresh_ argument, or using
the _o_ options shortcut within __mitmproxy__.
You can turn off response refreshing using the :option:`--norefresh` argument, or using
the :kbd:`o` options shortcut within :program:`mitmproxy`.
================== =================
command-line :option:`-S path`
mitmproxy shortcut :kbd:`S`
================== =================

View File

@@ -0,0 +1,19 @@
.. _setheaders:
Set Headers
===========
This feature lets you specify a set of headers to be added to requests or
responses, based on a filter pattern. You can specify these either on the
command-line, or through an interactive editor in mitmproxy.
Example: Set the **Host** header to "example.com" for all requests.
.. code-block:: none
mitmdump -R http://example.com --setheader :~q:Host:example.com
================== =============================
command-line :option:`--setheader PATTERN`
mitmproxy shortcut :kbd:`o` then :kbd:`H`
================== =============================

View File

@@ -0,0 +1,10 @@
.. _socksproxy:
SOCKS Mode
==========
In this mode, mitmproxy acts as a SOCKS5 proxy server.
================== =================
command-line :option:`--socks`
================== =================

41
docs/features/sticky.rst Normal file
View File

@@ -0,0 +1,41 @@
.. _sticky:
Sticky cookies and auth
=======================
Sticky cookies
--------------
When the sticky cookie option is set, __mitmproxy__ will add the cookie most
recently set by the server to any cookie-less request. Consider a service that
sets a cookie to track the session after authentication. Using sticky cookies,
you can fire up mitmproxy, and authenticate to a service as you usually would
using a browser. After authentication, you can request authenticated resources
through mitmproxy as if they were unauthenticated, because mitmproxy will
automatically add the session tracking cookie to requests. Among other things,
this lets you script interactions with authenticated resources (using tools
like wget or curl) without having to worry about authentication.
Sticky cookies are especially powerful when used in conjunction with :ref:`clientreplay` - you can
record the authentication process once, and simply replay it on startup every time you need
to interact with the secured resources.
================== ======================
command-line :option:`-t FILTER`
mitmproxy shortcut :kbd:`o` then :kbd:`t`
================== ======================
Sticky auth
-----------
The sticky auth option is analogous to the sticky cookie option, in that HTTP
**Authorization** headers are simply replayed to the server once they have been
seen. This is enough to allow you to access a server resource using HTTP Basic
authentication through the proxy. Note that :program:`mitmproxy` doesn't (yet) support
replay of HTTP Digest authentication.
================== ======================
command-line :option:`-u FILTER`
mitmproxy shortcut :kbd:`o` then :kbd:`A`
================== ======================

View File

@@ -0,0 +1,31 @@
.. _tcpproxy:
TCP Proxy
=========
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 :ref:`passthrough` 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
------------
================== ======================
command-line :option:`--tcp HOST`
mitmproxy shortcut :kbd:`o` then :kbd:`T`
================== ======================
For a detailed description how the hostname pattern works, please look at the :ref:`passthrough`
feature.
.. seealso::
- :ref:`passthrough`
- :ref:`responsestreaming`

View File

@@ -1,7 +1,12 @@
.. _upstreamcerts:
Upstream Certificates
=====================
When mitmproxy receives a connection destined for an SSL-protected service, it
freezes the connection before reading its request data, and makes a connection
to the upstream server to "sniff" the contents of its SSL certificate. The
information gained - the __Common Name__ and __Subject Alternative Names__ - is
information gained - the **Common Name** and **Subject Alternative Names** - is
then used to generate the interception certificate, which is sent to the client
so the connection can continue.
@@ -12,10 +17,7 @@ certs in transparent mode.
Upstream cert sniffing is on by default, and can optionally be turned off.
<table class="table">
<tbody>
<tr>
<th width="20%">command-line</th> <td>--no-upstream-cert</td>
</tr>
</tbody>
</table>
================== =============================
command-line :option:`--no-upstream-cert`
mitmproxy shortcut :kbd:`o` then :kbd:`U`
================== =============================

View File

@@ -0,0 +1,12 @@
.. _upstreamproxy:
Upstream proxy mode
===================
In this mode, mitmproxy accepts proxy requests and unconditionally forwards all
requests to a specified upstream proxy server. This is in contrast to :ref:`reverseproxy`,
in which mitmproxy forwards ordinary HTTP requests to an upstream server.
================== ===================================
command-line :option:`-U http://hostname[:port]`
================== ===================================

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