fiddler+proxifier_fiddler抓包工具

fiddler+proxifier_fiddler抓包工具本文介绍如何使用Fiddler抓取HTTP和HTTPS协议的包,同时还介绍了如何结合Proxifier工具来处理Filddler无法抓取到包的情况。一、HTTP基本抓包Fiddler官网下载安装:https://www.telerik.com/fiddler对浏览器的抓包,就不再赘述,打开这个软件就一目了然了,本文主要讲对普通Windows桌面应用程序的抓包,点击左下角的两个小图标,让Fi…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

本文介绍如何使用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");

Jetbrains全家桶1年46,售后保障稳定

四、处理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

这样Fiddler并不知道它请求的是哪个域名,于是返回给客户端的伪造证书时,伪造的是为180.97.33.108颁发的证书,有的客户端会做校验,发现这个证书是颁发给180.97.33.108的,而不是颁发给www.baidu.com的,然后报错处理。
修改Proxifier设置后,把域名解析的工作交给代理服务器,Proxifier会直接向Fiddler发送请求:

CONNECT www.baidu.com:443 HTTP/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.

下面详细给出解决这种问题的2种方法:

  1. 在请求时禁用证书验证。
  2. 在请求时,指定自己生成的证书。

4.3.1 请求时禁用证书验证

以python为例:

import requests
requests.get("https://www.baidu.net", verify = False)

4.3.2 请求时信任自己的证书

访问http://127.0.0.1:8888/,下载Fiddler的根证书,如图:
在这里插入图片描述
然后使用第三方工具转换成对应库可以支持的证书类型,这里以python的requests为例,使用openssl工具转换成其支持的.pem格式:

openssl x509 -inform der -in FiddlerRoot.cer -out fiddler.pem
import requests
requests.get("https://www.baidu.net", verify = "./fiddler.pem")
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226865.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jquery手机号码正则验证

    jquery手机号码正则验证<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scripttype="text/javascript"src=&qu

    2022年4月30日
    42
  • springBoot跨域注解@CrossOrigin

    springBoot跨域注解@CrossOriginSpringFramework4.2GA为CORS提供了第一类支持,使您比通常的基于过滤器的解决方案更容易和更强大地配置它。所以springMVC的版本要在4.2或以上版本才支持@CrossOrigin;springBoot跨域注解:@CrossOrigin在controller控制类上方加注解;spring注解@CrossOrigin不起作用的原因1、是s…

    2022年6月29日
    74
  • js判断是否是数字——isNaN()函数

    js判断是否是数字——isNaN()函数isNaN  返回一个Boolean值,指明提供的值是否是保留值NaN(不是数字)。  NaN即NotaNumber  isNaN(numValue)  必选项numvalue参数为要检查是否为NAN的值。  说明  假如值是NaN,那么isNaN函数返回true,否则返回false。使用这个函数的典型情况是检查parseInt

    2022年6月18日
    51
  • Whoosh_emil是什么意思

    Whoosh_emil是什么意思先了解基本概念和步骤:QuickStart   Whoosh是一个索引文本和搜索文本的类库,他可以为你提供搜索文本的服务,比如如果你在创建一个博客的软件,你可以用whoosh为它添加添加一个搜索功能以便用户来搜索博客的入口下面是一个简短的例子:>>>fromwhoosh.indeximportcreate_in>>>fromwhoos…

    2025年8月21日
    3
  • jquery ajax中success中的跳转问题

    jquery ajax中success中的跳转问题注意起来一个情况:ajax+submit+同步—-就是你用ajax请求服务器,而且用的是同步的方式,并且你是通过点击了type类型为submit的按钮来触发这个ajax。这个时候,首先你点击了submit,它会提交表单,但是由于你用了ajax的同步操作,submit的提交被阻塞,ajax先执行,这个时候,如果你在ajax的回调函数(如:success)中写了document.locatio…

    2022年6月13日
    49
  • 什么是同构(无向完全图有几种非同构的圈)

    http://162.105.81.212/JudgeOnline/problem?id=2040  
    题意给定两个有向图,找出其同构的对应点,并输出其对应的序列。。。
     
    介于该题的点数<=25 个 直接dfs搜索就可以解决问题,但是剪掉还是必要的;
    1,对于在途中的出度 和入读都唯一的点,那么就可以直接的判断其对应关系,
    2, 对于当前点u,他与已经确定对应关系的点 i 的关系 必须和正准备和u匹配的点v和 点

    2022年4月14日
    380

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号