# mitmproxy_rs

[![autofix.ci: enabled](https://shields.mitmproxy.org/badge/autofix.ci-yes-success?logo=data:image/svg+xml;base64, )](https://autofix.ci)
[![Continuous Integration Status](https://github.com/mitmproxy/mitmproxy_rs/actions/workflows/ci.yml/badge.svg)](https://github.com/mitmproxy/mitmproxy_rs/actions?query=branch%3Amain)
[![Latest Version](https://shields.mitmproxy.org/pypi/v/mitmproxy-rs.svg)](https://pypi.python.org/pypi/mitmproxy-wireguard)
[![Supported Python versions](https://shields.mitmproxy.org/pypi/pyversions/mitmproxy.svg)](https://pypi.python.org/pypi/mitmproxy)
![PyPI - Wheel](https://shields.mitmproxy.org/pypi/wheel/mitmproxy-rs)


This repository contains mitmproxy's Rust bits, most notably:

 - WireGuard Mode: The ability to proxy any device that can be configured as a WireGuard client.
 - Local Redirect Mode: The ability to proxy arbitrary macOS or Windows applications by name or pid.


## Contributing

[![Dev Guide](https://shields.mitmproxy.org/badge/docs-CONTRIBUTING.md-blue)](https://github.com/mitmproxy/mitmproxy_rs/blob/main/CONTRIBUTING.md)
[![dev documentation](https://shields.mitmproxy.org/badge/docs-Python%20API-blue.svg)](https://mitmproxy.github.io/mitmproxy_rs/)

### Structure

- [`src/`](./src): The `mitmproxy` crate containing most of the "meat".
- [`mitmproxy-contentviews/`](./mitmproxy-contentviews): 
  Pretty-printers for (HTTP) message bodies.
- [`mitmproxy-highlight/`](./mitmproxy-highlight):
  Syntax highlighting backend for mitmproxy and mitmdump.
- [`mitmproxy-rs/`](./mitmproxy-rs): The `mitmproxy-rs` Python package,
  which provides Python bindings for the Rust crate using [PyO3](https://pyo3.rs/).  
  Source and binary distributions are available [on PyPI](https://pypi.org/project/mitmproxy-rs/).
- [`mitmproxy-macos/`](./mitmproxy-macos): The `mitmproxy-macos` Python package, which
  contains a macOS Network Extension to transparently intercept macOS traffic.  
  Only a binary distribution is available [on PyPI](https://pypi.org/project/mitmproxy-macos/)
  due to code signing and notarization requirements.
- [`mitmproxy-windows/`](./mitmproxy-windows): The `mitmproxy-windows` Python package, which
  contains the Windows traffic redirector based on [WinDivert](https://github.com/basil00/WinDivert).  
  Only a binary distribution is available [on PyPI](https://pypi.org/project/mitmproxy-windows/)
  due to build complexity.
- [`mitmproxy-linux/`](./mitmproxy-linux): The `mitmproxy-linux` Python package, which
  contains the Linux traffic redirector based on [Aya](https://aya-rs.dev/).  
  Source and binary distributions are available [on PyPI](https://pypi.org/project/mitmproxy-linux/).
- [`mitmproxy-linux-ebpf/`](./mitmproxy-linux-ebpf): The eBPF program embedded in `mitmproxy-linux`.
- [`mitmproxy-linux-ebpf-common/`](./mitmproxy-linux-ebpf-common): Data structures shared by user space and eBPF.

### Architecture

![library architecture](architecture.png)
