Fiddler是微软推出的一款很强大很好用的web调试工具。它能记录所有客户端和服务器的HTTP和HTTPS请求,允许你监视,设置断点,甚至修改输入输出数据。
Fiddler还包含了一个强大的基于事件脚本的子系统,并且能使用.net语言进行扩展。
本文将主要介绍Fiddler在抓取移动终端数据包方面的应用。
与另一款常用的手机端抓包工具Wireshark相比,Fiddler有很多类似的地方。譬如:适用于各种有wifi功能的终端(手机、平板等),且设备均无需root或越狱;均使用PC端来获取和展示所抓的数据包。不同之处在于,Wireshark是通过使被测终端连接作为wifi热点的PC无线网络来抓取数据包,而Fiddler是通过将PC与被测终端置于同一局域网(通常是同一个无线网络)下并设置被测终端网络代理来抓取数据包。
相较于Wireshark,Fiddler的优势在于可以拦截发出或者收到的HTTP/HTTPS包,并可以修改其Request和Response数据。然而,Fiddler的局限性也非常明显,它只能用于抓取HTTP和HTTPS包,而不能抓取其他类型的网络包。
Fiddler是以代理web服务器的形式工作的。
从上图可以看出,Fiddler使用代理方式,让客户端所有数据流都发给它,然后转发给目标server,目标server的回包发给Fiddler,再由Fiddler转发给客户端。所以不管是Request还是Respone数据包都经过了Fiddler,Fiddler能进行截获和分析。正是它这样架构优势,才有其他工具无法做到的强大功能,只要是支持HTTP代理配置的终端,均支持抓包。
Fiddler工作于OSI七层网络模型中的应用层,使用代理地址:127.0.0.1, 端口:8888。当启动Fiddler时会自动设置代理, 退出的时候它会自动注销代理,这样就不会影响别的程序。不过如果Fiddler非正常退出,这时候因为Fiddler没有自动注销,会造成网页无法访问。解决的办法是重新启动下Fiddler。
首先,需要确保安装Fiddler的电脑与待抓包手机在同一局域网内(通常是连同一个wifi),因为要将手机的代理指向PC端,不能互相访问是不行的。
使用Fiddler抓取手机端数据包的步骤如下:
1) Fiddler开启远程连接。Fiddler主菜单-->Tools-->Fiddler Options-->Connections Tab页,勾选Allow remote computers to connect
2) 重启Fiddler
3) 获取PC的IP地址
4) 设置手机代理,指向PC的IP地址,端口号填Fiddler默认的8888,保存即完成了代理的设置,此时就可以用Fiddler去抓取手机端的HTTP数据包了
Fiddler界面布局如下:
Inspectors tab下有很多查看Request或Response的消息。其中Raw Tab可以查看完整消息,Headers Tab只查看消息中的Header。
设置断点有如下两种方法:
法一:
1) 打开Fiddler,点击Rules
2) Automatic Breakpoints
3) Before Requests
这种方法缺点在于会中断所有的会话。
其取消方法为:Rules-->Automatic Breakpoints-->Disabled。
法二:
1) 命令行输入命令:bpu msdkdev.qq.com
2) 这种方法只会中断向msdkdev.qq.com发送的Request
其取消方法为:命令行输入 bpu。
设置断点的方法也有两种:
法一:
1) 打开Fiddler,点击Rules
2) Automatic Breakpoints
3) After Responses
这种方法的缺点在于会中断所有的会话。
其取消方法为:Rules-->Automatic Breakpoints-->Disabled
法二:
1) 命令行输入命令:bpafter msdktest.qq.com
2) 这种方法只会中断msdktest.qq.com返回的Response
其取消方法为:命令行输入bpafter。
选中2个会话,右键点击Compare,可以用WinDiff来比较两个会话的不同。
快捷键CTRL+F 打开Find Sessions对话框,输入关键字进行查询。
还可以使用颜色来标识查询到的会话。
选择想要保存的会话,右键save-->Selected Sessions。
某些Response中的HTML是乱码的,这一方面可能是因为HTML被加密了,我们可以通过如下方法进行解码:
1) 点击Response Raw上方的"Response is encoded any may need to decoded before inspection.Click here to transform"。
2) 选中工具栏中的"Decode",这样会自动解码。
Fiddler 包含了一个脚本文件可以自动修改HTTP Request 和Response.这样我们就不需要手动地下"断点"去修改了。
实际上它是一个脚本文件CustomRules.js ,位于: C:\Users\[your user]\My Documents\Fiddler2\Scripts\CustomRules.js 下。你也可以在Fiddler 中打开CustomRules.js 文件,启动Fiddler, 点击菜单Rules->Customize Rules。
Fiddler Script 的官方帮助文档必须认真阅读, 地址是:http://www.fiddler2.com/Fiddler/dev/ScriptSamples.asp
Fiddler可以截获各种移动终端发出的HTTP/HTTPS请求,还能截获各种浏览器发出的HTTP/HTTPS请求。具有功能强大,完全免费,适用于所有的平台,且适用于所有的浏览器等优点,是一款强大实用且好用的抓包工具。
Fiddler官网地址:http://www.telerik.com/fiddler