众所周知https技术诞生以来,一个很重要的作用就是加密通信内容。所以在项目团队将业务站点实施完https改造以后,原先使用fiddler进行抓包的美好生活到头了。其实fiddler本身是支持对于https请求的抓包的,同时还能在开发环境不支持https的情况下,将https请求转发到http请求上。 下面让我带大家一起走进科学,只需要对fiddler加点一丢丢特技,让它能够在https的环境下duang起来。 

一、启用Fiddler的https捕获功能

打开Fiddler,依次选择Tools->Fiddler Options->HTTPS,勾选“Capture HTTPS CONNECTs”和“Decrypt HTTPS traffic”。点击“OK”以后Fiddler会弹出一个对话框问你是否要让Windows信任Fiddler生成的自签证书,选择“Yes”以后,还会弹出一些对话框,直接“Yes”或“Ok”即可。

将PC浏览器的代理设置为127.0.0.1:8888(Fiddler默认代理)以后,随便访问一个https网站就可以在Fiddler中看到对应的请求,和正常访问http几乎相同。Reference:Fiddler这里其实是利用类似中间人欺骗的方法,让系统信任Fiddler生成的自签证书,之后所有通过Fiddler的https请求均会被Fiddler“篡改”重新使用Fiddler生成的证书加密,以达到监听https的目的。

二、在手机上安装Fiddler证书(以iOS为例)

在iOS中使用全民Wi-Fi或类似技术连接上Fiddler,并设置代理服务器。然后打开浏览器,输入网关IP(即设置的代理服务器IP,PC的IP地址)+:8888。例如我的手机在连接上全民Wi-Fi以后,分配到的网关IP是127.16.0.1,那么直接在Safari中输入 http://127.16.0.1:8888 ,浏览器会打开如下的页面:点击页面最下方的FiddlerRoot certificate,iOS会打开安装证书页面:点击右上角Install,iOS会让你输入手机的PIN密码。这时iOS可能会弹出一个Warning/警告信息,提醒你正在添加的证书无法验证。忽略之,继续点上角的Install即可安装完成。完成安装证书以后,就可以在iOS上直接访问https地址,所有的请求对于Fiddler来说也都是透明的了。 如果需要删除之前添加的证书,只需要在iOS上打开“Settings”->“General”->"Profile",当中列出了用户手机上已经安装的证书,选择“DO_NOT_TRUST_FiddlerRoot”删除之即可。

三、瞒天过海让nodejs直接支持https

nodejs一种比较主流的架构是在服务器上直接运行一个非80/443端口的服务,再使用nginx反向代理对外提供服务。用这种方法nodejs层面完全不需要考虑https及相关的技术问题,所有的https请求均由nginx去处理。在这种情况下,我们的开发环境一般不会额外安装nginx去处理https请求,那么我们需要如何让nodejs支持https请求呢?

我们知道https通信在开始时会发送一个METHOD为CONNECT的请求,让服务器将证书以及相关的信息返回给浏览器,在没有得到这些信息之前,浏览器是不会信任服务器发来的任何数据的。So现在我们要让Fiddler帮我一起骗过浏览器,让他心甘情愿把数据交出来。

打开Fiddler,在右侧的选项卡中找到FiddlerScript页签(没有找到FiddlerScript页签的同学请移步 http://www.telerik.com/download/fiddler/fiddlerscript-editor 下载安装即可),从Go To后的下拉列表中选择“OnBeforeRequest”。在这里我们可以看到很多很多的。。。。。代码,然后都不用管它,直接拉到OnBeforeRequest方法的结尾。

FiddlerScript使用的语言JScript.Net是一个以JavaScript为基础,长得有点像C#,Editor和VB很像的一个杂交体,本质上来说和JavaScript差别不大,有兴趣的同学可以参考 《Fiddler (二) Script 用法》 这篇文章。

在OnBeforeRequest方法的结尾加入如下代码:

static function OnBeforeRequest(oSession: Session){
var hosts = 'zkd.me develop.dog';
FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
if(hosts.indexOf(oSession.host) > -1){
FiddlerApplication.Log.LogFormat("Capture session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
if(oSession.HTTPMethodIs('CONNECT')){
FiddlerApplication.Log.LogString('create fake tunnel response');
oSession['x-replywithtunnel'] = 'FakeTunnel';
return;
} if (oSession.isHTTPS){
FiddlerApplication.Log.LogString('switch https to http request');
oSession.fullUrl = oSession.fullUrl.Replace("https://","http://");
oSession.port = 80;
} FiddlerApplication.Log.LogFormat("Processed session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
}
FiddlerApplication.Log.LogFormat("Logger session {0}, Url: {1}, isHttps: {2}, port: {3}", oSession.id, oSession.fullUrl, oSession.isHTTPS, oSession.port);
}

hosts变量定义的域名就是我们想让Fiddler帮我们一起欺骗浏览器的域名。点击FiddlerScript界面左上角的“Save Script”,伴随着一声“滴咚”,配置就生效了。

这段代码的作用是判断如果这些指定的域名上有从浏览器传来CONNECT的请求时,直接返回一个假的Response,这时Fiddler不会再试图去让请求的实际响应者回应这个CONNECT请求,而是自己返回了一个请求。浏览器在收到这个请求以后不明就里,认为是服务器已经返回了安全信息,于是便愉快地继续发送请求。Fiddler在收到之后的请求,会将URL中的https替换为http,端口强制更换为80,再发给请求的实际响应者。 下图可以比较容易看出Fiddler在这一过程中扮演的角色。总之,只要通过上述不太复杂这一系列的特技,就可以让Fiddler帮助我们在https环境下方便地进行debug,大家学会了吗?

使用Fiddler抓包调试https下的页面的更多相关文章

  1. fiddler抓包工具 https抓取 ios手机端抓取

    fiddler抓包工具 https抓取 ios手机端抓取  转载链接:https://www.cnblogs.com/bais/p/9118297.html   抓取pc端https请求,ios手机端 ...

  2. Fiddler抓包调试前端脚本代码

    0.写在前面的话 之前看了阮一峰老师关于互联网协议入门的博客,受益匪浅,接着再去体会了下HTTP协议,就想着看实际网络访问中的那些HTTP请求头和响应是什么样的.Chrome的调试工具的Network ...

  3. Java代码里利用Fiddler抓包调试设置

    Fiddler启动时已经将自己注册为系统的默认代理服务器,应用程序在访问网络时会去获取系统的默认代理,如果需要捕获java访问网络时的数据,只需要在启动java程序时设置代理服务器为Fiddler即可 ...

  4. Fiddler抓包学习——https请求的抓取

    第一步:设置Fiddler  windows下安装证书 打开fiddler 查看证书是否安装 说明已安装成功 设置端口号(下面手机设置代理所需要的) 第二部  手机端安装证书 通过fiddler查看电 ...

  5. Mac 下安装Fiddler抓包工具

    需求 我们都知道在Mac电脑下面有一个非常好的抓包工具:Charles.但是这个只能抓代理的数据包.但是有时候想要调试本地网卡的数据库 Charles 就没办法了.就想到了在windows下面的一个F ...

  6. Fiddler抓取https请求 & Fiddler抓包工具常用功能详解

    Fiddler抓取https请求 & Fiddler抓包工具常用功能详解   先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...

  7. MAC下安装Fiddler抓包工具

    需求 我们都知道在Mac电脑下面有一个非常好的抓包工具:Charles.但是这个只能抓代理的数据包.但是有时候想要调试本地网卡的数据库 Charles 就没办法了.就想到了在windows下面的一个F ...

  8. 谈iOS抓包:Mac下好用的HTTP/HTTPS抓包工具Charles

    在Mac下做开发,用Fiddler抓包由于离不开Windows比较痛苦,还好有Charles,到官网http://www.charlesproxy.com/可下载到最新版本(若不支持rMBP可拖到Re ...

  9. 前段时间碰到的一些问题(免费WiFi设置+fiddler对手机进行抓包+fiddler抓不到https的请求)

    这段时间转入移动端测试,对这块比较陌生,工作开展起来比较困难,所以好多东西都只是以解决问题为第一目标,没有去细细推敲其中原理,可能会有些语无伦次之感,但还是记一下当时解决问题的大致思路,供以后参考. ...

随机推荐

  1. Go语言Web框架gwk介绍 (一)

    今天看到Golang排名到前30名了,看来关注的人越来越多了,接下来几天详细介绍Golang一个web开发框架GWK. 现在博客园支持markdown格式发布文章么?后台的编辑器不太好用嘛. GWK ...

  2. __attribute__ ((attribute-list))

    http://blog.csdn.net/ithomer/article/details/6566739 构造与析构: #include <stdio.h> #include <st ...

  3. C#实现ATM自动取款机

    本篇用C#实现ATM自动取款机的一些功能.面临的第一个问题是:如何把与自动取款机相关的有形的.无形的方面抽象出来.大致如下: (1)关于用户帐号的类:Account(2)关于银行数据库的类:BankD ...

  4. MVC无限级分类02,增删改查

    继上一篇"MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射",本篇开始MVC无限级分类的增删改查部分,源码在github. 显示和查询 使用datagrid显 ...

  5. 使用jdbc的缺点

    使用jdbc开发时有以下缺点 1,数据库连接,使用时就创建,不使用就释放,对数据库进行频繁连接开关和关闭,造成数据库资源浪费,影响数据库的性能 解决:使用数据库连接池管理数据库的连接 2,sql语句使 ...

  6. linux 查找文件命令

    find -name 文件名    在当前目录下查找 find -name nginx.conf

  7. JAVA JDOM解析XML 带CDATA数据

    import java.io.StringReader;import java.util.*; import org.jdom.Document;import org.jdom.Element;imp ...

  8. 序列化人人网框架下的DAO?也就是在Spring下序列化DAO的问题(spring+quartz集群下)

    人人网框架地址:http://code.google.com/p/paoding-rose/ 问题发生: 用Quartz作集群时用JobDataMap传递DAO,提示DAO未序列化,可框架的DAO为接 ...

  9. 分享JavaScript获取网页关闭与取消关闭的事件

    在做Web开发时,我们经常用到页面关闭事件onbeforeunload,可以给用户一个选择放弃关闭的机会,就比如这个博客编辑器.如果用户选择了离开,那么onunload事件自然会触发:但若用户选择了取 ...

  10. 洛谷P1772 [ZJOI2006]物流运输 题解

    题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...