安装和配置fiddler:
Fiddler相关介绍
Fiddler简介:
Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP和HTTPS请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据。既然是代理,也就是说:客户端的所有请求都要先经过Fiddler,然后转发到相应的服务器,反之,服务器端的所有响应,也都会先经过Fiddler然后发送到客户端,基于这个原因,Fiddler支持所有可以设置http代理为127.0.0.1:8888的浏览器和应用程序。
应用层传输协议HTTP和HTTPS简介:
HTTP(HyperText Transfer Protocol):应用层的超文本传输协议,是建立TCP协议之上的一种应用,最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为‘一次连接’。
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer):应用层的安全超文本传输协议,以安全为目标的HTTP通道,在HTTP下加入SSL层。
HTTP和HTTPS的区别:
https协议需要到ca申请证书,一般免费证书很少,需要交费
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
PC端安装fiddler
步骤1:获取安装包
Fiddler官网:https://www.telerik.com/download/fiddler ---打开网页到下载的速度很慢
亿方云上面也有
步骤2:安装步骤参考:https://jingyan.baidu.com/article/3a2f7c2e23321f26afd6119a.html
步骤3:打开fiddler
手机抓包准备-设置允许远端连接
PC上的Fiddler先设置允许抓包,步骤如下:
步骤1:先确保Fiddler能装PC端的http和https的包
步骤2:Fiddler设置Allow remote computers to connect,如下图:
步骤3:重启Fiddler
Ios端使用fiddler
IOS手机通过Fiddler抓包设置方式如下:
步骤1:获取Fiddler对应的HOST,获取方式如下图:
步骤2:IOS手机设置代理,如下图:
步骤3:手机浏览器打开百度,验证Fiddler已经能抓包
步骤4:此时仍只能抓到http,还需要安装描述文件,才能抓到https的包
步骤5:安装描述文件:手机浏览器中输入(直接访问IP:端口号),如10.100.24.192:8888
步骤6:点击FiddlerRoot certificate, 安装描述文件
有一种情况特殊说明下:
Q:若PC端可以抓https的包,IOS可以抓不到https的包,确抓到了http的包,此时要考虑手机系统设置的问题;
A:此问题的答案不一定百度的到,考虑: 设置-通用-关于本机-信任证书设置: 针对根证书启用完全信任,设置DO_NOT_TRUST_FiddlerRoot=开
Android端使用fiddler
Android手机通过Fiddler抓包设置方式如下:
步骤1:获取Fiddler对应的HOST,获取方式如下图:
步骤2:Android手机设置代理,参考:https://jingyan.baidu.com/article/03b2f78c7b6bb05ea237aed2.html;不同的型号的手机找不到的话,根据手机型号百度下
步骤3:手机浏览器打开百度,验证Fiddler已经能抓包
步骤4:此时仍只能抓到http,还需要安装描述文件,才能抓到https的包
步骤5:安装证书:手机浏览器中输入(直接访问IP:端口号),如10.100.24.192:8888
步骤6:点击FiddlerRoot certificate, 先保存证书文件
步骤7:点击手机设置-安全-从设备存储空间安装-》安装
步骤8:手机浏览器打开https的百度地址,验证Fiddler已经能抓https的包
Fiddler设置抓包:
设置抓包
抓包原理
Fiddler是通过改写HTTP代理,让数据从它那通过,来监控并且截取到数据。
启动fiddler之后,自动开代理;关闭fiddler之后,自动关代理。
设置是否抓包
方式1:
方式2:
设置抓https的包
刚装好的fiddler不支持抓取https的信息,所以需要设置可以抓取https.
设置入口一:菜单-》Tools-》Optoins-》https
设置入口二:点击如下图黄色部分
设置示例如下:
重置https证书
设置步骤入口如下,然后一步步点击‘是’或者‘Yes’:
抓包后的全局界面
工具栏
左侧-web session列表
快捷命令行
状态栏
Fiddler常用的功能:
断点篡改
断点介绍
断点的作用:可以修改发送到服务器的信息,也可以修改服务器返回的信息
断点有两种方式:
一种是before response,是打在用户请求的时候,还没有request给服务器;
另一种是after response,是在服务器响应之后,打在fiddler将响应传回给客户端之前
断点的原理参考下图:
断点的使用场景举例
01 请求篡改:客户端已经报错,无法点击提交报存,但是想跳过客户端看下服务端有没有验证;
---举例演示:填写纳税人识别号
02 请求篡改:通过用户id,订单id等信息去获取信息,但此时篡改为不符合条件的信息,验证是否会获取失败;
--举例演示:篡改id获取不同年节卡的号段; https://a.guanaitong.cc/festivalMall/order/entityCardActive?cardOrderId=1308
03 请求篡改:客户端已经禁掉了入口,需要验证服务端是否还支持;
--举例演示:费用积分充值提交申请过程中,篡改账户id(费用基本户id=272057 ---现在不会报错了
04 请求篡改:支付过程中,不同金额的商品id或价格等跟钱有关信息的篡改,验证支付失败,或者实际支付金额跟商品一致;
--举例演示:购买天猫享淘卡(https://ecard.a.guanaitong.com/index.php?wxA=TmallChaoshi.index),跳转到收银台,发送验证码之前,输入验证码金额之后均修改金额
05 请求和返回篡改:正常条件下,错误的页面出不来,可以篡改请求或返回来验证失败页面的显示
--举例演示:购买天猫享淘卡,篡改商品数量,从而打开到购物车为空的页面
06 返回篡改:期望的错误文案对应的场景不容易模拟,可以通过篡改返回信息来验证对应的错误文案的显示;
07 返回篡改:一些流程,先后有好几个判断请求,其中某个请求返回错误,可以篡改为都成功,看最终结果是成功还是失败。
快捷命令
介绍:入口在fiddler底部的quickexec,主要是搜索和部分操作的快捷操作
示例1:
输入:help
效果:浏览器打开fiddlerquickexec页面:http://docs.telerik.com/fiddler/knowledgebase/quickexec
示例2:
输入:?shop
效果:搜索所有请求text中,包含‘shop’的请求,并高亮显示
示例3:
输入:=200
效果:搜索出httpstatus=200的请求
示例4:
输入:>4000 >4k >4kk <100
效果:对请求信息中的Body进行搜索
示例5:
输入:=POST
效果:搜索请求方式=post
示例6:
输入:@guanaitong.cc
效果:对请求中的域名进行搜索
示例7:
输入:select image
效果:选中所有的图片
示例8:
输入:quit
效果:退出fiddler
扩展:更多的使用方式,可以百度搜索关键字‘fiddler 快捷命令’
配置脚本
介绍:此处通过增加显示IP为示例, 修改script示例可参考:http://www.fiddlerbook.com/Fiddler/dev/ScriptSamples.asp
修改步骤:
步骤1:打开FiddlerScript,打开FiddlerScript的方式包括:快捷键(Ctrl+R);点击Rules-Customize Rules;直接点开右侧主页签中的FiddlerScript
步骤2:找到Main()
步骤3:在Main()方法下,添加如下一行:
FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP", 120, "X-HostIP");
步骤4:保存修改,这样左侧请求部分,会把域名对应的IP也显示出来。
模拟限速
介绍:实际用户网络情况多样,特别是手机流量的网络较差,所以我们需要考虑网络差这种情况下用户的体验和异常情况。 推荐文章:弱网络环境模拟限速测试流程- http://www.51testing.com/html/80/n-3726980.html
方式1-直接设置
Fiddler提供了模拟恶劣的网络环境方式,勾选如下:Rules–Performances–Simulate Modem Speeds
方式2-修改脚本
限速的原理是网络延迟,设置方式如下:
01 打开FiddlerScript;
02 找到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";
}
值的计算方式:
如果上传网速期望是100KBps, request-trickle-delay可以设置为 1KB/100KBps=0.01s=100(ms),所以设置的值越小,表示带宽越大。
03 修改request-trickle-delay或者response-trickle-delay的值,可以写为固定的,也可以设置随机的值,修改方式如下:
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);
}
04 保存修改。
注意:每次编辑并保存配置文件后,Simulate Modem Speeds选项会被取消,请重新勾选。
模拟2G,3G网络
2G网络的下载速度约15-20k/s , 我们假定为20k/s. fiddler设置网络延迟= 1000/20(kb/s) =50ms
3G网络的下载速度约120-600k/s , 我们假定为200k/s. fiddler设置网络延迟= 1000/200(kb/s) =5ms
模拟并发
原理:设置同时请求多次
模拟方式:
设置快捷方式:快捷键(Shift+S),在弹出的框中填写需要重复的次数,就可以多次请求了。
页面设置方式:选中需要批量的地址,右击选中-》Replay-》Reissue Sequentially
应用场景举例:
01 新增企业收货地址的时候,可以批量多个,如果有企业要求限制收货地址的数量,可能就会建超过相应数量的
02 支付生成订单的时候,同样的交易信息,批量请求,此时可能因为代码先后判断的逻辑等问题,可能会生成一些跳过判断的订单,或者库存已不够之类的订单
发送POST或get请求
年节卡查询订单接口示例如下图:
过滤域名
介绍:抓包过程中,对于的网络请求会影响我们定位和验证问题,所以需要过滤掉一些没用的域名
设置过滤域名步骤:
步骤1:点击Fiddler右侧Filters -> check Use Filter -> Hosts部分选择Hide the following Hosts->下面输入框中录入期望过滤掉的域名;
步骤2:点击 Actions -> Run Filterset now,这样过滤域名才能立即生效,设置如下图:
Q&A:
Q:Fiddler上的配置修改没有生效
A: Fiddler的任何配置上的修改,都要记得重启fiddler,否则很可能不生效
Q:PC端抓不到https的包
检查一:有没有设置Capture HTTPS CONNECTS
检查二:重置下https抓包证书
检查三:百度关键字‘fiddler死活抓不了https’
找到类似于这样的文章:https://blog.csdn.net/d1240673769/article/details/74298429
Q:Fiddler右上角查看host有多个
A:原因是网络连接设置了多个,如下图。可以禁用其中一个网络
Q:左侧很多请求是灰色的
A:灰色的包括如下格式等:
1.图片是图片,它就是个图片;
2.图标是一把锁,是使用http_connect方法;
附录:
左侧请求第一列图标对应表
名称 |
含义 |
# |
抓取HTTP Request的顺序,从1开始,以此递增 |
Result |
HTTP状态码 |
Protocol |
请求使用的协议,如HTTP/HTTPS/FTP等 |
Host |
请求地址的主机名 |
URL |
请求资源的位置 |
Body |
该请求的大小 |
Caching |
请求的缓存过期时间或者缓存控制值 |
Content-Type |
请求响应的类型 |
Process |
发送此请求的进程:进程ID |
Comments |
允许用户为此回话添加备注 |
Custom |
允许用户设置自定义值 |
图标 |
含义 |
|
请求已经发往服务器 |
|
已从服务器下载响应结果 |
|
请求从断点处暂停 |
|
响应从断点处暂停 |
|
请求使用 HTTP 的 HEAD 方法,即响应没有内容(Body) |
|
请求使用 HTTP 的 POST 方法 |
|
请求使用 HTTP 的 CONNECT 方法,使用 HTTPS 协议建立连接隧道 |
|
响应是 HTML 格式 |
|
响应是一张图片 |
|
响应是脚本格式 |
|
响应是 CSS 格式 |
|
响应是 XML 格式 |
|
响应是 JSON 格式 |
|
响应是一个音频文件 |
|
响应是一个视频文件 |
|
响应是一个 SilverLight |
|
响应是一个 FLASH |
|
响应是一个字体 |
|
普通响应成功 |
|
响应是 HTTP/300、301、302、303 或 307 重定向 |
|
响应是 HTTP/304(无变更):使用缓存文件 |
|
响应需要客户端证书验证 |
|
服务端错误 |
|
会话被客户端、Fiddler 或者服务端终止 |