【转】Fiddler抓包指南:结合Proxifier工具
本文转自:https://blog.csdn.net/china_jeffery/article/details/93000824
本文介绍如何使用Fiddler抓取HTTP和HTTPS协议的包,同时还介绍了如何结合Proxifier工具来处理Filddler无法抓取到包的情况。
一、HTTP基本抓包
Fiddler官网下载安装:https://www.telerik.com/fiddler
对浏览器的抓包,就不再赘述,打开这个软件就一目了然了,本文主要讲对普通Windows桌面应用程序的抓包,点击左下角的两个小图标,让Fiddler进入抓包状态,而且作用于[All Processes]
。
Fiddler抓包的原理,实际上就是相当于给windows设置了一个HTTP/HTTPS代理,类似于在IE浏览器中设置了代理,如
[Internet 选项] — [连接] — [局域网设置] — [高级]
中设置代理[127.0.0.1:8888]
,Fiddler在8888
端口提供HTTP/HTTPS代理服务。
二、HTTPS抓包
针对HTTPS的抓包,需要开启Fiddler的HTTPS抓包功能,否则只能看到HTTP请求的内容,因为HTTPS请求的是密文。
在Fiddler中点击[Tools] — [Options] — [HTTPS]
勾选如下设置:
点击[Actions] — [Trust Root Certificate]
让系统信任Fiddler的根证书,这是HTTPS抓包解密的关键,接下来就可以愉快的观看HTTPS请求明文内容了。
三、为什么抓不到有些应用程序的HTTP(s)的包?
开启 [All Processes] 抓包后,我们运行第三方程序,会发现有的HTTP/HTTPS包可以抓到,而有的却抓不到,这是怎么回事?那是因为Fiddler的这种设置全局代理的方式,只对以下几种情况有效:
- IE、Chrome等浏览器。
- 程序使用Windows提供的WinInet库进行HTTP/HTTPS通信。
- 程序内嵌WebBrowser,比较常用的是IE控件和CEF。
例如如果应用程序中使用的是libcurl
库进行HTTP(s)请求,则fiddler就抓不到包了(解决方法下面会介绍),因为libcurl没有使用windows的WinInet库,而是自己实现了http(s)协议的封装。
如果有程序源码,可以在源码中设置Libcurl使用fiddler作为本地代理,如:
curl_easy_setopt(curl, CURLOPT_PROXY, "127.0.0.1:8888");
- 1
四、处理Fiddler无法抓到包的情况
4.1 设置代理
上面说到了,Fiddler抓包的原理是在本机的8888
端口开启HTTP/HTTPS代理,任何通过Fiddler代理的HTTP/HTTPS通信内容都会被解析,那么只要能给目标程序设置HTTP/HTTPS代理,目标程序的HTTP(s)通讯内容就可以被Fiddler抓到。
仔细查看软件设置,其实有些第三方软件比如 [百度网盘] 本身是可以设置HTTP/HTTPS代理的,只要设置为Fiddler的代理端口即可截获它的HTTP/HTTPS通讯内容。
4.2 结合Proxifier
但是有的第三方软件就是没有代理功能,怎么办?既然应用程序不支持设置代理,我们就借助其它软件给它设置代理,比如:
Proxifier: https://www.proxifier.com
以 [网易有道词典] 为例:
在Proxifier中添加[127.0.0.1:8888]
这个Fiddler提供的HTTPS代理服务器
设置Proxifier规则,让 [网易有道词典] 通过代理访问网络。
有一点设置通常容易被忽略,就是在Proxifier中,设置[Profile] — [Name Resolution] — 勾选 [Resolve hostnames through proxy]
,让域名解析的工作交给代理服务器,而不是在Proxifier上解析。默认情况下Proxifier自行解析域名,比如www.baidu.com
解析为180.97.33.108
,然后发请求给Fiddler:
CONNECT 180.97.33.108:443 HTTP/1.1
- 1
这样Fiddler并不知道它请求的是哪个域名,于是返回给客户端的伪造证书时,伪造的是为180.97.33.108颁发的证书,有的客户端会做校验,发现这个证书是颁发给180.97.33.108的,而不是颁发给www.baidu.com的,然后报错处理。
修改Proxifier设置后,把域名解析的工作交给代理服务器,Proxifier会直接向Fiddler发送请求:
CONNECT www.baidu.com:443 HTTP/1.1
- 1
这样Fiddler就知道客户端请求的是 www.baidu.com
,从而返回客户端伪造的www.baidu.com
证书,客户端不报错,Fiddler才能顺利抓包解密。
具体设置步骤如下:
4.3 解决Host为“Tunnel to”的问题
按照4.2中介绍的方法,抓取python请求https://www.baidu.com
的包,此时在fiddler中会显示“Tunnel to”,无法获取到包的内容,如图:
从python的提示中,可以看到是SSL证书验证错误,所以python requests的请求也失败了。
Fiddler之所以能抓到并解密HTTPS包的内容,是因为Fiddler使用了中间人攻击的手段,该手段要能成功实施,有一个前提条件,就是客户端信任Fiddler提供的根证书,之前我们通过[Actions] — [Trust Root Certificate]
让系统信任Fiddler的根证书后,大部分浏览器以及基于WinInet库进行HTTP通信的程序,都会信任操作系统中我们添加的Fiddler根证书。但如果第三方程序使用其它HTTP库进行通信,比如libcurl
,JAVA的URLConnection
库,C#的System.Net.Http
,Python的requests
,这些HTTP库一般自带了一套可信任的SSL根证书,它们不使用操作系统自带的SSL根证书,更不会使用我们向操作系统中添加的Fiddler根证书,于是就验证出错了。
以Python为例,这一点可以在requests文档中得到证实:
https://2.python-requests.org/en/master/user/advanced/#ca-certificates
Requests bundled a set of root CAs that it trusted, sourced from the Mozilla trust store. The certificates were only updated once for each Requests version.
- 1
下面详细给出解决这种问题的2种方法:
- 在请求时禁用证书验证。
- 在请求时,指定自己生成的证书。
4.3.1 请求时禁用证书验证
以python为例:
import requests
requests.get("https://www.baidu.net", verify = False)
- 1
- 2
4.3.2 请求时信任自己的证书
访问http://127.0.0.1:8888/
,下载Fiddler的根证书,如图:
然后使用第三方工具转换成对应库可以支持的证书类型,这里以python的requests
为例,使用openssl工具转换成其支持的.pem
格式:
openssl x509 -inform der -in FiddlerRoot.cer -out fiddler.pem
- 1
import requests
requests.get("https://www.baidu.net", verify = "./fiddler.pem")
- 1
- 2
【转】Fiddler抓包指南:结合Proxifier工具的更多相关文章
- Fiddler 抓包工具总结
阅读目录 1. Fiddler 抓包简介 1). 字段说明 2). Statistics 请求的性能数据分析 3). Inspectors 查看数据内容 4). AutoResponder 允许拦截制 ...
- Charles是Mac的Fiddler抓包工具
windows下面我们经常使用 Fiddler 抓包工具进行代理等一系列操作.然而,在 Mac 下的 Fiddler 勉强能运行,但是其挫的都不想说它了.今天看到朋友推荐这款 Charles Mac下 ...
- Python+Requests接口测试教程(1):Fiddler抓包工具
本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...
- Fiddler抓包工具使用详解
一.Fiddler简介 Fiddler是最强大最好用的Web调试工具之一, 它能记录所有客户端和服务器的http和https请求.允许你监视.设置断点.甚至修改输入输出数据.Fiddler包含了一个强 ...
- 【工具篇】抓包中的王牌工具—Fiddler (1-环境搭建)
导言 在现在高速发展的互联网时代,抓包工具被广泛应用在软件开发的项目中,Fiddler可谓是当下主流的抓包工具之一.测试人员用它来抓包.回放测试记录,构造发包测试用例,开发人员用来定位问题,其强大的功 ...
- 【工具篇】抓包中的王牌工具—Fiddler (2-工具介绍)
Fiddler 抓包工具界面简介 1) 字段说明 Fiddler想要抓到数据包,要确保Capture Traffic是开启,在File –> Capture Traffic. 开启后再左下角会有 ...
- Fiddler 抓包工具入门
转自:https://www.cnblogs.com/yyhh/p/5140852.html 序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操 ...
- Mac 下安装Fiddler抓包工具
需求 我们都知道在Mac电脑下面有一个非常好的抓包工具:Charles.但是这个只能抓代理的数据包.但是有时候想要调试本地网卡的数据库 Charles 就没办法了.就想到了在windows下面的一个F ...
- Fiddler抓取https请求 & Fiddler抓包工具常用功能详解
Fiddler抓取https请求 & Fiddler抓包工具常用功能详解 先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...
随机推荐
- vue的package.json文件理解
参考文档: https://www.cnblogs.com/tzyy/p/5193811.html#_h1_0 https://www.cnblogs.com/hongdiandian/p/83210 ...
- (一)将mockjs集成到VUE中后,怎样根据接口入参返回mock结果
1)安装mockjs,这一步跳过 2)在项目中建立mock模块,笔者的目录结构如下 mock模块与接口模块一一对应,有一个接口,就有一个mock 3)编写登陆模块mock接口,代码如下: import ...
- 『一维线性dp的四边形不等式优化』
四边形不等式 定义:设\(w(x,y)\)是定义在整数集合上的的二元函数,若对于定义域上的任意整数\(a,b,c,d\),在满足\(a\leq b\leq c \leq d\)时,都有\(w(a,d) ...
- 简单的C#日志记录和弹出提示
记录这个博客的想法只有两点, 一,在使用webserver的时候如果你不好调用本地server端,那么你可以启用日志来查看异常.当然也可以调用本地的server端.这里简单说一下.不是本文的重点. 发 ...
- vs2019 netocore项目本地程序ip地址访问需修改的配置文件
IISPress启动项目后,打开IISPress托盘可以看到当前项目 根据图中标识出来的applicationhost.config文件路径,一般为你的项目解决方案目录下的.vs\解决方案文件夹\co ...
- 1.ZooKeeper ACL权限控制
参考:https://blog.csdn.net/liuxiao723846/article/details/79391650 ZK 类似文件系统,Client 可以在上面创建节点.更新节点.删除节点 ...
- Nginx反向代理其他使用方式
Nginx反向代理在生产环境中使用很多的. 场景1: 域名没有备案,可以把域名解析到香港一台云主机上,在香港云主机做个代理,而网站数据是在大陆的服务器上. 示例1: server { listen 8 ...
- python的new与init
基于文章:Why is init() always called after new()? 特别说明: 这篇文章的灵感来源于stackoverflow的一个提问,准确说,我只是做了些知识梳理的工作,对 ...
- Qt--多线程间的互斥
一.多线程间的互斥 临界资源--每次只允许一个线程进行访问的资源 线程间的互斥--多个线程在同一个时刻需要访问临界资源 QMute类是一把线程锁,保证线程间的互斥--利用线程锁能够保证临界资源的安全性 ...
- Kafka消费者组静态成员(static consumer member)
Kafka 2.3发布后官网的Consumer参数中增加了一个新的参数:group.instance.id.下面是这个参数的解释: A unique identifier of the consume ...