尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

mitmproxy 如何用 modify_headers 批量添加、覆盖或删除请求头?

mitmproxy 如何用 modify_headers 批量添加、覆盖或删除请求头? mitmproxy 如何用 modify_headers 批量添加、覆盖或删除请求头【免费下载链接】mitmproxyAn interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.项目地址: https://gitcode.com/GitHub_Trending/mi/mitmproxy如果你在用 mitmproxy 做代理调试或渗透测试时需要给经过代理的 HTTP 请求批量改头——比如统一改写Host、加一个自定义头、或删掉某个头——内置的modify_headers选项就是干这个的它接受一组模式patternmitmproxy 在每个流经过时自动应用不需要你为每个请求手工拦截修改。本文基于项目文档 Features 中的 “Modify Headers” 一节给出modify_headers的模式语法、命令行用法和验证方法。适用前提mitmproxy 已安装客户端流量浏览器或 curl已指向 mitmproxy 代理默认监听http://localhost:8080见 Getting Started。modify_headers 的模式语法modify_headers接受任意多条模式格式为/flow-filter/name/value /flow-filter/name/file-path /name/value /name/file-pathflow-filter可选的 mitmproxy 过滤表达式限定该条规则作用于哪些流请求、响应、某域名、某 Content-Type 等。语法见 Filter expressions。name要设置、替换或删除的头名称。value要设置的头值。value 为空表示删除所有名为 name 的现有头value 以开头如file-path时会被当作文件路径从文件中读取值作为头内容。分隔符任意字符以第一个字符为准。文档示例用/你换成:或|也可以。三条规则覆盖三种操作操作写法示例效果添加/覆盖/~q/Host/example.org给匹配的流设置Host: example.org已有的同名头会被替换删除/~q/Host/移除匹配流中所有Host头value 为空从文件取值/~q/User-Agent/~/useragent.txt用~/useragent.txt文件的内容作为头值两个默认行为需要注意同名头默认被覆盖existing headers are overwritten by default。如果你只想在头不存在时才添加要用过滤表达式排除已有该头的流。规则同时可用于请求和响应。modify 钩子在客户端请求或服务端响应到达时都会触发但只影响匹配的流组件——通过 flow-filter 决定它作用在请求~q、响应~s还是两者。文档给出的四种典型模式以下示例均来自 Features 的 Modify Headers 一节给所有请求设置Host为example.org已有Host头会被替换/~q/Host/example.org只给还没有Host头的请求补上用!~h Host/过滤掉已含 Host 头的流/~q !~h Host:/Host/example.org从文件读取User-Agent值设置到所有请求已有的会被替换/~q/User-Agent/~/useragent.txt删除所有请求里现有的Host头/~q/Host/注意~h头匹配是作用在name: value形式的字符串上见 Filter expressions所以!~h Host/表示“请求或响应中没有形如Host:开头的头行”。在命令行中启用 modify_headersmodify_headers是Sequence[str]类型的选项三种配置方式1. 各工具通用的-H短参数 /--modify-headersmitmdump、mitmproxy、mitmweb的命令行都注册了该选项见 cmdline.pymitmdump -H /~q/Host/example.org -H /~q/Host/多条规则就重复传多次-H。注意把模式整体用引号包起来避免 shell 解析其中的特殊字符。2.--set按选项名设置任意 mitmproxy 工具通用见 Optionsmitmproxy --set modify_headers/~q/User-Agent/~/useragent.txt3. YAML 配置文件各工具共享~/.mitmproxy/config.yaml把选项写进去即可持久生效也可以之后在mitmproxy/mitmweb的交互式选项编辑器按O中查看和修改modify_headers的值。选项写错时例如后面的文件不存在、正则非法mitmproxy 在 configure 阶段会报Cannot parse modify_headers option ...的OptionsError见 modifyheaders.py 中的解析逻辑。验证修改是否生效最短的验证路径是用 curl 走代理发请求检查实际到达的对端看到什么头env http_proxyhttp://localhost:8080 curl -v http://httpbin.org/headerscurl -v会把收到的响应头打印到 stderr如果响应体httpbin 的/headers会回显它收到的请求头里能看到你设置或删除后的头说明规则已生效。也可以直接在 mitmproxy 的交互界面mitmproxy控制台或mitmweb里查看经过的 flow检查请求头是否按规则变化——Getting Started 中提到流量到达后会以 flow 形式展示、可逐个检查。另外注意如果流被标记为 streaming例如启用了stream_large_bodies分流body 修改不生效但 HTTP 头仍是完整缓冲后才发送的见 Streaming所以modify_headers对流式请求依然有效。限制与边界该选项只按模式批量作用于所有匹配的流不做“某一条请求改一次”的细粒度控制需要更精细的控制时文档建议写一个基于 flow 组件替换 API 的脚本见 Addons Examples 中如 http-add-header.py 的示例。分隔符以第一个字符为准意味着 header name 和 value 中如果包含与分隔符相同的字符模式会切分错位——文档未提供转义方案命名冲突时换一种分隔符即可。过滤表达式中的正则默认大小写不敏感设置环境变量MITMPROXY_CASE_SENSITIVE_FILTERS1可关闭该行为见 Filter expressions。file-path方式读取的文件内容整体作为头值读取失败时规则会被跳过并记 warning不会阻塞代理本身。进一步阅读过滤表达式完整语法在 concepts/filters.md选项机制与--options全量列表在 concepts/options.md交互式改请求的完整流程可看 cli-03-modify-requests 教程。【免费下载链接】mitmproxyAn interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.项目地址: https://gitcode.com/GitHub_Trending/mi/mitmproxy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表