Man-in-the-middle proxy with customizable options.
Project description
👨💻 mitm
A customizable man-in-the-middle TCP proxy with out-of-the-box support for HTTP & HTTPS.
Installing
pip install mitm
Note that OpenSSL 1.1.1 or greater is required.
Documentation
Documentation can be found here.
Using
Using the default values for the MITM
class:
from mitm import MITM, protocol, middleware, crypto
mitm = MITM(
host="127.0.0.1",
port=8888,
protocols=[protocol.HTTP],
middlewares=[middleware.Log],
buffer_size=8192,
timeout=5,
ssl_context=crypto.mitm_ssl_default_context(),
)
mitm.run()
This will start a proxy on port 8888 that is capable of intercepting all HTTP traffic (with support for CONNECT
), and log all activity.
Protocols
mitm
comes with a set of built-in protocols, and a way to add your own. Protocols
and are used to implement custom
application-layer protocols that interpret and route traffic. Out-of-the-box HTTP
is available.
Middlewares
Middleware are used to implement event-driven behavior as it relates to the client and server connection. Out-of-the-box Log
is available.
Example
Using the example above we can send a request to the server via another script:
import requests
proxies = {"http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"}
requests.get("https://httpbin.org/anything", proxies=proxies, verify=False)
Which will lead to the following being logged where mitm
is running in:
2021-11-29 10:33:02 INFO MITM started on 127.0.0.1:8888.
2021-11-29 10:33:03 INFO Client 127.0.0.1:54771 has connected.
2021-11-29 10:33:03 INFO Client to server:
b'CONNECT httpbin.org:443 HTTP/1.0\r\n\r\n'
2021-11-29 10:33:03 INFO Connected to server 18.232.227.86:443.
2021-11-29 10:33:03 INFO Client to server:
b'GET /anything HTTP/1.1\r\nHost: httpbin.org\r\nUser-Agent: python-requests/2.26.0\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\n\r\n'
2021-11-29 10:33:03 INFO Server to client:
b'HTTP/1.1 200 OK\r\nDate: Mon, 29 Nov 2021 15:33:03 GMT\r\nContent-Type: application/json\r\nContent-Length: 396\r\nConnection: keep-alive\r\nServer: gunicorn/19.9.0\r\nAccess-Control-Allow-Origin: *\r\nAccess-Control-Allow-Credentials: true\r\n\r\n{\n "args": {}, \n "data": "", \n "files": {}, \n "form": {}, \n "headers": {\n "Accept": "*/*", \n "Accept-Encoding": "gzip, deflate", \n "Host": "httpbin.org", \n "User-Agent": "python-requests/2.26.0", \n "X-Amzn-Trace-Id": "Root=1-61a4f2af-2de4362101f0cab43f6407b1"\n }, \n "json": null, \n "method": "GET", \n "origin": "xxx.xx.xxx.xx", \n "url": "https://httpbin.org/anything"\n}\n'
2021-11-29 10:33:08 INFO Client has disconnected.
2021-11-29 10:33:08 INFO Server has disconnected.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mitm-1.2.2.tar.gz
.
File metadata
- Download URL: mitm-1.2.2.tar.gz
- Upload date:
- Size: 21.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fed5785a52956b7df0cb2222bbe78c58a0f0e95acbd1dafef4880af4a1667c36 |
|
MD5 | 4c80d1c71cc426e2e1203ab38fc3d290 |
|
BLAKE2b-256 | e01a9487ef4c17da11968039e6eb9cb0e140d8d1d568590a79b9a63d15b8df2d |
File details
Details for the file mitm-1.2.2-py3-none-any.whl
.
File metadata
- Download URL: mitm-1.2.2-py3-none-any.whl
- Upload date:
- Size: 11.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 36bb4b4f3ceac6e6c62b0790743f0ed9656953882c5af88c5e8c7a8c685cecc0 |
|
MD5 | a30d7e19059d21f380ca615a8283a65d |
|
BLAKE2b-256 | 16199c7c9e0f4a1124c129aa42c71075566f85ef06af512126ebbf75c6c8f418 |