Fiddler学习记录

HTTP协议简介

HTTP是超文本传输协议,信息是明文传输的,而HTTPS是安全超文本传输协议,需要证书和提供安全连接,换句话说,HTTPS是嵌套了SSL加密的HTTP连接,其内容由SSL先加密,然后再传输。

简单来讲,HTTPS是加过密的HTTP。由于网络上传输的数据是加密的,用户在浏览网页时,除了用户自己可以看到当前在看什么网页,其他第三方是无法得知用户在做什么的。比如用户在网上登录或输入其他敏感信息进行传输时一旦使用HTTPS,那么数据传输就不是明文了,对于第三方来讲就无法获取你的敏感信息。

Fiddler简介

官网:https://www.telerik.com/fiddler

Fiddler是比较好用的web代理调试工具之一,它能记录并检查所有客户端与服务端的HTTP/HTTPS请求,能够设置断点,篡改及伪造Request/Response的数据,修改hosts,限制网速,http请求性能统计,简单并发,接口测试,辅助自动化测试,等等。现在抓包工具成为测试人员的必备使用工具,开发人员也在普遍使用,进行问题的定位分析,是非常有助于工作的一款工具。

Fiddler工作原理

先来看看fiddler未参与时,一个普通的客户端与服务端的请求流程图:浏览器访问一个网站:www.lotaai.com,浏览器给webserver发送一个Request,webserver接收到Request后进行处理,返回给浏览器Response,然后浏览器解析Response中的html,展现网页给用户。如图:

Fiddler工作位于七层中的应用层,在client和webserver之间以代理服务器的形式存在,启动fiddler后会监听本地127.0.0.1的8888端口(默认端口8888),IE/Chrome浏览器会自动设置局域网代理(Firefox代理是独立的,需要单独设置代理)。

设置代理后,fiddler就作为代理服务器,浏览器访问www.lotaai.com 的流程:浏览器给webserver发送一个Request,代理服务器fiddler接收到Request,fiddler将Request发送给webserver,webserver接收到Request后进行处理,Response到代理服务器fiddler,fiddler将Response返回到浏览器,如图:

 

 

配置Fiddler解密HTTPS流量

启用HTTPS流量解密

  1. tools > options >https
  2. 勾选capture HTTPS connects  > Decrypt HTTPS traffic

ignore server certificate errors(忽略服务器证书错误)

跳过特定主机的流量解密

  1. tools  > options  > https
  2. 输入跳过解密的主机名

跳过应用程序的流量解密

在OnBeforeRequest 函数* 中添加一个这样的规则

在Rules > Customize Rules 中:

if (oSession.HTTPMethodIs("CONNECT") && oSession["X-PROCESSINFO"] && oSession["X-PROCESSINFO"].StartsWith("outlook"))

    {

       oSession["x-no-decrypt"] = "boring process";

    }  

如图:

 

仅解密来自一个主机的流量

在OnBeforeRequest函数*中添加一个规则:

在Rules > Customize Rules 中:

if (oSession.HTTPMethodIs("CONNECT") &&

       !oSession.HostnameIs("SiteICareAbout.com"))

    {

       oSession["x-no-decrypt"] = "do not care.";

    }

如图:

Fiddler界面

Fiddler基本界面

参考网址:http://www.codeweblog.com/web调试工具fiddler教程/

Inspectors 下可以查看很多 Request和Response的消息,其中Raw 可以查看完整的消息,Headers 只查看消息中的Header。

Fiddler的HTTP统计视图

通过陈列出所有的HTTP通信量,fiddler可以很容易的展示文件生成了当前请求的页面。使用Statistics页签,用户可以通过选择多个会话来得到这几个会话的总信息统计,比如多个请求和传输的字节数。

选择第一个请求和最后一个请求,可获得整个页面加载所消耗的总体时间。从条形图表中还可以分别出哪些请求耗时最多,从而对页面的访问进行访问速度的优化

QuickExec命令行的使用

Fiddler的左下角有一个命令行工具,QuickExec,可以直接输入命令。

常见的命令有:

Help 打开官方的使用页面介绍,所有的命令都会列出来。

cls 清屏(ctrl+X也可以)

select 选择会话的命令

?.png 用来选择png后缀的图片

bpu 截获request

Fiddler中设置断点修改request

Fiddler最强大的功能莫过于设置断点,设置好断点后,可以修改httpRequest的任何信息包括host,cookie或者表单中的数据。设置断点有两种方法。

第一种:打开fiddler点击Rules > Automatic Breakpoint > Before Requests.(这种方法会中断所有的会话)

如何消除命令: 点击 Rules > Automatic Breakpoint > Disabled

 

第二种:在命令行中输入命令:bpu www.baidu.com (这种方法只会中断www.baidu.com)

如何消除命令: 在命令行中输入命令 bpu

 

案例:

模拟微信客服平台(http://wx.lotaai.com/user/login/index)登录页面,输入错误的用户名和密码,用fiddler中断会话,修改正确的用户密码,这样就能登录成功了。

 

  1. 用浏览器(Chrome)打开微信客服平台登录界面http://wx.lotaai.com/user/login/index
  2. 打开fiddler,在命令行中输入bpu http://wx.lotaai.com/user/login/index
  3. 输入错误的用户名和密码,点击登录
  4. Fiddler能中断这次会话,选择被中断的会话,点击Inspectors 下的WebForms 修改用户名和密码。然后点击Run to Completion
  5. 结果正确登录到微信客服平台。

Fiddler中设置断点修改response

第一种: 打开fiddler 点击 Rules > Automatic Breakpoint > After Response (这种方法只会中断所以的会话)

如何消除命令 : 点击 Rules >Automatic Breakpoint  > Disabled

 

第二种: 在命令行中输入命令 :bpafter www.baidu.com (这种方法只会中断www.baidu.com)

如何消除命令 : 命令行中输入命令: bpafter,

原理图:

Fiddler中创建Auto Responder规则

Fiddler的Auto Responder 允许从本地返回文件,而不用http request 发送到服务器上。

 

案例:

  1. 打开洛唐首页(www.lotaai.com),把洛唐的logo图片保存到本地,并且对图片做一些修改。
  2. 打开fiddler找到图片:http://wx.lotaai.com/resources/marketing-system/images/nav.jpg ,把这个会话拖到Auto Responder 下,
  3. 选择Enable rules 和Unmatched request passthrough
  4. 在下面的Rule Editor 下面选择Find a file… 选择本地保存的图片,最后点击save 保存下。
  5. 在用浏览器打开首页,会看到图片用的是本地的图片了。

Fiddler中如何过滤会话

每次使用fiddler,打开网站都能在fiddler中看到十几个会话,最好的办法就是过滤掉这些会话,比如过滤掉图片会话等。Fiddler中有过滤的功能,在右边filters 中。

需要将过滤器选项filters勾选上,在进行设置。

参考网址:https://www.cnblogs.com/zhaoyanjun/p/7068948.html

Use Filters

默认情况下页面是灰色的,代表不过滤任何请求,现在勾选Use Filters 。

Actions

当所有配置完成后,点击actions中的Run Filterset now  。就可以立即生效了。同时可以维护多套filters,在不同的情形下加载不同的filters,在Actions中可以把当前的filters保存起来,也可以加载以前保存的filter。

配置过滤请求的主机Hosts

No Zone filter :不做任何过滤。

Show only Intranet Hosts :只显示内部网络主机。

Show only Internet Hosts : 只显示互联网主机。

这里主机选择第一项,不做任何过滤。

 

在hosts第二个下拉框有几个选项

No Host filter :不做任何过滤

Hide the following Host :隐藏下面主机的包

Show only the following hosts :显示下面主机的包

Flag the following Hosts :标记下面主机的包

注:标记下面主机的包的意思是:

输入指定的过滤的主机,多个主机可以用 ;隔开

这就实现了对所有的 www.baidu.com和https://www.baidu.com的包的过滤。

 

如何正确的填写文本框的内容,可以在会话列表中hosts 列里面找到请求的Host。

 

但是也有看到请求知乎的网站  Host列显示很多Tunnel to 的字段,请求的URL:https://www.zhihu.com/

 

 

 

Client Process

设置了过滤的方式,过滤的主机,现在可以选择进程了。

选择自己需要的进程即可。

其他的两个一个是IE,一个是隐藏来自service host 的请求,这里不作处理。

 

根据request header的filter

Show only if URL contains 和 Hide if URL contains 使用方法类似 功能相反。都是url中包含某些字符的filter,多种情况空格分隔。支持正则表达式和完全匹配,如下是个例子,可以简单理解为隐藏所有js和css请求。

 

断点

fiddler 是有断点功能的,可以在请求发送时断住,之后修改请求,再发送。当然也可以在响应的时候断住,做修改。而且 fiddler 还可以模拟响应,根本不发送给server 端,在项目开发阶段,server 端没有准备好 API 这个就特别有用了,或者用了复现一些问题。

 

根据服务器响应吗类型过滤

这部分是根据响应类型和大小的filter,前一半是显示隐藏的filter,后一部分是 block 的filter。block的filter也挺有意思,如果你选中了block css那么浏览器就加载不到css了。

 

 

根据服务器响应的header 过滤

是对response header的flag和修改。比较有用的是如果你想知道哪些请求修改了cookie那么就可以选中第一个checkbox。

 

 

 

Fiddler中会话比较功能

选中2个会话,右键然后点击 Compare,就可以用WinDiff来比较两个会话的不同了(这里需要安装windiff)

 

 

Fiddler中提供的编码小工具

点击fiddler工具栏上的TextWizard,这个工具可以Encode和Decode string。

 

 

Fiddler中会话查询

用快捷键ctrl+F打开find Session 的对话框,输入关键字查询需要的会话。查询到的会话会用黄色显示。

 

 

Fiddler中保存会话

将会话保存,以后分析。保存会话步骤如下:

File > save > selected sessions

 

Fiddler的script系统

Fiddler最复杂的莫过于script系统了 官方的帮助文档:http://www.fiddler2.com/Fiddler/dev/ScriptSamples.asp

首先先安装SyntaxView插件,Inspectors > Get Syntaxview  > Download and Install SyntaxView… 如下图:

 

案例:

让洛唐技术网站的会话显示为红色。

需要将脚本放在OnBeforeRequest(oSession:Session)方法下,并且保存。

if (oSession.HostnameIs("www.cnblogs.com")) {            oSession["ui-color"] = "red";        }

如图:

 

弱网络环境模拟限速测试流程

Fiddler 是一个HTTP调试代理,它能够记录所有电脑与互联网之间的HTTP通讯,fiddler也可以让你检查所有的HTTP通讯,设置断点,以及修改所有的“进出”数据。(指coookie,html,js,css)

利用fiddler来模拟恶劣的网络环境,实现简单,较为直观,缺点是只能支持那些利用HTTP进行通信和交互的服务。

打开fiddler,默认情况下Rules -> Performances – >Simulate Modem Speeds是未勾选状态,网络正常。当选中此选项(模拟光猫网速)后,网速就会变得很慢,打开一个网页要加载很久。这样就实现了弱网效果。

若需要上传和下载网速的具体数值,可以使用一个工具speedtest。建议访问http://www.speedtest.cn/网站,测速生成结果很快且是中文的。支持手机客户端APP下载。

限速原理

Fiddler限速是以网络延迟的方式实现的,网络延迟时间*网速=传输字节数。

1、点击Rules ->Customize Rules(快捷键Ctrl+R),打开Fiddler ScriptEditor,或者直接点开右侧主页签的FiddlerScript。

2、打开该文件后,Ctrl+F 查找m_SimulateModem标志位,可以看到一下代码:

注释说明: request-trickle-delay中的值代表每KB的数据被上传时会被延时多少毫秒;response-trickle-delay则对应下载时每KB的数据会被延时多少毫秒。比如你要模拟上传速度100KBps的网络,那上传延迟就是1KB/100KBps=0.01s=100ms,就改成100。

3、当勾选了Simulate Modem Speeds时,request-trickle-delay 与 response-trickle-delay就会被设置,如果本身网速已经相当快的话,这里设置的值就可以近似地推算出开启模拟后的上传和下载带宽了,比如默认设置下上传延时为300ms下载延时为150ms,可以推算出大致的模拟带宽为:

上传带宽=(1 * 8/1000) /0.300 ≈ 0.027Mbps

下载带宽=(1 * 8/1000) /0.150 ≈ 0.053Mbps

由此可见:下载宽带是上传的两倍,也就是延时越小,宽带越大。宽带和这里的延时是成反比的。

调整网络环境参数

Fiddler 默认的 Simulate Modem Speeds速度实在太慢了,而这个限速的参数是可以调整的,如果需要再快一点可以修改配置文件Fiddler2ScriptsCustomRules.js。(如若修改勿忘备份原文件)在fiddler官网http://www.fiddlerbook.com/Fiddler/dev/ScriptSamples.asp可以找到参考示例。

下面提供两种简单的修改脚本的方法:

方法1:

 查找到if(m_SimulateModem)语句,修改代码。下面的脚本实现了一个随机延时量设置,使得网络宽带不是恒定为一个低速的值,而是会在一定范围内随机抖动:

static function randInt(min, max)  {

 return Math.round(Math.random()*(max-min)+min);

}

if (m_SimulateModem) {

// Delay sends by 300ms per KB uploaded.

oSession["request-trickle-delay"] = ""+randInt(1,50);

// Delay receives by 150ms per KB downloaded.

oSession["response-trickle-delay"] = ""+randInt(1,50);}

 

   方法2:

     点击fiddlerScript在代码里找到onBeforeRequest,这里定义了在发送请求前做什么。加入如下代码可以实现延迟:

oSession["request-trickle-delay"]="3000"; //请求阶段延迟3秒oSession["response-trickle-delay"]="3000"; //响应阶段延迟3秒

上面两种方法选其一,修改后保存配置文件(Ctrl+S)或者清掉缓存(Rules –> Performances –>Disable Caching),再次勾选Rules –> Performances –> Simulate Modem Speeds 进行测速。注意:每次编辑并保存配置文件后,Simulate Modem Speeds选项会被取消,请重新勾选。

限速完毕一定要取消勾选,不然会影响上网。像第二种方法由于请求和响应都延迟3秒,会导致访问网页很慢。

 

 

接口测试数据保留

抓包重新问题时,可以将接口保存下来,重新点一下Execute即可调用。(根据实际情况修改请求数据),如下:

点击Execute,在会话列表中会新产生一条请求:

 

修改电脑系统hosts

使用绑定hosts在本地开发调试的场景越来越多,当预发环境和生产环境共用同一个域名时,通过绑定hosts的方式将访问的域名原本指向生产服务器,强制指向预发服务器上。例如将www.baidu.com指向 www.lotaai.com对应的服务器上,www.lotaai.com对应的服务器公网ip:120.76.85.232,配置如下:Tools - > Hosts –> 勾选Enable remapping of requests for one host to a different host or IP ,overriding DNS 。然后host编辑区域,输入需要域名 需要指向的服务器公网IP,比如将www.baidu.com域名指向了120.76.85.232,保存即可。(不使用host,勾去掉即可)

 

此时,电脑浏览器访问www.baidu.com ,结果打开的内容是120.76.85.232的内容。

例如:

 

同时抓包结果如下:

 

简单并发测试

在测试中,这样的场景也非常多,比如被测平台可以有多种货币,有可能从一种货币可以直接兑换成另一种平台货币,在兑换的时候,要多关注下两点安全:数据篡改及并发情况,数据篡改要测试扣减A货币时,篡改金额为负值或金额变少,那么兑换到B货币的数据校验,这个有点类似支付拿少的钱买多的东西,这里就不过多描述了。另外,并发情况,再比如经常会有一些活动相关的测试,假如抽奖活动,一般都有限制一个人一天只能抽一次,那么抽奖的时候同一个用户并发,会不会领取多次奖励。当然最好还是要有正规的压测,或者在测试中可以借助fiddler做一个简单的并发测试,都是很有必要的。

一个人一天只能有一次抽奖机会,那么在点击抽奖按钮发出请求之前,要设置Before Requests Breakpoints,点击抽奖后在会话列表中会看到一个被断点的请求,此时鼠标选中此请求,按shift+u,会弹出并发次数的设置,如下,设置并发次数5次(下面演示截图是发布帖子并发时的截图,可参考)

点击OK,次数会话列表就多出5个请求,如下:

此时,点击工具栏“GO”,六个请求同时发到对应的服务端,即可形成6个并发请求,再看看发表帖子的情况如下:

 

显示出服务器IP方法

Fiddler默认配置中是看不到服务器IP的,接下来简单介绍下在fiddler上也能够看到请求的服务器IP:

1、fiddler - > Rules - > Customize Rules ,

2、在CustomRules.js里搜索找到 :static function Main() ,

3、添加如下一行脚本:

FiddlerObject.UI.lvSessions.AddBoundColumn("Server IP", 120, "X-HostIP");

 

完整js代码如下:

static function Main() {  

var today: Date = new Date();  

FiddlerObject.StatusText = " CustomRules.js was loaded at: " + today;  

// Uncomment to add a "Server" column containing the response "Server" header, if present  

FiddlerObject.UI.lvSessions.AddBoundColumn("Server IP", 120, "X-HostIP");  

}

 

添加完成后,重启fiddler,就可以显示请求的服务器IP。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值