命令行工具
justcoding121/titanium-web-proxy avatar
justcoding121/titanium-web-proxy

Titanium Web Proxy 6.0:一个把 MITM 调试、反向代理和 .NET 库塞进同一引擎的 C# 代理

该项目围绕「justcoding121/titanium-web-proxy」构建,面向真实业务场景提供可复用的开源实践方案,支持稳定落地与可扩展的项目实践。

1,997 个 Star660 个 ForkC#MIT
GitHub

秒懂

它是什么?
Titanium Web Proxy 是一个跨平台异步 HTTP(S) 代理服务器,提供 CLI、桌面 Inspector 和 NuGet 库三种形态。本文基于 6.0.2 版本,拆解它的架构、用法和边界。
适合谁用?
Titanium Web Proxy 适合两类人:一是需要在 .NET 应用里嵌入 MITM 或反向代理能力的开发团队,二是想要一个带图形界面调试器的安全测试人员。它不适合只想要一个超轻量转发代理的场景,因为完整功能依赖 .NET 10 运行时,且 HTTP/3 需要额外打包 MsQuic 原生库。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 C#(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

一个代理,三种形态:CLI、Inspector 与 NuGet 库

Titanium Web Proxy 不是一个单一的程序,而是四个产品的集合。核心是 Titanium.Web.Proxy 库,通过 NuGet 分发,面向 .NET 开发者。Titanium.Cli 是独立的反向代理程序,支持 run、test、version、update 子命令,适合部署在服务器上。Titanium Inspector 是桌面 MITM 调试器,提供会话网格、请求检查器、AutoResponder、断点和 HAR 导出,面向安全测试和 API 调试。Titanium.Plus 是可选的高级功能包,包含控制平面、运维、可观测性和仪表盘,通过 titanium update --plus 激活。这种多形态设计意味着同一个引擎可以同时服务开发库、命令行运维和图形调试三种场景,但代价是每个形态都有各自的学习曲线。

显式、透明与 SOCKS:三种端点模式的实际差异

代理服务器的核心在于如何接收客户端流量。Titanium 支持三种端点:ExplicitProxyEndPoint 是显式代理,客户端必须手动配置代理地址;透明代理不需要客户端配置,但需要网络层配合;SOCKS4/5 端点为那些只支持 SOCKS 协议的工具提供入口。在代码里,显式端点通过 new ExplicitProxyEndPoint(IPAddress.Loopback, 8000, decryptSsl: true) 创建,decryptSsl 参数控制是否对 TLS 流量进行中间人解密。透明代理和 SOCKS 端点的具体配置方式在 README 中没有详细展开,但从 API 命名可以推断它们共用 AddEndPoint 方法。实际部署时,透明代理通常需要 iptables 或类似工具重定向流量,这超出了库本身的范围。

请求生命周期:BeforeRequest 与流式处理

代理的核心机制是事件驱动。README 中的示例展示了 BeforeRequest 事件,它在请求被转发到源站之前触发,允许你修改、重定向或阻止请求。事件参数 SessionEventArgsBase 提供了对请求和响应体的访问,并且支持流式处理。这意味着你可以边读取边转发,而不需要把整个请求体加载到内存。文档特别指出,请求和响应体在 HTTP/1.x、HTTP/2、HTTP/3 之间都有流式支持,这在高流量场景下能显著降低内存占用。但要注意,事件处理器是异步的,如果处理逻辑耗时过长,会阻塞整个代理会话。README 没有给出性能数字,但提到了内置日志系统使用有界通道和后台写入器,避免在会话线程上直接做 Console I/O。

HTTP/2 默认开启,HTTP/3 需要 MsQuic:协议支持的坑

Titanium 对现代协议的支持是有条件的。HTTP/2 默认开启,可以通过 ProxyServer.EnableHttp2 关闭。HTTP/3 则需要显式设置 ProxyServer.EnableHttp3 = true,并且要求 MsQuic 原生库。CLI 和 Inspector 的 Release 压缩包会按 RID 捆绑原生库,但如果你通过 NuGet 库嵌入,就需要自己处理 MsQuic 的部署。文档中提到了一个协议桥接矩阵,列出了每种客户端到源站方向的组合是否被支持。这个矩阵的存在本身就说明了一个事实:不是所有协议组合都能正常工作。例如,客户端通过 HTTP/3 连接,但源站只支持 HTTP/1.1,这种桥接是否可行需要查矩阵。如果你计划部署 HTTP/3,务必先确认你需要的方向在矩阵中。

性能声明:与 YARP 和 nginx 的对比,但别急着下结论

README 声称性能通常达到或超过 YARP,在 H2/H3 到 H1 的反向代理场景下领先 nginx,其他场景接近,但 nginx 在小型 keep-alive 连接上仍有优势。这个声明来自官方 wiki 的 Performance 页面,但 README 没有给出具体的测试方法、硬件环境或基准数据。作为参考,YARP 是微软的 .NET 反向代理库,nginx 是 C 语言编写的高性能服务器。Titanium 用 C# 实现,却能在部分场景超越 nginx,这听起来令人惊讶,但并非不可能,因为现代 .NET 的异步 I/O 和内存管理已经相当成熟。不过,任何性能对比都依赖于具体配置,比如 TLS 终止方式、连接池大小、日志级别。如果你要基于这个声明做技术选型,应该用你自己的流量跑一遍基准测试,而不是直接采信。

安装与配置:从 NuGet 到 CLI 的完整路径

安装方式因形态而异。作为库,使用 dotnet add package Titanium.Web.Proxy,需要 .NET 10 或更高版本。作为 CLI,Windows 用户可以用 winget install justcoding121.TitaniumCli,其他平台从 GitHub Releases 下载自包含压缩包,解压后运行 titanium run -c twp.yaml。配置文件 twp.yaml 是 YAML 格式,具体内容 README 没有展开,但 test 子命令可以用来验证配置。Plus 功能的启用方式是 titanium update --plus,然后在配置中设置 plus.enabled: true 和 plus.controlPlane.sharedSecret。Inspector 在 Windows 上通过 winget id justcoding121.TitaniumInspector 安装,启动后需要从 Capture 菜单开始拦截,安装根证书,然后切换系统代理。注意,信任生成的根证书会修改当前用户的证书存储,只应在你控制的机器上操作。

6.0 版本破坏性变更:Logging API 取代了 ExceptionFunc

升级到 6.0 需要留意一个破坏性变更:ProxyServer.ExceptionFunc 和 SessionEventArgsBase.TimeLine 被移除了,取而代之的是 ProxyServer.Logging 和 EnableRequestTimingCapture API。这意味着旧代码中通过 ExceptionFunc 处理异常、通过 TimeLine 获取时序信息的写法必须重写。新的 Logging 属性接受 ILoggerFactory,并且内置了控制台输出,使用有界通道和后台写入器,避免阻塞会话线程。这个变更说明项目在统一日志和诊断模型,但也意味着升级不是零成本的。如果你从 5.x 升级,需要先检查代码中是否使用了这两个旧 API。README 还提到了内置日志在禁用时零开销,但启用后会有性能影响,具体程度没有量化。

编辑结论

Titanium Web Proxy 适合两类人:一是需要在 .NET 应用里嵌入 MITM 或反向代理能力的开发团队,二是想要一个带图形界面调试器的安全测试人员。它不适合只想要一个超轻量转发代理的场景,因为完整功能依赖 .NET 10 运行时,且 HTTP/3 需要额外打包 MsQuic 原生库。采用前先验证三件事:确认你的目标平台在协议支持矩阵中的覆盖范围,特别是 HTTP/3 的客户端到源站方向;检查 6.0 版本移除的 ExceptionFunc 和 TimeLine API 是否影响你现有代码;在真实流量上测试证书池和连接池在高并发下的表现,因为 README 中的性能对比只覆盖了特定场景。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记