fiddler作为一个程序猿+测试媛必备的工具,其他除了最基本的使用方法之外,还有很多强大到不行小技巧
下面将遇到的一些坑爹的问题或者可以变得更方便的方式列举一下~当然比较小白的问题,比如如何抓手机的包啊这些已经排除在外了哈
一、tunnel to 443 是什么鬼!
这个tunnel to 443也的确是挺不顺眼的,正如stackoverfolw上的回答一样,我们可以看见这样一句话
fiddler截图
解释了为什么会出现这个tunnel。
HttpTuunnel(也叫Http隧道,Http穿梭),是这样一种技术: 它用HTTP协议在要通信的Client和Server建立起一条”Tunnel”,然后Client和Server之间的通信,都是在这条Tunnel的基础之上。
简单地说 fiddler 当做代理转发 https 请求的时候,就会产生 "CONNECT Tunnels",所以大可忽略它。实在有强迫症,可以选择隐藏Rules>Hide Connects
所以要抓https的包,还必须安装fiddler的证书,果断百度找教程?!去看官网,简直不能再详细了,图文说明~抓https的包get
既然已经能成功抓包了,那最好也了解一下fiddler抓取HTTPS协议原理,以下内容摘自此文——浅谈HTTPS以及Fiddler抓取HTTPS协议
首先看看最基本的https通信,具体的过程就不解释了
普通的https通信
再看下加入了fiddler之后,这个具体的过程就解释下
fiddler中的https通信
Fiddler截获客户端发送给服务器的HTTPS请求,Fiddler伪装成客户端向服务器发送请求进行握手 。
服务器发回相应,Fiddler获取到服务器的CA证书, 用root证书公钥进行解密, 验证服务器数据签名, 获取到服务器CA证书公钥。然后Fiddler伪造自己的CA证书, 冒充服务器证书传递给客户端浏览器。
与普通过程中客户端的操作相同,客户端根据返回的数据进行证书校验、生成密码Pre_master、用Fiddler伪造的证书公钥加密,并生成HTTPS通信用的对称密钥enc_key。
客户端将重要信息传递给服务器,又被Fiddler截获。Fiddler将截获的密文用自己伪造证书的私钥解开, 获得并计算得到HTTPS通信用的对称密钥enc_key。Fiddler将对称密钥用服务器证书公钥加密传递给服务器。
与普通过程中服务器端的操作相同,服务器用私钥解开后建立信任,然后再发送加密的握手消息给客户端。
Fiddler截获服务器发送的密文,用对称密钥解开,再用自己伪造证书的私钥加密传给客户端。
客户端拿到加密信息后,用公钥解开,验证HASH。握手过程正式完成,客户端与服务器端就这样建立了“信任”
二、不想被pc上一堆杂七杂八的session打扰,我只想安静的看关于Android的session
这个只要关闭pc的代理就好了呀~
点击 Fiddler 左下角的“Capturing”。其实是File > Capture Traffic的快捷键,可以控制是否把 Fiddler 注册为PC系统代理,当左下角显示Capturing时,Capture Traffic是打开的,此时的IE的Internet选项>连接>局域网设置中的代理服务器是勾选的;否则是没有勾选的。 也就是显示了就抓pc的包,不显示就不抓pc的包。
三、认识fiddler中session的快捷图标
快捷图标
去官网也有啊,只不过是英文的哈哈,其实用处也不是很大,大概记住就得了
四、hosts的设置
在测试的时候,难免要配置hosts,连接到测试服务器,但是!总感觉在系统配置的hosts不起作用
fiddler reuses connections, so if there was already an established connection, any change to the HOSTS file might not be noticed. You might try hitting CTRL+X to clear the Web Sessions list and the cache of reused connections.
原来Fiddler 启动时,修改 hosts 的时候是无效的,需要重启 Fiddler才能生效。当 Fiddler 已经建立会话时,任何修改 hosts 的行为都不会被 Fiddler 注意到。
可以通过 Fiddler 的 Tools > HOSTS 处导入本地的 hosts文件。
需要指测试服务器的时候,勾选"Enable remapping of requests for one host to a different host or IP, overriding DNS",否则去掉勾选。
那么问题就来了,我怎么确定自己的请求的是正确的服务器呢?
我需要知道自己请求的ip地址是多少,哈哈
五、FiddlerScript
想说fiddler比charles更加人性化的地方就是,fiddler有一个FiddlerScript文件,可以修改超级多配置
第一次使用FiddlerScript,点击这里 Rules->Customize Rules,然后回弹出是否安装一个编辑器的插件,安装了的话就可以直接在面板中进行修改,不安装就要每次都在txt文档里面修改,而且还不能保证编码格式是utf-8的
FiddlerScript是用C#写的,但是,有很多注释,还有官网可以帮助学习
1. Modifying a Request or Response 修改请求和响应
OnBeforeRequest is called before each request, and OnBeforeResponse is called before each response.可以在OnBeforeRequest和OnBeforeResponse这两个方法中修改请求和响应
2.Performance Testing 测试应用的表现
To test application performance, add rules using FiddlerScript to the OnBeforeResponse function (except where noted).包括限速、显示服务器响应的时间、显示收到请求的时间等
3.Customize Menus 定制菜单栏
To customize menus in Fiddler, add rules using FiddlerScript with Global scope 添加各种菜单或者rule、tool等选项
4.定制session列表
To customize Fiddler's Web Sessions List or to pause specific sessions, add rules using FiddlerScript to the OnBeforeRequest function 可以在OnBeforeRequest中定制会话列表,将某些会话标记为红色、粗体等等或暂停某些特殊的会话
5.暂停
To pause specific sessions, add rules using FiddlerScript to the OnBeforeRequest function 暂停某些对话,在fiddler就终止发送去服务器那边
6.警告
To create alerts for specific sessions, add rules using FiddlerScript. 对于某些特殊的会话发出警告,例如文件丢失的时候发出声音
7.会话列表中添加列
To add custom columns to the Web Sessions List, add rules using FiddlerScript. 添加客户端端口、cookie的值等等这些列
大致了解FiddlerScript其实就可以做很多修改帮助我们改善fiddler了~
六、session中显示服务器ip列
打开脚本编辑器
查找“static function Main()”字符串,然后添加下面这行代码:
FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP",120,"X-HostIP");
官网的教程中有写到添加session列表的列
Alternatively, you can call the AddBoundColumn() method. The first parameter is the name with which the column should be named, and the second parameter is the default width of the column. The third parameter is either a Fiddler Session Flag string, an @-prefixed-header name, or a JavaScript function that returns a string.
自己翻译的:第一个参数:显示列的名字, 第二个参数:默认列宽, 第三个参数:显示的数值,比如一个session有哪些属性,或者是一个返回string的方法
左上角点击保存
然后查看数据的最后一列,出现server ip,把server ip挪动到自己想要看到的地方,大功告成!
再想想可能我还需要添加这个请求来自哪一个客户端?那同样的copy一下代码,把客户端的ip(clientIP)也显示出来了,这样做以后也可以方便看请求是来自哪台机器的,不过需要注意,在重新连上WiFi后,客户端的ip地址随时可能改变
serverIP和clientIP
七、听说fiddler可以限速?
charles限速可以直接点击UI设置,fiddler限速就要靠强大的FiddlerScript了
打开脚本编辑器
搜索m_SimulateModem
然后根据自己的需要修改如下语句
oSession["request-trickle-delay"] ="300";(每上传1KB延迟300ms)oSession["response-trickle-delay"] ="150";(每下载1KB延迟150ms)
Save Script后,勾选rule-performance-Simulate Modem Speeds生效
顺便附上各网络速率表
七、session都是一个颜色啊,看的我眼花,能不能让我一眼就看到你?
由于没有限制抓取的host或者其他原因,有的时候会突然间就冒出一堆请求,为了找到自己想要的那条请求也是很靠眼力啊,估计找久了都眼冒金星了吧
如果可以将经常测试的请求分开颜色显示,那真的是极好的啊!
打开脚本编辑器
找到OnRequestBefore这个方法就能看到sample了
代码中的sample
具体颜色的数值就上网找C#的color表,对应设置即可
保存,应用!
应用之后不同的请求就可以使用不同的颜色标记
科科,我设置的有点花,只是为了展示而已啦...
八、QuickExec用起来
好吧,还是直接上这篇博文先,当然了官网文档还是很多很多介绍,不过用的比较多的,都在文章里已经说了,都是基础的查找等功能,官网上很多其他的命令主要跟断点debug相关。
不过博文中说到的双击session就能直接查看json数据,感觉还是蛮爽的,虽然并不知道
PREFSSETfiddler.ui.inspectors.response.alwaysuse“json”
这行代码是怎么出现的,一度好纠结,在官网上查找关键词并没有找到相关的东西,去搜索之后发现一个fiddler源码,里面有出现fiddler.ui.inspectors.response.alwaysuse,其他发现就木有了
九、与charles的区别
同样作为牛逼的抓包软件,吐槽几个优缺点
fiddler可以通过修改FiddlerScript达到更多的目的,charles不能
charles要花钱,否则每半个小时就要重启一次,还要延时,fiddler免费
平台性,charles是跨平台的(Windows、mac、Linux),fiddler只能在Windows、Linux中使用
十、More
fiddler还有很多诸如AutoResponder、断点调试的功能,不过这些大部分是web工程师的大爱,测试方面暂时不需要用到,所以就没有深入去研究啦~有机会再好好研究
文/刘瞧瞧(简书作者)
原文链接:http://www.jianshu.com/p/18b9c5cb493d
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。