Fiddler精准抓包指南:如何设置只捕获特定域名请求

一、为什么需要抓取特定域名请求?

在Web开发调试过程中,开发者常面临网络请求过载的问题。例如测试某个API接口时,浏览器或应用可能同时产生数十个请求,包括静态资源(CSS/JS)、第三方库(CDN)、广告追踪等无关流量。这些冗余请求会干扰核心问题的定位,增加分析时间。

通过限定抓取域名,开发者可以:

  1. 精准分析目标服务的网络行为
  2. 减少日志数据量,提升可读性
  3. 隔离测试环境与生产环境的流量
  4. 快速验证跨域请求是否成功

典型应用场景包括:调试微信小程序接口、验证支付系统回调、分析特定CDN的加速效果等。

二、方法一:使用Filters面板快速过滤

Fiddler内置的Filters面板提供了最便捷的域名过滤方式:

  1. 打开Fiddler,点击菜单栏 Rules > Customize Rules... 确保脚本已加载
  2. 在底部标签栏找到 Filters 标签(若未显示可通过 View > Show Filters 启用)
  3. 配置关键选项:
    • Hosts 下拉选择 Show only the following Hosts
    • 在输入框中输入目标域名(支持正则表达式)
      • 精确匹配:api.example.com
      • 泛域名匹配:*.example.com
      • 多域名组合:|api.example.com|cdn.example.com
  4. 勾选 Block connections not listed 可隐藏非目标域名请求
  5. 点击 Actions > Run Filterset Now 立即生效

注意事项

  • 过滤规则区分大小写
  • 修改后需点击应用按钮
  • 清除过滤可通过选择 No filter 实现

三、方法二:通过FiddlerScript深度定制

对于需要更复杂逻辑的场景,可通过修改FiddlerScript(位于 Rules > Customize Rules...)实现:

  1. static function OnBeforeRequest(oSession: Session) {
  2. // 定义需要捕获的域名列表
  3. var targetDomains = ["api.example.com", "auth.example.com"];
  4. var shouldCapture = false;
  5. // 检查请求域名是否在目标列表中
  6. for (var i = 0; i < targetDomains.length; i++) {
  7. if (oSession.host.toLowerCase() == targetDomains[i].toLowerCase()) {
  8. shouldCapture = true;
  9. break;
  10. }
  11. }
  12. // 不在目标列表的请求标记为忽略
  13. if (!shouldCapture) {
  14. oSession["ui-hide"] = "true"; // 隐藏请求
  15. // oSession.bBufferResponse = false; // 可选:不缓存响应
  16. }
  17. }

高级技巧

  1. 正则表达式匹配:
    1. var regex = new System.Text.RegularExpressions.Regex("^.*\.example\.com$");
    2. if (!regex.Test(oSession.host)) { ... }
  2. 组合条件过滤(如特定端口):
    1. if (!(oSession.host == "api.example.com:443" ||
    2. oSession.uriContains("/special-path"))) { ... }

四、方法三:结合AutoResponder实现精准捕获

当需要模拟特定域名响应时,可结合AutoResponder功能:

  1. Rules > Customize Rules... 中添加:
    1. static function OnBeforeResponse(oSession: Session) {
    2. if (oSession.host == "target.domain.com") {
    3. // 可在此修改响应内容
    4. oSession.utilDecodeResponse();
    5. var newBody = "Custom Response";
    6. oSession.utilSetResponseBody(newBody);
    7. }
    8. }
  2. 配合Filters使用,先通过域名过滤请求,再在响应阶段处理

五、验证与调试技巧

  1. 流量验证

    • 使用 curl -v http://目标域名 生成测试请求
    • 在浏览器开发者工具中强制刷新(Ctrl+F5)
    • 检查Fiddler左侧会话列表的Host列
  2. 常见问题解决

    • HTTPS抓取失败:确保已安装Fiddler根证书(Tools > Options > HTTPS)
    • 过滤不生效:检查是否同时启用了多个过滤规则
    • 隐藏请求仍显示:确认脚本中设置了 oSession["ui-hide"] = "true"
  3. 性能优化建议

    • 对高频域名(如CDN)使用正则表达式简化规则
    • 复杂场景建议使用脚本而非Filters面板
    • 定期清理捕获的会话(File > Remove All)

六、进阶应用场景

  1. 移动端调试

    • 在Android设备配置代理指向Fiddler所在IP
    • 使用 @target.domain.com 格式过滤移动应用请求
  2. API测试

    1. // 只捕获特定API路径
    2. if (oSession.uriContains("/api/v2/users") &&
    3. oSession.host == "api.example.com") {
    4. // 标记重要请求
    5. oSession["ui-color"] = "pink";
    6. }
  3. 安全分析

    • 过滤出所有包含 ?token= 的请求
    • 检测异常域名请求(如开发环境出现生产域名)

七、最佳实践总结

  1. 分层过滤策略

    • 第一层:Filters面板快速过滤
    • 第二层:脚本进行精细控制
    • 第三层:AutoResponder模拟特定响应
  2. 版本兼容性

    • Fiddler Classic(Windows)与Fiddler Everywhere(跨平台)配置方式略有不同
    • 最新版(v5.x)支持更强大的规则引擎
  3. 团队协作建议

    • 导出过滤规则(Rules > Export Rules)
    • 编写脚本注释说明过滤逻辑
    • 建立常用域名配置库

通过上述方法,开发者可以构建从简单到复杂的域名过滤体系,显著提升网络调试效率。实际使用时建议从Filters面板入门,逐步掌握脚本定制能力,最终形成适合自身项目的抓包方案。