Fiddler笔记-从原理到证书安装到常用功能介绍

Fiddler 是一款功能非常强大的 HTTP 协议代理工具,能监听客户端和服务器间的 HTTP 通讯。在日常工作中,Fiddler 是应用非常广泛的抓包和调试工具。同时也是测试工程师们必备的核心技能之一,掌握 Fiddler,帮你轻松搞定接口调试。

 

Fiddler 工作原理

Fiddler 是在客户端和服务端之间建立的的 HTTP 代理服务器,能够监听客户端发出的请求和服务端返回的响应结果。


-在客户端和服务器之间,建立了一个HTTP代理服务器
-当启动的时候,Fiddler会默认把自己设置为系统代理,来监听客户端的HTTP/HTTPS请求
-默认代理地址为:127.0.0.1 默认端口为:8888
-浏览器访问WEB网站的时候,请求报文会先发送到Fiddler
-Fiddler 再把请求报文转发给服务器
-Web服务器返回的响应报文,也会先达到Fiddler
-Fiddler 再把响应报文返回给浏览器

原理剖析

双击启动Fiddler 后,依次点击操作系统的开始菜单-->设置-->网络和Internet-->代理,可以看到手动设置代理这里,<使用代理服务器>的开关变为「开」,地址的内容为Fiddler的代理地址,端口为8888

我们还可以看一下Fiddler操作界面。依次点击Fiddler菜单栏-->Tools-->Options,选Connections,可以看到Fiddler默认的端口是8888。

当关闭Fiddler后或者暂停捕获(F12),系统代理开关又自动变回「关」状态,地址栏中内容变为空,客户端请求和服务端响应不再通过Fiddler进行代理转发。

我们访问网页时,浏览器会通过 HTTP(S) 协议向服务端请求资源,当打开 Fiddler 捕获(F12)后,HTTP 请求不会直接发送给服务端,而是需要通过 Fiddler代理进行转发,服务端收到请求进行响应,服务端响应同样会通过 Fiddler代理进行转发。在 Fiddler 左侧的会话列表,我们可以看到刚才浏览过的所有网页,会话列表中的1 条 session 对应 1 个(HTTP/HTTPS)请求。

HTTPS 证书安装

默认状态下,Fiddler 只能监听 HTTP 请求。当打开 HTTPS 网页时(如https://www.baidu.com),请求使用 HTTPS 协议建立连接通道,Fiddler 无法解析这些加密请求。会话列表中HTTPS的请求,Host列显示为:Tunnel to,#列显示灰色的锁状态,请求报文的请求体显示乱码。这种种迹象表明Fiddler没有安装HTTPS证书,导致无法抓取HTTPS请求包。

这时候需要进行设置。设置路径:Tool->Options->HTTPS,勾选如图内容。

勾选三项内容,点击Actions按钮,弹框选择信任证书‘yes’,同时再点击Actions按钮,点击Export Root xxx,把证书导出桌面。打开浏览器,找到“证书管理器”,将桌面的证书导入受信任的证书,重启浏览器,这样Fiddler开启捕获后浏览器也能访问HTTPS网页了,Fiddler也能抓取它的数据包!

Fiddler界面以及常用功能介绍

1-断点功能

全局断点,所有的 HTTP/HTTPS 请求都会被拦截。如上图底下正方框。

-通过设置请求前断点,来篡改请求参数。

-通过设置响应后断点,来篡改响应内容。如修改访问百度首页后,响应消息框的SyntaxView内容,修改页面内容。

局部断点,是针对某条特定的请求设置断点进行调试。在命令行中输入需要设置断点的请求指令,也是常用的一种断调试方式。如上图黑色长方框。

可以更加灵活的对某些地址、方法作断点调试。

2-过滤器Filters

仅展示内网、外网、特定的几个网站的请求。如:本机项目、百度、阿里云项目服务器等几个常用的HOST。配置如下:

Show only 表示只对以下进行抓包,勾选Use Filters,点击Actions即可。

-如果过滤本机,则需要127.0.0.1 和 localhost都需要写

-百度由于有很多二级域名,故前面写*

-所有的HOST,都不需要带端口

3-Inspectors 检查器

最常用,用来看请求和响应报文。

-根据请求的不同,可以选择多种格式化的形式展示请求报文的部分或全部信息,但是一个请求不可能有所有的展现形式。

-根据响应的不同,可以选择多种格式化的形式展示请求报文的部分或全部信息,但是一个响应不可能有所有的展现形式。

4- AutoResponder 自动应答

Fiddler 的 AutoResponder 可以实现自动重定向,主要是通过事先添加好的 Rule,进行规则匹配。只要匹配,就会拦截请求,然后篡改原始响应内容到本地或者指定响应,从而实现自动重定向。匹配规则有四种:字符串匹配、NOT 匹配、EXACT 匹配、REGEX 匹配。

1. 字符串匹配:模糊匹配,不区分大小写,匹配包含该字符串的请求。

2. NOT 匹配:模糊匹配,不区分大小写,发现不匹配包含该字符串的请求。语法:NOT :str(注意空格)

3. EXACT 匹配:精确匹配,区分大小写,匹配包含该字符串的请求。语法:EXACT :

4. REGEX 匹配:使用正则表达式进行匹配,一般针对接口进行替换,不常用。

-手动添加规则:通过点击“Add Rule”按钮手动添加,在底下规则编辑器中编辑需要匹配的请求,和篡改后的响应,完成后点击“save”按钮。

-导入规则:通过点击“Import…”按钮实现一键导入 AutoResponder 规则,导入完成后,也可以对导入的规则进行修改,修改完成后,点击”save”按钮。

-引用会话请求:将会话中需要重定向的请求直接拖拽到 AutoResponder 规则区域,然后按 F2 键,编辑响应,完成后点击“save”按钮。

应用:

1. 访问http://127.0.0.1/test 重定向到百度首页。添加规则,第一列写入http://127.0.0.1/test,第二列写入百度首页,点save。

2. 替换页面的图标。通过右键复制该图标“图像地址”,写入Rule Editor的第一列,然后把想替换的图片地址写入第二列,点save。勾选该规则,勾选Enable rules和Unmatched Requestspasstheough,就可以访问该地址看替换后的效果。

3. 验证页面显示内容和效果。不调用真实接口,通过txt文本内容,实现文本格式的编辑和修改,如文本框文字内容很长,文本框很多等等,刷新页面观察页面格式页面是否美观。

5- Composer 创作者

设计或者构造一个请求,Fiddler提供了2种方式构造请求,一种是Parsed方式,一种是Raw方式。

-Parsed 方式:可以翻译成语法解析方式。以图形界面的方式选择或者输入请求方法、请求URL、请求头、请求消息体,来构造请求。与postman类似,但是没有postman 方便

-Raw方式:可以翻译为原始报文方式。没有图形界面选择,只能以HTTP请求报文的格式构造请求。主要是用来调试接口用的,可以编辑修改报文,来达到反复调试的目的

应用:

接口测试时,当构造的请求返回总是报错,找不到原因。此时,可以通过查看请求报文,把请求报文中的请求方法、请求URL、请求头、请求消息体等信息,逐一和接口文档进行比较,看是否是请求方法、请求URL、请求头写错了,还是忘记写请求头了,还是请求消息体的内容格式不对。

或者拿请求头+请求消息体的不同组合(A的请求头+我的请求体或我的请求头+A的请求体),排查是请求头问题还是请求消息体的问题,若是请求头问题,与接口文档比对,若是请求消息体问题,且比较难找,可以去解码看看内容是否有问题,或者去格式化json格式,对json的内容一半一半地排查(100->50+50,前50ok后50失败,取后50->25+25...)

6- 其它

-隐藏Host为tunnel to的会话
Rules->Hide Connects,把前面的勾勾起来。HTTPS解密失败的会话不会显示。

-隐藏图片类会话
Rules->Hide image requests,把前面的勾勾起来。图片类会话不会显示。

-快速清空会话列表
按快捷键:Ctrl +X ,可以快速清空会话列表

 

【面试问】为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

 

posted @ 2020-05-17 14:49  jeyeshield  阅读(454)  评论(0编辑  收藏  举报