Fiddler精准抓包指南:仅监控特定域名请求的完整配置流程

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

在Web开发调试过程中,开发者常面临以下痛点:

  1. 流量过载问题:当监控整个网络接口时,Fiddler会捕获浏览器、后台服务、系统更新等所有HTTP/HTTPS请求,导致会话列表被无关请求淹没。
  2. 隐私保护需求:在多人协作或公共环境调试时,过滤非目标域名请求可避免敏感数据泄露。
  3. 性能优化需求:针对特定域名的请求分析(如API调用耗时、资源加载顺序)需要精准的流量隔离。
  4. 移动端调试场景:通过代理抓取移动设备流量时,过滤无关域名可显著提升调试效率。

以电商网站开发为例,开发者可能只需关注api.example.com的接口请求,而忽略静态资源(如CDN域名)和第三方服务(如支付网关)的请求。

二、基础配置方法:使用Filters面板

1. 访问Filters配置界面

在Fiddler主界面点击菜单栏的Rules > Customize Rules,或直接通过快捷键Ctrl+R打开Fiddler Script编辑器。更快捷的方式是直接点击工具栏的Filters按钮(图标为漏斗形状)。

2. 核心过滤参数设置

在打开的Filters选项卡中,配置以下关键项:

  • Hosts下拉菜单选择Show only the following Hosts
  • 在输入框中输入目标域名,支持多种格式:

    1. # 精确匹配
    2. api.example.com
    3. # 通配符匹配(需启用正则表达式)
    4. ^.*\.example\.com$
    5. # 多域名配置(用分号分隔)
    6. api.example.com;cdn.example.com
  • 勾选Use RegEx选项可启用正则表达式匹配(适用于复杂域名规则)

3. 高级过滤选项

  • 进程过滤:通过Process下拉菜单限制特定进程的请求(如chrome.exe)
  • 响应类型过滤:在Response Type and Size区域可设置只显示特定Content-Type的响应
  • 断点设置:结合Breakpoints功能可对特定域名请求设置中断条件

4. 配置保存与共享

点击Actions > Save Filter Settings可将当前配置保存为.far文件,便于团队共享或后续复用。

三、进阶方案:使用FiddlerScript自定义过滤

1. 脚本编辑基础

通过Rules > Customize Rules打开Fiddler Script编辑器(默认文件为CustomRules.js),找到OnBeforeRequest方法,这是所有请求进入Fiddler时的入口点。

2. 基础域名过滤脚本

  1. static function OnBeforeRequest(oSession: Session) {
  2. // 定义需要过滤的域名白名单
  3. var whiteList = ["api.example.com", "cdn.example.com"];
  4. var host = oSession.uriHost;
  5. // 检查当前请求的host是否在白名单中
  6. var isAllowed = false;
  7. for (var i = 0; i < whiteList.length; i++) {
  8. if (host.toLowerCase() == whiteList[i].toLowerCase()) {
  9. isAllowed = true;
  10. break;
  11. }
  12. }
  13. // 如果不在白名单则隐藏请求
  14. if (!isAllowed) {
  15. oSession["ui-hide"] = "true";
  16. }
  17. }

3. 正则表达式增强版

  1. static function OnBeforeRequest(oSession: Session) {
  2. // 使用正则表达式匹配多个子域名
  3. var pattern = /^(api|cdn)\.example\.com$/i;
  4. if (!pattern.test(oSession.uriHost)) {
  5. oSession["ui-hide"] = "true";
  6. }
  7. }

4. 动态白名单实现

  1. // 定义可动态更新的白名单数组
  2. var domainWhitelist = [];
  3. // 添加白名单域名的函数
  4. function AddToWhitelist(domain) {
  5. if (domainWhitelist.indexOf(domain.toLowerCase()) == -1) {
  6. domainWhitelist.push(domain.toLowerCase());
  7. }
  8. }
  9. // 初始化白名单(可通过外部接口动态调用)
  10. AddToWhitelist("api.example.com");
  11. AddToWhitelist("auth.example.com");
  12. static function OnBeforeRequest(oSession: Session) {
  13. var isAllowed = domainWhitelist.some(function(domain) {
  14. return oSession.uriHost.toLowerCase().indexOf(domain) > -1;
  15. });
  16. if (!isAllowed) {
  17. oSession["ui-hide"] = "true";
  18. }
  19. }

四、特殊场景解决方案

1. HTTPS请求过滤

对于加密流量,需先完成以下配置:

  1. Tools > Options > HTTPS中勾选Decrypt HTTPS traffic
  2. 安装Fiddler根证书到设备信任存储
  3. 在过滤脚本中添加HTTPS协议检查:
    1. if (oSession.isHTTPS && !oSession.uriHost.contains("api.example.com")) {
    2. oSession["ui-hide"] = "true";
    3. }

2. 移动端代理过滤

  1. 配置移动设备代理指向Fiddler所在IP和端口(默认8888)
  2. 在Fiddler中设置Allow remote computers to connect
  3. 使用以下脚本过滤移动端特定域名:
    1. // 过滤来自移动设备的非目标域名请求
    2. if (oSession["X-ClientIP"] &&
    3. !oSession.uriHost.contains("api.example.com")) {
    4. oSession["ui-hide"] = "true";
    5. }

3. 命令行自动化过滤

通过Fiddler的/filter参数启动时自动应用过滤规则:

  1. fiddler.exe /filter:"Host contains 'api.example.com'"

或使用脚本文件:

  1. fiddler.exe /script:CustomFilter.js

五、验证与调试技巧

  1. 过滤效果验证

    • 在Filters面板勾选Highlight选项,符合条件的请求会高亮显示
    • 使用Ctrl+F在会话列表中搜索目标域名
  2. 性能监控

    • 通过Statistics选项卡查看过滤后请求的总体统计
    • 使用Timeline视图分析请求时间分布
  3. 常见问题排查

    • 过滤不生效:检查域名拼写、协议类型(HTTP/HTTPS)
    • 误过滤情况:在脚本中添加FiddlerObject.log(oSession.uriHost)输出调试信息
    • 证书问题:确保移动设备安装了Fiddler根证书

六、最佳实践建议

  1. 版本控制:将过滤脚本纳入项目版本管理,与代码同步更新
  2. 环境区分:为开发、测试、生产环境准备不同的过滤配置
  3. 文档记录:维护过滤规则说明文档,记录每个域名的过滤原因
  4. 性能考量:避免在脚本中执行复杂计算,防止影响Fiddler处理速度
  5. 安全审计:定期审查白名单域名,移除不再需要的过滤规则

通过以上配置方法,开发者可以精准控制Fiddler的抓包范围,大幅提升调试效率。实际项目中,建议结合Filters面板的快速配置和FiddlerScript的灵活扩展,根据不同调试场景选择最适合的过滤方案。