在日常开发中,我们经常需要监控和分析网络请求。虽然 Fiddler 和 Charles 等工具功能强大,但有时我们需要将抓包功能集成到自己的应用中。Titanium.Web.Proxy 就是一个强大的 .NET 库,它允许我们在自己的应用中实现完整的 HTTP/HTTPS 抓包功能。
本文将基于一个实际的 Windows Forms .net 8.0项目,展示如何使用 Titanium.Web.Proxy 构建一个功能完善的网络监控工具。
一、安装NuGet 包
Install-Package Titanium.Web.Proxy
二、代理服务器初始化
private void InitializeProxy()
{
proxyServer = new ProxyServer();
proxyServer.CertificateManager.CreateRootCertificate();
proxyServer.CertificateManager.TrustRootCertificateAsAdmin();
}
证书管理是 HTTPS 抓包的关键,Titanium.Web.Proxy 会自动处理证书的创建和信任,使我们可以解密 HTTPS 流量。证书安装一次后不会重复提示安装。(之前在用FiddlerCore的时候,每次启动应用都需要安装一次证书,所以找替代库,就找到了Titanium.Web.Proxy)
三、启动代理服务器
private async Task StartCapture()
{
try
{
// 验证端口号
if (!int.TryParse(txtPort.Text, out int port) || port < 1 || port > 65535)
{
MessageBox.Show("请输入有效的端口号 (1-65535)");
return;
}
// 创建代理端点
var explicitEndPoint = new ExplicitProxyEndPoint(IPAddress.Any, port, true);
if (proxyServer != null)
{
// 注册请求处理事件
proxyServer.BeforeRequest += OnRequest;
proxyServer.BeforeResponse += OnResponse;
// 启动代理
proxyServer.AddEndPoint(explicitEndPoint);
proxyServer.Start();
// 设置系统代理
proxyServer.SetAsSystemHttpProxy(explicitEndPoint);
proxyServer.SetAsSystemHttpsProxy(explicitEndPoint);
isCapturing = true;
LogManager.Log($"代理已启动,监听端口: {port}\r\n");
}
}
catch (Exception ex)
{
MessageBox.Show($"启动代理失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
四、逻辑处理
OnRequest这是抓包的核心功能,所有经过代理的请求都会触发这个事件。
private async Task OnRequest(object sender, SessionEventArgs e)
{
//这里我们经常需要过滤特定类型的请求
//
DataManager.HandleData(e.HttpClient.Request.Url);
}
private async Task OnRequest(object sender, SessionEventArgs e)
{
// 这里可以修改请求和响应
// 修改请求头
e.HttpClient.Request.Headers.Add("X-Custom-Header", "Value");
// 修改请求体
if (e.HttpClient.Request.Method == "POST")
{
var body = await e.GetRequestBody();
var modifiedBody = body.Replace("old", "new");
await e.SetRequestBody(modifiedBody);
}
}