测试工程师良品 —— Fiddler 工具简介

前言

Fiddler 是目前最强大最好用的调试工具之一,它能记录全部客户端和服务器的http和https请求,设置 CGI 请求的断点,甚至修改输入输出数据。
fiddler 的工做原理,是它在 web server 和 web browser 之间搭了一层 proxy,全部的请求都会通过它,以下图所示:前端

bigsec

fiddler能够针对web端和移动端网络请求进行抓包分析,如何安装和实现抓包,以及如何在无数请求中运用强大的过滤机制进行精准定位,这里再也不进行介绍。fiddler除了进行以上经常使用功能以外,还能针对抓包过程和请求进行设置。如下将按照fiddler菜单和fiddler script分类介绍fiddler的一些功能。linux

一、Fiddler 菜单页面

除了对web端和移动端进行抓包以外,fiddler菜单还能够实现如下经常使用功能。web

  • 设置断点
  • Fiddler AutoResponder 请求地址重定向
  • fiddler限速

一、设置断点

断点能够分为request和response断点。request断点是打在request请求的时候,未到达服务器以前,response断点是打在服务器响应以后,在Fiddler将响应传回给客户端以前拦截。能够经过打断点,修改请求内容,达到须要的目的。算法

Fiddler能够修改如下请求:浏览器

  • Fiddler设置断点,能够修改HTTP请求头信息,如修改Cookie,User-Agent等
  • 能够修改请求数据,突破表单限制,提交任意数字,如充值最大100,能够修改为10000
  • 拦截响应数据,修改响应体,如修改服务端返回的页面数据

全局断点:这种方法会中断全部的会话服务器

  • 设置断点:Rules-> Automatic Breakpoint ->[type]
  • 清除断点:Rules-> Automatic Breakpoint ->Disabled

bigsec

单个断点网络

  • 请求前断点(before response): bpu
    在命令行中输入: bpu www.baidu.com
    清除断点:在命令行中输入bpu
  • 响应后断点(after requests): bpafter
    在命令行输入:bpafter www.baidu.com
    清除断点: 在命令行中输入bpafter

断点设置并成功拦截请求,能够在右侧分析区修改数据,并选择 run to continue 或者继续 break on response。session

bigsec

二、Fiddler AutoResponder 请求地址重定向

AutoResponder 是 Fiddler 比较重要且比较强大的功能之一。可用于拦截某一请求,并重定向到本地的资源,或者使用Fiddler的内置响应。可用于调试服务器端代码而无需修改服务器端的代码和配置,由于拦截和重定向后,实际上访问的是本地的文件或者获得的是Fiddler的内置响应。函数

如图所示,勾选按钮,并点击 Add Rule ,将 Rule Editor 第一行修改成线上档案位址,按下 Rule Editor 第二行右边的箭头,选择 Find a file ... ,选择要替换成的本机端档案,按下右边的 SAVE ,大功告成;将线上档案替换成另外一个线上档案,只需在 Rule Editor 第二行填入的是另外一线上档案位址。
如图:工具

bigsec

三、Fiddler 限速

web 前端研发过程当中,咱们都但愿在网速很慢的时候,用户首先看到的是渲染出的界面,而不是一片空白。那么这个时候,网络限速就能很方便在 localhost 针对相似的状况来作性能调试与优化。
经过 fiddler 来模拟限速,是由于 fiddler 原本就是个代理,它提供了客户端请求前和服务器响应前的回调接口,咱们能够在这些接口里面自定义一些逻辑。Fiddler 的模拟限速正是在客户端请求前来自定义限速的逻辑,此逻辑是经过延迟发送数据或接收的数据的时间来限制网络的下载速度和上传速度,从而达到限速的效果。

开启方法以下:Rules → Performances → Simulate Modem Speeds。勾选以后,会发现网速瞬间慢下来了不少。

bigsec

菜单栏能够直接开启限速,可是网络限速数值是多少,须要经过 fiddler script 进行查看和设置。

二、Fiddler script

在 web 前端开发的过程当中,大多数状况下,经过 fiddler 默认菜单的功能能够知足开发者的不少调试需求,然而当有更复杂的调试场景时,须要经过 Fiddler Script 实现。
Fiddler Script 的本质实际上是用 JScript.NET 语言写的一个脚本文件 CustomRules.js,语法相似于 C#, 经过修改 CustomRules.js 能够实现不少菜单栏不能直接实现的功能。

Fiddler script 能够实现的功能:

  • 设置限速数据
  • 修改http的Request或Response

打开脚本文件CustomRules.js有两种方法:
① CustomRules.js 位于 C:Documents and Settings[your user]My DocumentsFiddler2ScriptsCustomRules.js,打开文件便可
② 在 Fiddler 中打开 CustomRules.js 文件:启动Fiddler, 点击菜单 Rules->Customize Rules,弹出 Fiddler Script 编辑框,便可编辑文件

一、设置限速数据

打开fiddler script编辑框,找到以下代码:

if (m_SimulateModem) {
    // Delay sends by 500ms per KB uploaded.
     oSession["request-trickle-delay"] = "500"; 
     // Delay receives by 150ms per KB downloaded.
     oSession["response-trickle-delay"] = "150"; 
 }

“500”和“150”就是当前delay的时间,能够按照须要手动修改。
算法就是 1000/下载速度 = 须要delay的时间(毫秒),好比50kB/s 须要delay20毫秒来接收数据,因此根据你须要的网络速度来修改上述值。
【注】:存档以后,本来已经勾选的Simulate Modem Speeds 会被取消勾选,须要再到Rules → Performances → Simulate Modem Speeds 勾选,同时须要注意必定要禁用浏览器代理插件,以及修改完成后重启浏览器才能生效。

二、修改http的Request或Response

修改 Request 和 Response 要在 FiddlerScript 中的 OnBeforeRequest 和 OnBeforeResponse 函数中添加规则便可。OnBeforeRequest 函数是在每次请求以前调用,OnBeforeResponse 函数是在每次响应以前调用。

将请求转发到相同端口号的不一样服务器(修改请求的 Host)

if(oSession.HostnameIs("www.baidu.com")) {       
   oSession.hostname = "www.sina.com.cn"; 
}

这个例子是将发送到百度的请求转发到新浪,这里只是改变了host,并不改变后面的地址。以下面图片所示:

bigsec

除此以外,经过修改 fiddler script 文件内容,能够实现不少经过菜单栏没法实现的功能,包括修改 session 的样式,修改 http(s) 请求内容,还能够定制 rule 菜单的子菜单等,能够自行学习。
Fiddler 做为目前最好用的调试工具之一,功能很强大,这里仅作简单介绍,有兴趣的能够深刻学习。

三、与其余抓包软件的区别

与charles:

fiddler 有win和linux版本,linux版本须要在Mono环境中运行;charles 没有平台限制。Fiddler属于上游,在fiddler里面对http进行的一些修改直接会影响到Charles里面的请求结果。

与WinPcap:

Winpcap是一个Win32平台下用于抓包和分析的系统,包括一个内核级别的packet filter,一个底层的DLL(packet.dll)和一个高级的独立于系统的DLL(Wpcap.dll)。主要抓取底层通讯数据包,好比协议栈、数据流组装等,是底层环境能够直接操纵网络通讯的程序。它不依靠主机的诸如TCP/IP协议去收发数据包,这意味着它不能处理同一台主机中各程序之间的通讯数据。跟fiddler抓取的http(s)数据包有本质区别。

相关文章
相关标签/搜索