from models.example import AddonExampleDocument DOCS_EXAMPLES_URL = "https://docs.mitmproxy.org/stable/addons/examples/" BUILTIN_EXAMPLES = [ AddonExampleDocument( id="http-tag-traffic", name="Tag proxied traffic", description=( "Adds a visible response header on every HTTP reply so you can tell " "immediately whether the request crossed the proxy." ), category="http", source_url=DOCS_EXAMPLES_URL, built_in=True, code="""from mitmproxy import http def response(flow: http.HTTPFlow) -> None: flow.response.headers["x-theplug"] = "enabled" """, ), AddonExampleDocument( id="http-force-query-flag", name="Force request flag", description=( "Adds or overwrites a request query flag before the flow is sent " "upstream. Useful when you need a stable marker on every request." ), category="http", source_url=DOCS_EXAMPLES_URL, built_in=True, code="""from mitmproxy import http def request(flow: http.HTTPFlow) -> None: flow.request.query["debug"] = "1" """, ), AddonExampleDocument( id="http-local-health-response", name="Serve local health response", description=( "Answers one health endpoint directly from the proxy without " "touching the upstream service. Useful for smoke tests and checks." ), category="http", source_url=DOCS_EXAMPLES_URL, built_in=True, code="""from mitmproxy import http def request(flow: http.HTTPFlow) -> None: if flow.request.path == "/healthz": flow.response = http.Response.make( 200, b"ok", {"content-type": "text/plain"}, ) """, ), AddonExampleDocument( id="http-rewrite-health-path", name="Rewrite one request path", description=( "Rewrites a single incoming path before forwarding it upstream. " "Useful when the public route and upstream route do not match." ), category="http", source_url=DOCS_EXAMPLES_URL, built_in=True, code="""from mitmproxy import http def request(flow: http.HTTPFlow) -> None: if flow.request.path == "/healthz": flow.request.path = "/status" """, ), AddonExampleDocument( id="websocket-rewrite", name="WebSocket rewrite", description=( "Rewrites matching bytes inside live WebSocket frames to flip a " "runtime marker while the flow is passing through the proxy." ), category="websocket", source_url=DOCS_EXAMPLES_URL, built_in=True, code="""from mitmproxy import http def websocket_message(flow: http.HTTPFlow) -> None: if flow.websocket is None: return message = flow.websocket.messages[-1] message.content = message.content.replace(b"debug=false", b"debug=true") """, ), AddonExampleDocument( id="tcp-log-messages", name="TCP log messages", description=( "Logs direction and byte size for every TCP frame so you can see " "what is crossing the route without modifying the payload." ), category="tcp", source_url=DOCS_EXAMPLES_URL, built_in=True, code="""import logging from mitmproxy import tcp def tcp_message(flow: tcp.TCPFlow) -> None: message = flow.messages[-1] direction = "client" if message.from_client else "server" logging.info("%s sent %d bytes", direction, len(message.content)) """, ), AddonExampleDocument( id="dns-spoof-a-record", name="DNS spoof A record", description=( "Overrides one DNS A record while leaving all other queries alone. " "Useful for selective redirection during local testing." ), category="dns", source_url=DOCS_EXAMPLES_URL, built_in=True, code="""import ipaddress from mitmproxy import dns def dns_request(flow: dns.DNSFlow) -> None: question = flow.request.question if question and question.name == "target.local" and question.type == dns.types.A: flow.response = flow.request.succeed( [ dns.ResourceRecord( name="target.local", type=dns.types.A, class_=dns.classes.IN, ttl=60, data=ipaddress.ip_address("127.0.0.1").packed, ) ] ) """, ), ]