资讯动态

mitmproxy 如何用 stream_large_bodies 对大流量启用流式转发以降低内存占用?

发布时间:2026/9/10 17:00:22 来源:尧图企业网站定制
mitmproxy 如何用 stream_large_bodies 对大流量启用流式转发以降低内存占用【免费下载链接】mitmproxyAn interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.项目地址: https://gitcode.com/GitHub_Trending/mi/mitmproxymitmproxy 默认会把整个 HTTP 请求/响应读入内存、完成指定的处理后再转发给对方。这在抓包小报文时没有问题但下载或上传大文件时完整的消息体会被完整缓冲在代理侧内存占用随之升高还可能让 mitmproxy 变得异常缓慢。忽略域名文档也指出如果是因为大响应体希望某些流量少参与处理可以参考 streaming 功能。本文的目标是通过stream_large_bodies选项设定一个体积阈值让超过阈值的请求/响应体绕过缓冲直接流式转发给客户端/服务器从而降低代理的内存占用并验证流式转发确实已生效。stream_large_bodies 的作用与前提根据 features.md 的 Streaming 章节开启流式转发后的行为边界如下消息体不再在代理侧缓冲而是直接发送到服务器/客户端消息体在 mitmproxy 内部不可访问对体的修改body modification对流式转发的内容不生效HTTP 头仍然会完整缓冲后再发送所以头部检查不受影响该限制通过stream_large_bodies选项指定值为一个大小阈值支持k/m/g后缀例如3m表示 3 MB。stream_large_bodies与store_streamed_bodies是配套选项定义于 proxyserver.pystream_large_bodies指定流式转发的大小阈值被流式转发的体不会以任何形式保存此类响应也无法被修改store_streamed_bodies布尔值默认false把流式转发的请求/响应体也存下来。这会提高内存占用代价是之后可以查看这些流式体。也就是说如果你的目的就是降内存就不要打开store_streamed_bodies如果既要流式又要能查看大文件内容则两者同时设置。另外注意一个冲突项当modify_body与stream_large_bodies同时启用时mitmproxy 会打印告警日志提示两者同时处于激活状态modifybody.py因为体修改对流式体本来就不生效。如果你的工作流依赖 modify_body要么只对不流式的小流量修改要么放弃对大体的修改。启用流式转发所有 mitmproxy 工具mitmdump / mitmproxy / mitmweb都支持--set按选项名直接赋值见 Options。最短的主路径mitmdump --set stream_large_bodies3m含义凡是请求或响应体超过 3 MB 的流量体数据将被直接流式转发不在代理侧整块缓冲。阈值的选取由你按实际流量决定——文档只说明格式支持k/m/g后缀如3m没有给出推荐值。如果阈值格式不合法选项会被拒绝并抛出OptionsError: Invalid stream_large_bodies specification: ...proxyserver.py 中的校验逻辑这也可以作为一种快速验证写一个错误值能看到报错说明配置链路是通的。旧的--stream命令行参数在 arg_check.py 的 DEPRECATED 列表中现已被标记为弃用新配置请使用--set stream_large_bodies...。可选只流式特定请求/响应除了全局阈值还可以用脚本精确控制哪些响应走流式。示例脚本展示了对所有响应开启流式等价于--set stream_large_bodies1def responseheaders(flow): Enables streaming for all responses. This is equivalent to passing --set stream_large_bodies1 to mitmproxy. flow.response.stream True使用方式是把它作为 add-on 加载例如mitmdump -s examples/addons/http-stream-simple.py。把flow.response.stream请求侧对应flow.request.stream置为True即标记该流量为流式。适合只对流式化个别接口的大响应的场景。验证流式转发是否生效文档提供了两处运行时的可见状态可以据此判断配置是否加载成功mitmproxy 控制台状态栏当stream_large_bodies有值时状态栏会追加显示该阈值statusbar.py。启动mitmproxy --set stream_large_bodies3m后在底部状态栏看到3m字样说明选项已生效。mitmweb 页脚web 界面的 Footer 组件同样会在stream_large_bodies设置后展示该状态Footer.tsx。行为层面的验证依据 Streaming 章节的说明阈值以上的流量体不会被缓冲且 modify_body 对其无效——如果你之前对某大文件响应配置了 modify_body开启流式后观察该修改不再作用正符合文档描述的预期行为。限制与边界流式转发的体在 mitmproxy 内不可访问无法查看内容、无法参与体修改只有 HTTP 头仍然完整可读。store_streamed_bodiestrue会把流式体存回内存以便查看这与降低内存占用的目标相悖仅在需要检查大文件内容时临时启用。阈值校验只检查格式k/m/g 后缀的大小字符串不存在自动最优阈值阈值设得太小会让本可正常抓包/修改的流量也变成不可检查的流。流式只影响体不影响 mitmproxy 的连接、路由和头部处理逻辑。【免费下载链接】mitmproxyAn interactive TLS-capable intercepting HTTP proxy for penetration testers and software developers.项目地址: https://gitcode.com/GitHub_Trending/mi/mitmproxy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价