2018-04-20 Fiddler

目录结构:

1、Fiddler的基本界面

2、Fiddler的HTTP统计视图

3、QuickExec命令行的使用

4、设置代理

5、模拟设置断点

6、模拟弱网环境

7、修改request的header和body

8、修改response的数据(一)

9、修改Response数据(二)

10、打断点修改Response

10、修改Response(二)

11、打断点修改Request

12、本地文件替换服务器文件

13、修改host地址

14、如何知道HTTP请求是POST方法还是GET方法

15、获取HTTPS协议(上)

16、Fiddler抓取HTTPS(下)

17、Fiddler模拟POST请求

18、Fiddler模拟get请求

19、通过命令对特定的请求设置断点

20、AutoResponder功能使用的小技巧

21、Composer功能使用的小技巧

22、 Fiddler中如何过滤会话

23、Fiddler中提供的编码小工具TextWizard

24、深入研究AutoResponder

25、深入研究Composer

26、Fiddler中保存会话

27、参考:雨水的早晨的博客、小坦克

1、Fiddler的基本界面

图片.png

Inspectors tab下有很多查看Request或者Response的消息。 其中Raw Tab可以查看完整的消息,Headers tab 只查看消息中的header. 如下图:


图片.png

2、Fiddler的HTTP统计视图

通过陈列出所有的HTTP通信量,Fiddler可以很容易的向您展示哪些文件生成了您当前请求的页面。使用Statistics页签,用户可以通过选择多个会话来得来这几个会话的总的信息统计,比如多个请求和传输的字节数。
选择第一个请求和最后一个请求,可获得整个页面加载所消耗的总体时间。从条形图表中还可以分别出哪些请求耗时最多,从而对页面的访问进行访问速度优化:


图片.png

3、QuickExec命令行的使用

Fiddler的左下角有一个命令行工具叫做QuickExec,允许你直接输入命令。
常见得命令有:

  • help 打开官方的使用页面介绍,所有的命令都会列出来;
  • cls 清屏 (Ctrl+x 也可以清屏);
  • select 选择会话的命令;
  • ?.png 用来选择png后缀的图片;
  • bpu 截获request;


    图片.png

4、设置代理

图片.png

过滤hostname:
在抓包的时候,经常时过来的请求有很多,密密麻麻的都是,我们需要在里面去挑选自己关注的请求,Fiddler有一个过滤的功能可以帮助我们,很轻松的过滤出到我们想要的请求接口:
(1)打开fiddler,找到Filters选项并点击打开:

图片.png

(2)打开后,我们选择启用。Use Filters 在这个选项上打勾;
(3)打开后我们可以看到下面的Host模式,我们选择Show the following Hosts。表示我们只在Fiddler上显示以下域名的数据请求;
(4)然后我们再Hosts文本区域,输入我们需要显示的域名,用分号分割多个域名;
(5)填好我们的域名后,我们点击Actions选项并选择Run Filterset Now.现在就已经设置好了;
(6)以后抓包的时候,就之后显示知己所关心的接口了:
图片.png

5、模拟设置断点

在项目的实践过程中,经常遇到一个点击事件,触发两个并行的请求,比如A、B两个请求,哪个请求响应的比较快,则展示谁的数据。
在测试的时候,我们要测试三个场景:


图片.png

如果完全依赖真实的网络,很难能够模拟去上述的场景,因为我们无法控制哪一个响应先返回,会很被动。
Fiddler有模拟断点的功能来帮助我们:
(1)打开Fiddler,Rules->Automatic Breakpoints ->点击 Before Requests :


图片.png

(2)这样所有的请求在发送请求之前就被阻止了,如下图所示,两个并行的请求A(21)、B(22)都被阻止了:
图片.png

(3)要模拟测试用例的场景test1,需要让A(21)响应请求,则需要将A(21)的阻止打开;

(4)双击A(21)的请求,在右下角点击绿色的Run to Completion :


图片.png

(5)之后A(21)的请求继续自己的请求,返回200,请求成功,而B(22)的请求还在阻止:
图片.png

(6)这样就可以很轻松的模拟,其他的测试用例场景了。

6、模拟弱网环境

图片.png

打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds :

图片.png

Fiddler弱网的原理:
我们还需要搞明白,Fiddler模拟网路速度的原理。
(1)Rules—>Cutomize Rules:
图片.png

(2)打开CustomRules.js 文档
可以下载Fiddler2 ScriptEditor,这样代码看起来比较清晰。
下载地址:http://www.telerik.com/fiddler,可以在官网中搜索下载
图片.png

(3)在文件中搜索关键字,m_SimulateModem:

         if (m_SimulateModem) {
                    // Delay sends by 300ms per KB uploaded.
                    oSession["request-trickle-delay"] = "300"; 
                    // Delay receives by 150ms per KB downloaded.
                    oSession["response-trickle-delay"] = "150"; 
            }
  • 首先来判断m_SimulateModem是否为true,也就是是否设置了弱网模式。
  • 如果为弱网模式。则分析代码
  • oSession[“request-trickle-delay”] = “300”; 注释的也很明白,Delay sends by 300ms per KB uploaded.上传1KB需要300ms,转化一下上传速度:1Kb/0.3s = 10/3(KB/s)
  • 如果你想设置上传的速度为50KB/s,你则需要设置Delay 时间为 20ms
  • 同样的方法,也可以限制上传的速度,调整oSession[“response-trickle-delay”]即可。

7、修改request的header和body

修改session显示样式:
有时候需要将自己关注的接口标注为特殊的颜色,方便自己的查找。进行如下设置:
修改session的显示样式(颜色等)

 oSession["ui-color"] = "red";

修改request的header和body:
(1)修改header:
因为项目中需要模拟新加坡的移动用户,虽然网络进行了翻墙,但是后台获得的ip依然是我的本地郑州IP,所以需要在header中添加X-Forwarded-For参数,ip指定为新加坡的ip,这是需求之一。
(2)修改body:
另外一个需求是,手机同时也需要模拟新加坡的语言环境,新加坡的语言环境:language = en ,country = SG ,但是测试手机只可以模拟 language = en ,country = US 。所以需要修改body中的US为SG。
明白了需求,接下来就可以大刀阔斧的写代码了……
在 OnBeforeRequest(oSession: Session) 中添加以下的代码:

if (oSession.uriContains("flow/intercept")) {
            oSession["ui-color"] = "orange";
           // 添加一个参数,新加坡ip
           oSession.oRequest.headers.Add("X-Forwarded-For", "203.161.32.141");
           oSession.utilReplaceInRequest("US", "SG");         
   }
图片.png
  • 首先需要先定位到该接口,判断oSession的uri中是否包含关键字【flow/intercept】(请求的接口地址);
  • oSession[“ui-color”] = “red”;设置为该接口为红色,方便查看;
  • oSession.oRequest.headers.Add(“X-Forwarded-For”, “203.161.32.141”); 往header中添加参数;
  • oSession.utilReplaceInRequest(“US”, “SG”); 将body中的US 替换成 SG;

让我们来看一下,修改之前的header和body数据:

  • 修改之前的header,没有X-Forwarded-For参数 :


    图片.png
  • 修改之前的body,country:US


    图片.png

接下来,让我们看看,修改之后的header和body数据:

  • 对应的接口,为orange,众多请求中,一眼就看见了:


    图片.png
  • 查看header中的参数,新增了X-Forwarded-For参数 :


    图片.png
  • 查看body中的参数,country=SG:


    图片.png
  • 修改成功

8、修改response的数据(一)

在项目中也经常也会碰到根据接口返回的数据不同而展示不同的效果。如果单个单个去真实的造数据会比较麻烦,况且有时候造数据也是一件很麻烦甚至无从下手的事情。
Fiddler可以修改response的数据,可以很轻松方便的解决我们造数据的苦恼。
修改response的数据:
需求是:会为返回的JSON中修改一个字段的数据,将click_url的值变更一下。
基本流程如下图所示:

图片.png

在 OnBeforeResponse(oSession: Session) 中添加以下的代码:

static function OnBeforeResponse(oSession: Session) {

    //将美国的fixfor的clickurl替换成这个新加坡请求的clickurl
    if (oSession.uriContains("flow/intercept")){
        oSession["ui-color"] = "red";
        var newclickurl: String = "http://pixel.admobclick.com/v1/click";
        // 获取Response Body中JSON字符串
        var responseStringOriginal =  oSession.GetResponseBodyAsString();
        // 转换为可编辑的JSONObject变量
        var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
        // 修改JSONObject变量,修改字段数据
        responseJSON.JSONObject["click_url"] = newclickurl;
         // 重新设置Response Body
        var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
        oSession.utilSetResponseBody(responseStringDestinal);

     }
}

代码调整之后,一定要重启Fiddler重新加载CustomRules.js。

如何解决Fiddler 修改返回内容 OnBeforeResponse 无效的问题?
问题关键点是:必须在OnBeforeResponse前,设置oSession.bBufferResponse = true;
顾名思义,开启了缓存模式来处理返回内容,才能最终反馈到浏览器上,否则,保持原有的流式模式的话,就会出现修改和返回同时进行,浏览器得到的还是原版的数据。
建议在OnPeekAtResponseHeaders中根据需要,设置bBufferResponse 。
添加的代码如下:

static function OnPeekAtResponseHeaders(oSession: Session) {
    if (oSession.uriContains("flow/intercept")){
        oSession.bBufferResponse = true;    //需要在返回头这里设置buffer处理,否则,后续无法在onBeforeResponse中修改body(修改的动作不会阻塞原来的返回)
    }
}

9、修改Response数据(二)

有时候也会需要给response的返回内容中添加数据,它的原理和基本流程和步骤5修改数据的一样:

static function OnBeforeResponse(oSession: Session) {
    if (oSession.uriContains("ads/sdk/v4")){
        oSession["ui-color"] = "red";
        var tester1 = "{ \"name\" : \"zwf\" , \"age\" : \" 26 \" }"; 
        var tester2 = "{ \"name\" : \"zch\" , \"age\" : \" 24 \" }";
        var testerList = "["+tester1 +"," + tester2 +"]";
        var responseStringOriginal =  oSession.GetResponseBodyAsString();
        //以alter的方式弹个对话框提示json字符串内容,可以方便用来调试
        //  FiddlerObject.alert(responseStringOriginal);
        //转换成JSON之后,数据的读取就设计到json的相关知识点了,这里就不做介绍了
        var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
        responseJSON.JSONObject[0]["key"] = "zwfGood";
        responseJSON.JSONObject[0]["testerList"] = Fiddler.WebFormats.JSON.JsonDecode(testerList).JSONObject ;
        var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
        oSession.utilSetResponseBody(responseStringDestinal);
    } 
}

修改之前的json数据:


图片.png

修改之后的json数据:


图片.png

10、打断点修改Response

若是修改响应的数据,应该在after response 打断点,故打断点的步骤是,Rules->Automatic Breakpoints -> After Responses :


图片.png

如下图所示,请求被阻止:


图片.png

右下角的页签,切换到Transformer :
图片.png

做如下的操作:

  • 取消 Chunked Transfer-Encoding 的选择,该项默认是被选中的。
  • HTTP Compression 选择 None
    意思是:为了提高性能,响应体是有被压缩或者采用chunked(块)的方式传输,但是如果你要修改响应体,则希望是不压缩不编码。
    如下图所示,这是默认的选项:


    图片.png

    切换到Raw选项,如下图所示:


    图片.png

    如果取消了Chunked Transfer-Encoding,选择了None,查看Raw :
    图片.png

    接着我们的打断点修改Response,修改响应体当然也就是修改Raw的内容了,切换到Raw,就可以修改内容了:
    图片.png

    修改之后,点击 Run to Completion ,接口响应200 ,数据修改成功:


    图片.png

    这种方式是不是更简单一点呢,不用去view代码,但是如果要多次执行时,每一次操作都要这样修改,比较繁琐,而且很容易造成错误。
    两种方法都可以,没有哪个好哪个不好,选择适合自己的就很好!

10、修改Response(二)

在测试的过程中,有的需求是这样的,它需要你修改接口返回的数据,从而检查在客户端手机app内是否显示正确,这也算是一种接口容错测试,接口容错测试属于app性能(专项)测试的其中一种。
通过Fiddler我们可以有好几种方法修改返回结果:

  • 第一种:在Fiddler底部的黑色命令行显示区域通过bpu url的形式按回车之后进行拦截,通过手机app访问指定接口,拦截到后可以选择response文件后通过拦截;
  • 第二种:在AutoRespnder里Add Rule,然后在Rule Editor里设置response的内容;
  • 第三种:在Rules设置中选择Automatic Breakpoints中的After Responses进行拦截。
    第一种不能自定义创建response,只能通过选择文件的形式来指定response。第三种对所有请求进行拦截,太粗太泛。所以实际测试拦截请求中,最灵活、功能最强的是第二种。

以下是第二种拦截方法抓改发包的全过程:
(1)抓包,找到要拦截的请求,然后在AutoResponder中Add Rule:

图片.png

(2)在Rule Editor中的第二栏选择“Create New Response...”:
图片.png

(3)点击Save,会弹出一个窗口,在弹窗中选择Raw栏,将抓包抓到的请求对应的Raw栏内容复制粘贴进去,然后将其中想要修改的部分进行修改,然后点击“Save”进行保存:
图片.png

之后就可以对请求进行自动拦截并修改返回体了。
(4)如果想要频繁修改替换返回体中某些内容,可以在AutoResponder里相应待拦截请求上点击右键,“Edit Response”编辑返回体:
图片.png

如果还想再方便一点,可以在AutoResponder里相应待拦截请求上点击右键,“Generate File”将response body保存到本地txt文件,然后打开txt文件修改保存即可生效。
但是注意,如果通过文件的方式保存response内容,可能会出现编码问题导致的客户端处理出错。最建议的方式,不会出错的方式,还是通过“Create New Response...”的方法:
参考:https://blog.csdn.net/lixincherry0423lx/article/details/77931031

11、打断点修改Request

其实打断点修改Request的方法和修改Response的方法一致,只不过有以下几点不同:

  • 打断点的方式:
    打断点的方式不一样,Rules->Automatic Breakpoints -> Before Requests
  • 修改的位置:
    response 是在右下角的Raw的页签中,Request 是在右上角的Raw中:


    图片.png

12、本地文件替换服务器文件

从本质上讲,替换了服务器文件也可以理解为修改了response的响应体。
替换文件:
需求:用一个本地的文件替换一个接口的返回数据。
步骤:

  • 首先应该知道该结果返回的数据内容及格式。选择接口,右键,save -> response -> response Body ,保存(例如:A.txt)了响应体:


    图片.png
  • 文件用Notepad++ 打开,注意一下两点,length:1620 ,UTF-8格式 :


    图片.png
  • 搞明白上面的两点,需要对比通过save->selected Sessions ->as Text方式保存的文档,(例如:B.txt) :


    图片.png
  • 保存之后,同样用notePad++打开,如下图所示,同样也留意标红的地方:1、内容的字符集,UTF-8,2、内容的长度1620,是不是明白了什么呢? 是的,响应体的字符集为UTF-8,字符的长度就是response body 中内容的长度:


    图片.png

    知道了数据内容之后,要具体的操作本地文件替换服务器文件了。

  • 选择接口,在右上角选择AutoResponder页签,勾选Enable rules、Unmatched requests passthrough 两个选项,点击Add rule 按钮,在下方填写替换的规则:
    (1)第一行填写要替换的接口地址,可以写正则表达式进行模糊匹配,也可直接写接口的地址进行完全匹配;
    (2)第二行填写要替换的本地文件的地址(A.txt),当然点击下拉框,也有其他的选项供我们选择, 比如404,502等等status code;
    编辑好之后,点击保存即可。这样下次再捕捉到该接口时,请求回来的数据就是本地文件中的内容了。


    图片.png

修改内容:

  • 这个时候,若想修改返回的数据内容,修改本地文件A.txt就可以了。
    现在A.txt中修改响应体的数据,如图把title 变成了 “title”:”2017 | Happy new year”,修改之后长度变成了1611


    图片.png
  • 重新请求接口,让我们来看一下效果,看看title是否变了,ok ,2017 | Happy new year :


    图片.png
  • 我们看一下响应的头部信息,content-length:1611,自动获得了响应体的长度:


    图片.png

13、修改host地址

具体的操作实践步骤如下:

  • 首先来打开编辑CustomRules.js文档:


    图片.png
  • 搜索关键字,OnBeforeRequest,找到该函数 :


    图片.png
  • 在该函数中添加如下代码:
if (oSession.host.toLowerCase()== 'dispatcher.360in.com')
    {
        oSession.host='dispatchertest.camera360.com';
        oSession["ui-color"] = "orange";
    }

toLowerCase() 是将host地址的字符串都转换中小写的,当然这个也可以转换成大写的toUpperCase,或者不用转换直接进行比较,这个就要看地址A的情况了。根据不同的情况选择不一样的host处理方式。
需要过滤没有捕捉到的请求,如果host转换之后的字符串和给定的地址A一致,则将host变换成地址B,否则不做任何的操作。
为了方便查改host的修改情况,还特意将该接口的颜色标志位orange

  • 保存文件,重启Fiddler,产生请求,host的地址是不是变了呢?
    修改之前的地址:


    图片.png

    修改之后的地址:


    图片.png

14、如何知道HTTP请求是POST方法还是GET方法

  • 双击HTTP请求,在右侧切换到Inspectors->Raw,如下图所示:


    图片.png
  • 在第一行可以很清楚的看到POST,标明这个HTTP请求是POST方法;
  • 之后跟着HTTP请求的地址;
  • 下面展示的是请求的headers信息,以及发送的参数信息;

接下来我们来对比一个GET方法,看一看两者有什么不同:

  • 同样的步骤,GET方法如下图所示:


    图片.png
  • 同样在第一个行可以看出是GET方法;
  • 之后是HTTP请求的地址,大家发现这个地址很长,?之后还带有很多参数;
  • 下面只展示了请求的headers信息,没有参数信息;
  • 参数信息去哪里了呢? 都直接附加在url地址上了

15、获取HTTPS协议(上)

(1)浅谈HTTPS

我们都知道HTTP并非是安全传输,在HTTPS基础上使用SSL协议进行加密构成的HTTPS协议是相对安全的。目前越来越多的企业选择使用HTTPS协议与用户进行通信,如百度、谷歌等。HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。网上有诸多资料,有些写得过于晦涩难懂,尤其是需要密码学的一些知识。我做了一下简单的整理,刨除复杂的底层实现,单从理解SSL协议的角度宏观上认识一下HTTPS。一言以弊之,HTTPS是通过一次非对称加密算法(如RSA算法)进行了协商密钥的生成与交换,然后在后续通信过程中就使用协商密钥进行对称加密通信。HTTPS协议传输的原理和过程简图如下所示:


图片.png

HTTPS协议传输原理
一共有8个步骤,我们针对每一步,具体看看发生了什么事:



    第一步,客户端发起明文请求:将自己支持的一套加密规则、以及一个随机数(Random_C)发送给服务器。
    第二步,服务器初步响应:服务器根据自己支持的加密规则,从客户端发来的请求中选出一组加密算法与HASH算法,生成随机数,并将自己的身份信息以证书(CA)的形式发回给浏览器。CA证书里面包含了服务器地址,加密公钥,以及证书的颁发机构等信息。这时服务器给客户端的包括选择使用的加密规则、CA证书、一个随机数(Random_S)。
    第三步,客户端接到服务器的初步响应后做四件事情:

    (1)证书校验: 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等)。
    (2)生成密码:浏览器会生成一串随机数的密码(Pre_master),并用CA证书里的公钥加密(enc_pre_master),用于传给服务器。
    (3)计算协商密钥: 此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数 Random_C 和 Random_S
    与自己计算产生的 Pre-master,计算得到协商密钥enc_key。
    enc_key=Fuc(random_C, random_S, Pre-Master) (4)生成握手信息:使用约定好的HASH计算握手消息,并使用协商密钥enc_key及约定好的算法对消息进行加密。

    第四步,客户端将第三步产生的数据发给服务器: 这里要发送的数据有三条:

    (1)用公钥加密过的服务器随机数密码enc_pre_master
    (2)客户端发给服务器的通知,”以后我们都要用约定好的算法和协商密钥进行通信的哦”。 (3)客户端加密生成的握手信息。

    第五步,服务器接收客户端发来的数据要做以下四件事情:
    (1)私钥解密:使用自己的私钥从接收到的enc_pre_master中解密取出密码Pre_master。
    (2)计算协商密钥:此时服务器已经获取全部的计算协商密钥需要的信息:两个明文随机数 Random_C 和 Random_S
    与Pre-master,计算得到协商密钥enc_key。
    (3)解密握手消息:使用协商密钥enc_key解密客户端发来的握手消息,并验证HASH是否与客户端发来的一致。

    第六步,服务器将第五步产生的数据发给客户端:
    这里要发的数据有两条:
    (1)服务器发给客户端的通知,”听你的,以后我们就用约定好的算法和协商密钥进行通信哦“。
    (2)服务器加密生成的握手信息。
    第七步,客户端拿到握手信息解密,握手结束。

    第八步,正常加密通信
    握手成功之后,所有的通信数据将由之前协商密钥enc_key及约定好的算法进行加密解密。

这里客户端与服务器互相发送加密的握手消息并验证,目的是为了保证双方都获得了一致的密码,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:非对称加密算法:RSA,DSA/DSS对称加密算法:AES,RC4,3DESHASH算法:MD5,SHA1,SHA256其中非对称加密算法用于在握手过程中加密生成的密码,对称加密算法用于对真正传输的数据进行加密,而HASH算法用于验证数据的完整性。由于浏览器生成的密码是整个数据加密的关键,因此在传输的时候使用了非对称加密算法对其加密。非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输,而服务器的私钥用于对数据进行解密,所以服务器都会非常小心的保管自己的私钥,防止泄漏。

(2)Fiddler抓取HTTPS协议原理

我们都知道,Fiddler是个很好的代理工具,可抓取协议请求用于调试。关于Fiddler抓取HTTP协议的原理和配置比较简单,对Fiddler和客户端稍作配置,便能使得Fiddler轻易地获取HTTP请求。但是由于HTTPS协议的特殊性,要进一步地配置Fiddler,我们首先要了解一下fiddler抓取HTTPS协议的原理才能更好地理解如何对fiddler进行配置。Fiddler本身就是一个协议代理工具,在上一节HTTPS原理图上,客户端与服务器端进行通信的过程全部都由Fiddler获取到,也就是如下图所示:


图片.png

Fiddler抓取HTTPS协议原理图
我们看到Fiddler抓取HTTPS协议主要由以下几步进行:

第一步,Fiddler截获客户端发送给服务器的HTTPS请求,Fiddler伪装成客户端向服务器发送请求进行握手 。
第二步,服务器发回相应,Fiddler获取到服务器的CA证书, 用根证书公钥进行解密, 验证服务器数据签名,
获取到服务器CA证书公钥。然后Fiddler伪造自己的CA证书, 冒充服务器证书传递给客户端浏览器。
第三步,与普通过程中客户端的操作相同,客户端根据返回的数据进行证书校验、生成密码Pre_master、用Fiddler伪造的证书公钥加密,并生成HTTPS通信用的对称密钥enc_key。
第四步,客户端将重要信息传递给服务器, 又被Fiddler截获。Fiddler将截获的密文用自己伪造证书的私钥解开,
获得并计算得到HTTPS通信用的对称密钥enc_key。Fiddler将对称密钥用服务器证书公钥加密传递给服务器。
第五步,与普通过程中服务器端的操作相同,服务器用私钥解开后建立信任,然后再发送加密的握手消息给客户端。
第六步,Fiddler截获服务器发送的密文, 用对称密钥解开, 再用自己伪造证书的私钥加密传给客户端。
第七步,客户端拿到加密信息后,用公钥解开,验证HASH。握手过程正式完成,客户端与服务器端就这样建立了”信任“。

在之后的正常加密通信过程中,Fiddler如何在服务器与客户端之间充当第三者呢?
服务器—>客户端:Fiddler接收到服务器发送的密文, 用对称密钥解开, 获得服务器发送的明文。再次加密, 发送给客户端。
客户端—>服务端:客户端用对称密钥加密,被Fiddler截获后,解密获得明文。再次加密,发送给服务器端。由于Fiddler一直拥有通信用对称密钥enc_key, 所以在整个HTTPS通信过程中信息对其透明。
从上面可以看到,Fiddler抓取HTTPS协议成功的关键是 根证书 (具体是什么,可Google),这是一个信任链的起点,这也是Fiddler伪造的CA证书能够获得客户端和服务器端信任的关键。
接下来我们就来看如果设置让Fiddler抓取HTTPS协议。

16、Fiddler抓取HTTPS(下)

Fiddler抓取HTTPS设置
注意以下操作的前提是,手机已经能够连上Fiddler,这部分的配置过程简单就不赘述了,可参考:手机如何连接Fiddler 。
如何继续配置让Fiddler抓取到HTTPS协议呢?
(一)给fiddler安装certmaker插件
由于默认的证书不符合Android和iOS的证书要求,所以,需要下载 certmaker 插件,双击安装后,重启fiddler。注意这一步很重要,必须使用certmaker插件,不要使用默认的证书生成器,否则抓不到包。
(备注:经验证,android 和 ios ,如果不安装此插件,也是可以抓到包的,官方的文档上也是用了一个很模棱两可的说明,may ,可能,都不是那么的绝对。如果是抓不到包,此步骤可以作为一个解决方案)

图片.png

(二)首先对Fiddler进行设置:打开工具栏->Tools->Fiddler Options->HTTPS :
图片.png

对Fiddler进行设置
选中Capture HTTPS CONNECTs,因为我们要用Fiddler获取手机客户端发出的HTTPS请求,所以中间的下拉菜单中选中from remote clients only。选中下方Ignore server certificate errors.
Actions-> Trust Root Certificate:
图片.png

点击Yes:
图片.png

点击是,留意一下红框里面的内容,DO_NOT_TRUST_FiddlerRoot ,这个就是证书的名称:

图片.png

点击是:
图片.png

点击确定,这样Fiddler证书就已经添加成功了:
图片.png

查看一下证书,Actions—>open windows certificate Manager :
图片.png

可以证书已经添加进去了,证书名称就是之前提醒大家留意的,【DO_NOT_TRUST_FiddlerRoot】:
图片.png

(三)然后,就是手机安装Fiddler证书。
这一步,也就是我们上面分析的抓取HTTPS请求的关键。
操作步骤很简单,打开手机浏览器,在浏览器地址输入代理服务器IP和端口,会看到一个Fiddler提供的页面:
图片.png

接着点击最下方的FiddlerRoot certificate,这时候点击确定安装就可以下载Fiddler的证书了。
查看手机上的安装证书,设置->系统->安全->信任的证书-用户(位置可能有因为手机的不同多少有些区别):
图片.png

下载安装完成好后,我们用手机客户端或者浏览器发出HTTPS请求,Fiddler就可以截获到了,就跟截获普通的HTTP请求一样。
如下下图所示,绿色标志的接口都是HTTPS协议:
图片.png

(四)PC端(https://www.cnblogs.com/zhxilin/p/3807634.html

17、Fiddler模拟POST请求

在进行接口测试时,会模拟post请求,发送不同的请求参数,返回不同的结果,今天我们就来分享一下,怎么用Fiddler工具模拟post请求:
1、打开Fiddler工具,在右侧点击“composer”的选项:


图片.png

2、进入到了composer 的选项之后,在parsed中进行根据http发送的请求进行选择,我们是模拟post请求,故选择post:


图片.png

3、添加post的url地址,以及选择http协议的版本 :


图片.png

4、填写post请求的header和body :


图片.png

5、最后点击 Execute,就可以发送post请求,在左侧可以查看到发送的请求记录:


图片.png

6、双击该请求,既可以查看详细的请求数据和返回结果:


图片.png

下面的就着重的介绍一下:
1、第一个关键点:content-type,什么是content-type呢?顾名思义,内容类型,用来指定不同格式的请求信息。
就是在header中指定body中的数据格式。
2、Http Header里的Content-Type在这里介绍以下两种以及相关的实践应用:

  • application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式;
  • application/json : json格式的数据;
    需要根据实际情况选择不同的Content-Type。


    图片.png

post请求的header是这样的:

User-Agent: Fiddler
Content-Type: application/x-www-form-urlencoded
Host: localhost
Content-Length: 34

那么在body里这样写:

city=“ZhengZhou”& name=”zwf”

如果要发送json格式的数据,则header这样写:

User-Agent: Fiddler
Content-Type: application/json
Host: localhost
Content-Length: 34

body中这样写:

{
    "city": "ZhengZhou",
    "name": "zwf"
}

18、Fiddler模拟get请求

在进行接口测试时,有时需要模拟get请求,今天我们就来分享一下,怎么用Fiddler工具模拟get请求:
(1)打开Fiddler工具,在右侧点击“composer”的选项:


图片.png

(2)进入到了composer 的选项之后,在parsed中选择get请求,之后填写get的url地址及相关的参数,再选择http协议的版本,最后点击execute按钮:


图片.png

(3)即可模拟get请求了!

19、通过命令对特定的请求设置断点

通过Rules->Automatic Breakpoints ->点击 Before Requests 或者 after Response 设置断点,但是该方法会阻止所有的请求,不太合适。
今天我们就来分享如何通过命令对特定的请求设置断点:
首先我们需要命令行,命令行位于状态栏的上方,如下图所示:

图片.png

我们先来了解一些简单的命令:

  • help:会带你到命令行的帮助页;
  • ?sometext:高亮包含匹配文字的会话。比如 ?/sdk 就可以把url中所有包含 /sdk 的请求都找出来;
  • = 匹配请求方法或状态码 =302 高亮302跳转;
  • @ 匹配host;
  • go:放行所有的断点;

有关断点的命令:
断点即 breakpoint,所有跟断点相关的都是以 bp 为前缀。

  • bpu:请求时断点,比如 bpu /sdk
  • bpafter:响应时断点,比如 bpafter /sdk
  • bps:拦截状态码,比如 bps 404
  • bpm:拦截方法,比如 bpm post

用不带参数的命令可以清除断点,比如 bpafter 可以清除所有的响应断点。

比如 bpu /noreffer 会拦截所有url中包含 /noreffer 的请求
如下图所示:
1、首先输入命令,enter键执行:


图片.png

2、所有的请求中只拦截了url中包含/noreffer 的请求:


图片.png

20、AutoResponder功能使用的小技巧

经常会使用AutoResponder功能来替换服务器返回的数据,每次都是使用find a file… 选项,就是提前在本地已经创建好一个文档,之后选择:


图片.png

今天就是我们就来分享另外一个功能,create new response… ,不用提前准备好文档,直接在提供的编辑器中填写内容就可以:

  • 选中想要拦截的请求
  • 然后在 Request 面板选择 AutoResponder
  • 再选择 “Add Rule”
  • 在最下面的下拉框选择 “Create New Response…”
  • 然后 “Save”
    会弹出一个对话框,跟 Response 面板的布局一样,在上面可以填写编辑返回的数据内容:


    图片.png

    图片.png

21、Composer功能使用的小技巧

我们会使用Composer功能来模拟发送POST、GET请求,最大的难点就是填写发送的数据,尤其是post方法,要填写的数据比较多,刚打开composer面板时,还是一片空白,也没有参照,稍不留神就会填写错误,导致接口请求不到数据,或者请求错误。
今天就来教大家一招,怎么根据已有的接口来【预填写】一部分信息,可以在现有的基础上进行调整修改,有模板做参照,难度会降低许多:
(1)打开Composer;
(2)从左侧会话列表拖一个会话过来,这样就有该会话的详细信息了,在此基础上进行调整修改;


图片.png

图片.png

22、 Fiddler中如何过滤会话

在抓包时,会捕捉到很多的会话,但是我们只关心特定的接口会话,这个时候我们可以使用过滤功能,来帮助我们从一大堆会话中筛选去我们关心的会话:
进行如下的设置,如图所示:
(1)捕捉到 一堆的会话,但仅仅需要查看api.altamob.com hostname的会话:


图片.png

(2)进行如下设置:


图片.png

(3)Actions—选择Run Filterset now :
图片.png

(4)OK,只展示api.altamob.com hostname的会话了:
图片.png

23、Fiddler中提供的编码小工具TextWizard

Fiddler中提供的编码小工具TextWizard,如何使用呢?
(1)点击TextWizard,当鼠标放上去时,有解释:launch the textwizard to encode/decode text ,顾名思义:编码/解码文本的

图片.png

(2)弹出TextWizard窗体,在1区域填写要加码或者解码的文本,在Transform选中选择要转换的方式,就会在区域2中显示结果,本图的例子是对 https://www.baidu.com 进行urlencode 加密
图片.png

24、深入研究AutoResponder

在抓包工具Fiddler的使用教程(九):本地文件替换服务器文件 中有讲到在AutoResponder中需要勾选两个选项,如下图所示:


图片.png

但是这些选项的作用分别是什么,就没有仔细的深究了,今天我们就来详细的讲解一下:

Enable automatic responses复选框的含义是:控制是否激活AutoResponder选项卡,如果没有选中该选项,选项卡上的其他选项就不可选。也就是说,不勾选此项,AutoResponder是不起作用的。

Unmatched requests passthrough 复选框的含义是: 如果选中该选项,不匹配的请求会正常发送到服务器,如果没有选中该选项,Fiddler会为所有和该规则完全不匹配的HTTP请求生成HTTP/404 Not Found响应。
如下图所示:只有匹配到的地址返回的是200,其他未匹配到的地址则都是响应404


图片.png

Enable Latency的含义是:控制匹配某个规则的请求时立即执行,还是延迟Latency字段中所指定的毫秒数。
如果没有选中该选项,Latency字段就不会显示,使用这个选项可以更准确地模拟现实中的服务器响应,取消该选项可以提升性能。如下所示:


图片.png

点击右键选择set latency…… 设置响应的延迟时间:
图片.png

如下图所示,延迟设置1000ms = 1s:
图片.png

25、深入研究Composer

在抓包工具Fiddler的使用教程(十三):Fiddler模拟POST请求中我们有讲到如何使用Composer模拟发送请求,使用的是parsed选项,但Composer有四个选项卡,今天我们就来仔细的讲解一下这些选项卡:
Composer选项卡是由4个子选项卡组成的,如下所示:

图片.png

parsed :原型,如何使用我们在之前的教程中有讲
Raw :原始的,未加工的,我们很少使用该项,因为数据填写起来比较难啊,其实和parsed一样,只是不同的格式的罢了,我们当然选择容易的了。
Scratchpad :中间结果暂存器 这个真的是真心不会用。
Options :这个就简单了,就是各种选项的配置了,我们都做一下简单的介绍。
我们先来看看Options选项卡中 Request Options的复选框中的含义如下:
Inspect Session 请求执行后,Inspectors选项卡会被激活【自动打开】,可以查看请求结果。示意对比图如下:
没有勾选:
图片.png

图片.png

勾选 Inspect Session :
图片.png

Fix Content-Length header该选项控制Composer是否会自动添加或修改Content-Length请求头,表示请求体的大小。在很多情况下,缺少适当的Content-Length头的请求会导致http请求响应出错。
示意图如下所示:
在请求之前没有Content-Length该属性,

图片.png

请求之后,自动添加了该属性:
图片.png

Follow Redirects 该选项控制Composer是否会自动使用响应的Location头,遵循HTTP/3xx重定向,如果选中该选项,Composer在失败之前最多会执行10次重定向。
有时候会模拟重定向的请求,只有勾选了此项,才会继续跳转location的地址,否则就不会继续跳转。
勾选了,可以接连的进行302重定向:

图片.png

如果没有勾选,仅仅跳一跳,就停止了:
图片.png

26、Fiddler中保存会话

有些时候我们需要把会话保存下来,以便发给别人或者以后去分析。 保存会话的步骤如下:
选择你想保存的会话,然后点击File->Save->Selected Sessions

参考:

https://blog.csdn.net/qq_15283475/article/category/6667348/2
http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html
https://mp.weixin.qq.com/s/H73VsWHF37715hV21u5uug

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容