codekingpro/portable-devtools
114k
1import re2 3from mitmproxy import ctx4from mitmproxy.http import HTTPFlow5from mitmproxy.proxy import mode_specs6 7ALT_SVC = "alt-svc"8HOST_PATTERN = r"([a-zA-Z0-9.-]*:\d{1,5})"9 10 11def update_alt_svc_header(header: str, port: int) -> str:12 return re.sub(HOST_PATTERN, f":{port}", header)13 14 15class UpdateAltSvc:16 def load(self, loader):17 loader.add_option(18 "keep_alt_svc_header",19 bool,20 False,21 "Reverse Proxy: Keep Alt-Svc headers as-is, even if they do not point to mitmproxy. Enabling this option may cause clients to bypass the proxy.",22 )23 24 def responseheaders(self, flow: HTTPFlow):25 assert flow.response26 if (27 not ctx.options.keep_alt_svc_header28 and isinstance(flow.client_conn.proxy_mode, mode_specs.ReverseMode)29 and ALT_SVC in flow.response.headers30 ):31 _, listen_port, *_ = flow.client_conn.sockname32 headers = flow.response.headers33 headers[ALT_SVC] = update_alt_svc_header(headers[ALT_SVC], listen_port)34 