二、fiddler设置
- Tools->Options->HTTPS.默认是只抓取http,这里需要勾选https
- 设置connection,这里的端口号默认为8888,可修改(这里端口号在后边手机设置用到,若电脑上有其它应用使用该端口,最好区分开,可能会有影响);勾选Capture FTP requests和Allow remote computers to connect,抓取ftp请求和允许手机上抓取到信息发送到fiddler。
排坑:保存后需重启fiddler生效。
三、手机设置、证书安装
- 使手机和电脑在同一局域网内
- 查看电脑ip地址:打开cmd,输入ipconfig回车找到电脑ip
- 手机打开wlan,在连接的wifi上找到手动代理,输入电脑ip和前面fiddler配置的端口号。
- 手机浏览器进入:http://10.10.20.160:8888,下载fiddler证书安装。(此处若出现错误见底部解决方式)
- 手机安装完证书后,操作手机,电脑上fiddler就能看到抓取的信息啦!
排坑:下载证书时可能会出现此错误 No root certificate was found. Have you enabled HTTPS traffic decryption in Fiddler yet?
解决方法: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 09/05/2012
如下图,提示成功后即可重新进入下载安装证书!
四、异常情况分析
fiddler抓不到的情况:
fiddler并不是支持全部协议,目前已知的有http2、tcp、udp、websocket等,如果应用走了以上协议,那么fiddler是抓不到的;http2是因为fiddler是基于.net framework实现的,因为.net framework不支持http2,所以fiddler无法抓取http2。
证书写死在app中,fiddler不能抓取:fiddler抓包的原理是中间人gong’j攻击,也就是说,两头瞒,欺骗客户端和服务端,如果https证书写死在App里,也就是说,App不信任fiddler颁发给他的证书,App只信任自己的证书,fiddler没法瞒客户端了,因此fiddler也就抓取不到包了(如果自己开发的App,开发调试方便起见,可以使用类似wireshark的工具导入服务器证书,抓包解密)
排查过程:
确认能否抓到手机浏览器的百度首页:因为百度是https加密的,所以如果配置正确肯定是可以抓取的。
重新安装证书:如果抓不到,可以确定是配置有问题。核实fiddler使用certmarker插件并且在手机上也安装了;如果已安装,则重新安装。如果还不工作,那么,重新生成证书,电脑和手机都要重新安装,然后重启fiddler。
手机设置代理后,无法访问网络,如断网般…
(1)打开注册表,在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Fiddler2下创建一个DWORD(32位),值设置为80(十进制)
(2)对FiddlerScript rule,点击Rules—Customize Rules,用ctr+f 查找OnBeforeRequest方法,在此方法下ti添加一行代码:此处的“webserver”:端口为上面设置的自定义端口号。
if (oSession.host.toLowerCase() == “webserver:8888”){ oSession.host = “webserver:80”;}
1
五、Fiddler展示服务器IP
Fiddler默认配置中看不到服务器IP的,如何修改如下:
1、Fiddler—Rules—Customize Rules(和上面调试所展示出的文件一致)
2、在此Js文件中,搜索static function Main()
3、添加一行脚本