Fiddler使用随笔

摘要:
Fiddler可以捕获任何支持http代理的程序的数据包。如果要捕获https会话,需要先安装证书。HTTP协议要分析Fiddler捕获的数据包,我们必须首先熟悉HTTP协议。结合fiddler的断点功能,拦截请求数据,临时修改会话输入参数,然后发送到服务器。将捕获的请求直接拖到Composer,然后在修改后单击Execute。执行后的响应数据也可以由fiddler捕获。
Fiddler基础知识
  • Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888,我们也可以通过设置进行修改。
  • 代理就是在客户端和服务器之间设置一道关卡,客户端先将请求数据发送出去后,代理服务器会将数据包进行拦截,代理服务器再冒充客户端发送数据到服务器;同理,服务器将响应数据返回,代理服务器也会将数据拦截,再返回给客户端。
  • Fiddler可以抓取支持http代理的任意程序的数据包,如果要抓取https会话,要先安装证书。

HTTP协议

  • 要分析Fiddler抓取的数据包,我们首先要熟悉HTTP协议。HTTP即超文本传输协议,是一个基于请求与响应模式的、无状态的、应用层的协议,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
  • HTTP的工作过程:当我们请求一个超链接时,HTTP就开始工作了,客户端先发送一个请求到服务器,请求内容包括:协议版本号、请求地址、请求方式、请求头和请求参数;服务器收到请求后做相应的处理,并将响应数据返回到客户端,响应内容包括:协议版本号、状态码和响应数据。前端根据响应数据做相应的处理,就是最终我们看到的内容。这些过程是HTTP自动完成的,我们只是输入或点击请求地址,然后查看前端给我们展示的内容。更多关于HTTP协议的介绍请参考:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
  • 请求方式常用的有:GET、PUT、POST、DELETE。
  • HTTP状态码主要分为5类:以1开头的代表请求已被接受,需要继续处理;以2开头的代表请求已成功被服务器接收、理解、并接受;以3开头的代表需要客户端采取进一步的操作才能完成请求;以4开头的代表了客户端看起来可能发生了错误,妨碍了服务器的处理;以5开头的代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。
  • 常见的主要有:200:服务器成功处理了请求;404:未找到资源;500:内部服务器错误;503:服务器目前无法为请求提供服务;302:请求的URL已临时转移;304:客户端的缓存资源是最新的,要客户端使用缓存。
  • 每个状态码的详细介绍请参考:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin
一、FIiddler请求界面图标解释:

Fiddler使用随笔第1张

名称

含义

#

抓取HTTP Request的顺序,从1开始,以此递增

Result

HTTP状态码

Protocol

请求使用的协议,如HTTP/HTTPS/FTP等

Host

请求地址的主机名

URL

请求资源的位置

Body

该请求的大小

Caching

请求的缓存过期时间或者缓存控制值

Content-Type

请求响应的类型

Process

发送此请求的进程:进程ID

Comments

允许用户为此回话添加备注

Custom

允许用户设置自定义值

图标

含义

clip_image001[13]

请求已经发往服务器

clip_image002[4]

已从服务器下载响应结果

clip_image003[4]

请求从断点处暂停

clip_image004[4]

响应从断点处暂停

clip_image005[4]

请求使用 HTTP 的 HEAD 方法,即响应没有内容(Body)

clip_image006[4]

请求使用 HTTP 的 POST 方法

clip_image007[4]

请求使用 HTTP 的 CONNECT 方法,使用 HTTPS 协议建立连接隧道

clip_image008[4]

响应是 HTML 格式

clip_image009[4]

响应是一张图片

clip_image010[4]

响应是脚本格式

clip_image011[4]

响应是 CSS 格式

clip_image012[4]

响应是 XML 格式

clip_image013[4]

响应是 JSON 格式

clip_image014[4]

响应是一个音频文件

clip_image015[4]

响应是一个视频文件

clip_image016[4]

响应是一个 SilverLight

clip_image017[4]

响应是一个 FLASH

clip_image018[4]

响应是一个字体

clip_image019[4]

普通响应成功

clip_image020[4]

响应是 HTTP/300、301、302、303 或 307 重定向

clip_image021[4]

响应是 HTTP/304(无变更):使用缓存文件

clip_image022[4]

响应需要客户端证书验证

clip_image023[4]

服务端错误

clip_image0244

会话被客户端、Fiddler 或者服务端终止

二、Fiddler右侧工具界面介绍

1、Statistics[性能统计器]

关于HTTP请求的性能以及数据分析。选中一条请求,点击右侧Statistics即可看到这条请求的一些性能数据。也可以shift选中多条一起查看。

附中英文版本的截图,对照着看下字段名称基本就能理解了:

Fiddler使用随笔第26张

Fiddler使用随笔第27张

Fiddler使用随笔第28张

 2、Inspectors[会话监视器]

这是我们最常用的窗口,用于查看会话的内容,上半部分是请求的内容,下半部分是响应的内容。

会把请求和响应解析成清晰的格式,出入参对应的值都可以很清晰的展示,对于写接口自动化很有帮助。同样附一张中文版的截图:

Fiddler使用随笔第29张

这个工具栏还可以用来修改请求数据模拟请求发送。结合fiddler的断点功能,截取请求数据后临时修改会话入参,再发送至服务器。

步骤:

1、设置断点:rules->automatic Breakpoints->before response

2、修改入参:Inspectors->WebForms

3、修改请求变量参数后执行Run to Completion

附上一张中文版的图片更加一目了然:

Fiddler使用随笔第30张

 3、AutoResponder[自动应答器]

允许你拦截指定规则的URL,并返回本地资源或Fiddler资源,从而代替服务器响应。

勾选‘启用规则’+规则前的勾选框,即可针对满足URL匹配规则的请求进行自动响应,响应内容可为本地文件或者要执行的行动。

匹配规则支持正则,响应内容可自定义。

附中文版截图,对照英文版本使用:

Fiddler使用随笔第31张

4、Composer【会话篡改器】

Composer起到的功能和Inspectors中的作用一样,都是篡改数据,不过Composer可以篡改Cookie中的数据。

也就是说,Inspectors篡改是的是我们输入的数据,例如密码输入什么就是什么。而Composer篡改的是经过处理后的,例如Cookie中的数据,其实密码已经是加密了的。

直接将抓取到的请求拖拽到Composer里,修改后再点执行即可,执行后的响应数据也可以被fiddler抓获(左侧窗口可查看)。

Fiddler使用随笔第32张

Fiddler使用随笔第33张

5、Compare【性能比较器】

前边四个工具页基本所有fiddler版本都会有,但这个好像有些版本就没有,英文名也是我瞎编的,因为我只有中文版上有,我也不知道哪个版本怎么弄出来的。

功能就是Statistics[性能统计器]加了个比较功能,可以拖拽两条url进去对比一些性能参数,或者加载两个SAZ文件进行比较,没什么太大增益。

SAZ文件:通常用于存储HTTP(S)流量供以后检查,普及范围极低。

附中文版截图:

Fiddler使用随笔第34张

 可以看出虽然两条请求是一模一样的,但耗时还是有些差异。如果是比较安卓和IOS端大数据量的查询请求,或许可以一用。

6、Filters【过滤器】

因为Fiddler抓包是直接按照时间顺序排列出所有抓到的请求,所以难免杂乱无章,不结合过滤器的话很难去筛选有效信息。

勾选Filters开启过滤器,过滤规则挺多的,最常用的就是两个针对主机的过滤条件:Zone和Host

1、Zone 指定只显示内网(Intranet)或互联网(Internet)的内容:

2、Host 指定显示某个域名下的会话:

  Fiddler使用随笔第35张

7、Timeline【请求响应时间】

在左侧会话窗口点击一个或多个(同时按下 Ctrl 键),Timeline 便会显示指定内容从服务端传输到客户端的时间:

Fiddler使用随笔第36张

三、Fiddler使用

1、报错:创建根证书不成功

win10系统中安装了fiddler,一直无法成功创建根证书,一直出现错误提示,无法为windos配置根证书。
解决办法:
打开cmd命令行,进入Fiddler的安装目录下。

输入命令:

makecert.exe -r -ss my -n "CN=DO_NOT_TRUST_FiddlerRoot, O=DO_NOT_TRUST, OU=Created by http://www.fiddler2.com" -sky signature -eku 1.3.6.1.5.5.7.3.1 -h 1 -cy authority -a sha1 -m 120 -b 10/12/2030

注意,最后的日期需要超过你安装软件的日期

2、如何比较两个接口请求

进行APP测试时,往往会出现Andriod和iOS端同一请求,但执行结果不同,这通常是接口请求内容差异所致。

用Fidder的 Compare 功能(快捷键 Ctrl+W)可查看差异。

  • 如何配置windiff?

下载地址:https://www.grigsoft.com/download-windiff.htm

下载windiff.zip

解压压缩包windiff.zip,解压放在任意位置(建议放到fiddler安装目录下)

在Fiddler路径 Tools -> Options -> Tools 下,在File Diff Tool中选择定位到windiff.exe

Fiddler使用随笔第37张

 

  • 如何使用windiff?

ctrl选中要比较的两请求

在鼠标右键菜单中找到Compare(快捷键 Ctrl+W)

在windiff中,会标识出两个请求中不同的行(红黄高亮显示为一对,表示两个请求在此行的不同内容)

Fiddler使用随笔第38张

3、Fiddler死活抓不了HTTPS包怎么办?

一般抓不到都是因为没配置好,踩坑多次不再赘述。此处主要标记死活抓不到的情况。

参考博文:https://blog.csdn.net/d1240673769/article/details/74298429

4、怎么使用fiddler自动处理修改Request和Response内容【难点】

手动处理修改可以通过打断点修改数据后再续发送,但一次只能处理一条响应,所以需要用到脚本结合oSession方法批量处理。

Request请求是发送给服务器的,相当于断点在请求之前,改了请求后再发送到服务器。

Response应答是从服务器返回的,发给Client客户端的内容,相当于断点在响应之前,改了响应后再发送到客户端。

修改Request和Response可在FiddlerScript中的OnBeforeRequest和OnBeforeResponse函数中添加规则即可。

OnBeforeRequest函数是在每次请求之前调用,OnBeforeResponse函数是在每次响应之前调用。

方法步骤:

         (1)打开fiddler,选择Rules—customize 

         (2)记事本打开CustomRules.js文件

         (3)查找OnBeforeRequest、OnBeforeResponse函数进行修改保存。

具体需要怎么去处理响应请求的内容需要依情况而定,举几个例子:

1)将请求的域名转发到带端口号的host上,并不改变后面的请求地址。

这个是发请求,所以要放在请求之前,故在OnBeforeRequest函数内增加

if (oSession.host.toLowerCase()== '10.20.37.58'){
oSession.host='10.23.2.70:8080'; 
}

做个实验:我先在FiddlerScript中加上这个判断语句:

Fiddler使用随笔第39张

正好使用之前Composer保存下来的Host为10.20.37.58的请求执行,可以明晰的看到左侧窗口抓到的包主机都被替换成了函数里重新赋值的10.23.2.70:8080。

Fiddler使用随笔第40张

2)为返回的JSON中修改一个字段的数据,并新增一个字段。

同理,修改OnBeforeResponse函数即可,不再赘述,网上借用一个例子:https://www.cnblogs.com/liumamxu/p/5118055.html

5、Fiddler 抓取Iphone / Android数据包

这可能是fiddler使用的最主要目的:抓取移动设备如手机、PAD的响应包。

简单说来就是给手机连接的wifi设置一个代理ip,这样手机通过那个wifi访问网络都会先经过代理服务器再转发到服务器,ip写电脑mac地址,端口写fiddler默认的8888。

IOS貌似需要先安装证书才可正常代理。

详细可以参考:

https://www.cnblogs.com/goal9248/articles/14280958.html

6、模拟网络极差环境,制造响应延迟等场景

曾经有客户上线新版本后,说他们营业部存在iphone11用户在大厅办理业务时出现了空指针报错,原因就是网络差导致上一个接口迟迟未响应,下一个接口入参传了个空所以直接报错了空指针。

又因为是同一时间调用了很多接口,如果你直接采取执行操作同时强制断网的形式去复现,很难踩准这个时间位置,因为还没轮到调用这两个接口,前面的接口就已经抛错网络异常了,所以最好是还原那种网络涓流的测试环境。

这样的问题虽然很难被黑白盒测试发现,但如果出现了还是需要复现问题,解决、测试然后重新上线的。

这时就可以使用fiddler来模拟这种场景

点击工具栏 Rules → Performances → [勾选]Simulate Modem Speeds。会有一个默认限速。

Fiddler使用随笔第41张

我们通过修改FiddlerScript,可以修改请求或是响应网络延迟的具体数值。

点击工具栏rules - customize rules (或者ctrl+r)

ctrl+f 搜索 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"; }

通俗讲就是:每上传/下载1KB 要delay 多少毫秒。

我们知道 1s=1000ms ,如果用kbps(kb/s)去算的话,算法就是 1000/下载速度(kb/s) = 需要delay的时间(ms),比如50kb/s 需要delay 1000/50=20ms来接收数据。

 
------------20210115暂存

免责声明:文章转载自《Fiddler使用随笔》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux下librtmp使用及编程实战二维码(QR code)基本知识下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

网站打包桌面程序 – Nativefier

网站打包桌面程序 – Nativefier Nativefier简介 Nativefier 是一种命令行工具,可以用最少的配置轻松地为任何网站创建桌面应用程序。它是由 Electron 引擎生成的可执行文件(.app .exe 等),能够运行在Windows,MacOS和Linux平台。 GitHub页面:https://github.com/jiaha...

Request.ServerVariables参数列表

Request.ServerVariables'Url' 返回服务器地址 Request.ServerVariables'Path_Info' 客户端提供的路径信息 Request.ServerVariables'Appl_Physical_Path' 与应用程序元数据库路径相应的物理路径 Request.ServerVariables'Path_T...

Django框架详细介绍---请求流程

Django请求流程图 1.客户端发送请求 2.wsgiref是Django封装的套接字,它将客户端发送过来的请求(请求头、请求体封装成request)    1)解析请求数据   2)封装响应数据  3.中间件,进项身份验证等 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddlewa...

docker安装异常以及网络问题总结

一、docker info 出现"Thedevicemapperstorage driver isdeprecated"警告 需要修改docker安装磁盘文件系统的ftype参数为1 查询文件系统的ftype,如果为0,需要重新格式化磁盘,并修改磁盘文件系统的ftype参数为1 xsfs_info /home 修改前 修改后 参考地址:https://...

postman和fiddler的基本使用

本文转自:https://www.cnblogs.com/qq909283/p/6826578.html 写在前面:本文主要的章节规划: 1.什么是接口测试 另外,有的时候会直接调用别的公司的接口,比如银行的、淘宝的、支付宝的,此时也需要做接口测试以及验证数据; 做接口测试的好处: 其中, get和post请求是用的最多的 (截图来自fiddler)...

Vagrant使用简介

一、简介: Vagrant是一款用于构建及配置虚拟开发环境的软件,基于Ruby,主要以命令行的方式运行。主要使用Oracle的开源VirtualBox虚拟化系统,与Chef,Salt,Puppet等环境配置管理软件搭配使用, 可以实行快速虚拟开发环境的构建。 二、安装 1.下载安装vagrant:https://www.vagrantup.com2.下载安...