用途:在 Yakit MITM 代理中,用 Yaklang 代码在不中断代理服务的情况下动态接管 HTTP 流量各处理阶段,适用于安全测试、流量分析与被动/主动改写场景。
主要能力:请求响应劫持类(hijackHTTPRequest、hijackHTTPResponse、hijackHTTPResponseEx、beforeRequest、afterRequest)可同步串行改写或丢弃数据包,通过 forward(req|rsp)/drop() 提交,劫持类必须对每个包调用 forward 或 drop,否则请求挂起,未命中目标也要 forward 原包。镜像类(mirrorHTTPFlow、mirrorFilteredHTTPFlow、mirrorNewWebsite、mirrorNewWebsitePath、mirrorNewWebsitePathParams)仅观察分析,不可改写,去重语义按域名、路径、query 参数结构区分。数据包存储处理类的 hijackSaveHTTPFlow 在入库 History 前可改 flow 或丢弃;mockHTTPRequest 可用本地响应替代出站请求回包。常用 API 包括 poc.GetHTTPPacketBody、poc.ReplaceHTTPPacketBody、poc.GetHTTPPacketHeader、poc.ReplaceHTTPPacketHeader、poc.GetHTTPRequestMethod、poc.GetStatusCodeFromResponse 等。
使用方式:脚本统一注册 hook 函数变量,再用 if YAK_MAIN { runSelfTest() } 守卫本地自测。命令行 yak xxx.yak 时 YAK_MAIN 为 true,执行自测;Yakit MITM 热加载窗口加载时为 false,仅注册 hook。每个 Hook 在 examples/ 下有独立示例,可 yak <file> 直接自测。
限制:MITM 会并发调用同一份 hook,顶层全局变量应视为只读常量,hook 内不要写共享可变全局,否则可能 data race 崩溃;跨请求聚合需用 sync.Map、sync.NewMutex() 或 db./risk. 落库。mirror 类不可改写流量。该页为 MITM 模块级热加载专题,相关信息以资料为准,其余细节暂未提供。