当前位置: 首页 > ds >正文

.NET 开发者的“Fiddler”:Titanium.Web.Proxy 库的强大魅力

在日常开发中,我们经常需要监控和分析网络请求。虽然 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);}
}

http://www.xdnf.cn/news/20172.html

相关文章:

  • 虚拟化安全:从逃逸漏洞到实战分析
  • Python快速入门专业版(三):print 格式化输出:% 占位符、format 方法与 f-string(谁更高效?)
  • vue+elementUI 进行表格行内新增及校验,同行其他输入框数据影响当前输入框校验结果
  • 【ComfyUI】涂鸦 ControlNet 涂鸦参考引导生成
  • django全国小米su7的行情查询系统(代码+数据库+LW)
  • 论文介绍:Fast3R,更快的多视图 3D 重建的新范式
  • 计算机原理(一)
  • 4.5.8版本来了~山海鲸最新内容抢鲜看
  • 2025 全国大学生数学建模竞赛题目-B 题 碳化硅外延层厚度的确定 问题二完整思路
  • Coze插件AI复刻之:网页截图
  • 数据结构准备:包装类+泛型
  • 大语言模型推理的幕后英雄:深入解析Prompt Processing工作机制
  • 时序数据库IoTDB的六大实用场景盘点
  • 基于机器学习的缓存准入策略研究
  • 服务器异常磁盘写排查手册 · 已删除文件句柄篇
  • 安装与配置Jenkins(小白的”升级打怪“成长之路)
  • AI-Agent智能体提示词工程使用分析
  • leetcode212.单词搜索II
  • SQL优化与准确性提升:基于RAG框架的智能SQL生成技术解析
  • webrtc之高通滤波——HighPassFilter源码及原理分析
  • 正则表达式,字符串的搜索与替换
  • 【面试题】介绍一下BERT和GPT的训练方式区别?
  • Ansible 项目管理核心要点总结
  • 进程与线程详解, IPC通信与RPC通信对比,Linux前台与后台作业
  • Android入门到实战(八):从发现页到详情页——跳转、传值与RecyclerView多类型布局
  • 深度学习——ResNet 卷积神经网络
  • Python快速入门专业版(二):print 函数深度解析:不止于打印字符串(含10+实用案例)
  • Docker多阶段构建Maven项目
  • K8s资源管理:高效管控CPU与内存
  • React学习之路永无止境:下一步,去向何方?