from models.example import AddonExampleDocument DOCS_EXAMPLES_URL = "https://docs.mitmproxy.org/stable/addons/examples/" BUILTIN_EXAMPLES = [ AddonExampleDocument( id="http-add-response-header", name="HTTP add response header", description=( "Injects a fixed response header on every HTTP response so you can " "verify that traffic is passing through the proxy response path." ), 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-modify-query", name="HTTP modify query", description=( "Adds or overwrites a query parameter before each request is " "forwarded upstream. Useful for forced debug or feature flags." ), 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-reply-from-proxy", name="HTTP reply from proxy", description=( "Serves a local HTTP response for a selected path without touching " "the upstream service. Useful for probes, maintenance, or stubs." ), 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="websocket-rewrite", name="WebSocket rewrite", description=( "Rewrites matching bytes inside live WebSocket frames to alter " "runtime flags or payload markers in transit." ), 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 raw TCP message direction and size for each frame so you can " "observe binary traffic without altering it." ), 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 forwarding every other query " "unchanged. Useful for selective service redirection." ), 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, ) ] ) """, ), ]