Fiddler抓包全攻略:电脑端、手机真机与雷电模拟器HTTPS解密实战
2026/9/18 11:34:41 网站建设 项目流程

问你个问题:你的手机App,每次打开都和后端服务器说了哪些“悄悄话”?换成工程师的说法,就是它发了什么请求、带了什么参数、拿到了什么返回。https抓包工具就是干这个的,把流量从设备里“请”出来,放到电脑上看清楚。更进阶的玩法,是用全局抓包软件把手机流量,甚至安卓模拟器(比如雷电模拟器)里的流量也一并收进来。

这一套东西,最早是我做接口联调时被逼着学的。后端说“我接口没问题”,前端说“我参数都传了”,两边扯皮半小时,我用抓包软件一看,App发的是POST,后端在等GET,一分钟定位。后来做测试巡检、爬虫开发、小程序调试,也全靠这套方法。这篇我直接把电脑端抓包、真机抓包、雷电模拟器抓包三条线完整串一遍,原理讲透、步骤给全、坑也帮你踩平,适合正在做接口调试、客户端测试、爬虫开发,或者纯粹想搞懂手机流量到底是怎么回事的朋友。

1. 想抓HTTPS,先弄明白抓包在干什么

1.1 HTTPS多了什么,让抓包变难了

早些年抓包很简单,HTTP是明文协议,工具装上就能看到全部内容。现在不一样了,主流站点和App全面切到HTTPS,流量是加密的,你拿Wireshark去抓,看到的是一堆看不懂的TLS握手包和密文,连请求的URL都拼不出来。

HTTPS比HTTP多出来的核心东西,是TLS加密层。客户端和服务器要先完成一次“握手”,协商出对称加密密钥,之后传输的内容全部加密。我用一个生活化类比来解释:HTTP相当于你寄了一张明信片,路上每个经手人都能看见内容;HTTPS相当于把明信片装进保险箱,钥匙只有寄件人和收件人有。

那抓包工具凭什么还能看?因为它玩了一手“中间人”。它在你设备和服务器之间插了一脚,对设备来说,它假扮服务器;对服务器来说,它假扮设备。两端的加密隧道都正常建立,但中间的抓包工具两头都能解密,于是内容就在你眼前摊开了。这里最关键的一步,是设备得信任抓包工具自己生成的那张“临时身份证”——根证书。这就是为什么所有HTTPS抓包教程都在反复强调装证书:不装证书,中间人就没法合法“拆箱”。

1.2 四款主流抓包工具对比,新手怎么选

Windows平台上常见的抓包工具就那几款,我直接给一张对比表,看完你心里就有数了。

工具平台核心特点最擅长的场景
FiddlerWindows为主,有Mac版基于HTTP代理,HTTPS解密、改包、脚本扩展都强,免费电脑端全局抓包、手机流量、模拟器流量,教程最多,遇到问题好搜
CharlesWin/Mac/Linux界面清爽,证书管理顺手,稳定性好macOS开发者日常抓包,前端联调
WiresharkWin/Mac/Linux网卡级报文分析,不依赖代理看TCP/UDP底层问题、协议分析,不适合直接看业务请求
mitmproxy跨平台命令行Python可编程,能写脚本处理流量自动化测试、批量流量处理

我做Windows端开发调试,用得最多的就是Fiddler。原因很实在:免费、功能全、支持命令行和脚本,而且雷电模拟器、真机、电脑浏览器三端都能覆盖。Charles当然好,但收费;Wireshark不适合日常看接口;mitmproxy对新手门槛高。所以这篇文章的主线工具就是Fiddler,学会了它,其他工具触类旁通。

1.3 抓包工具的三大核心动作:代理、证书、解密

一个合格的HTTPS全局抓包流程,本质上就三件事。你后面所有配置,都是围绕这三件事展开的。

第一件,接管代理。Fiddler启动后会在本机监听一个端口(默认8888),同时把设备的系统代理指到127.0.0.1:8888。这样设备上所有HTTP和HTTPS请求都会先经过Fiddler,而不是直接发出去。

第二件,生成并安装根证书。Fiddler第一次开启HTTPS解密时,会自动生成一张CA根证书。设备信任了这张证书,才认Fiddler现场签发的那些“临时域名证书”。这一步是HTTPS抓包和HTTP抓包最本质的区别。

第三件,解密和转发。客户端和Fiddler之间走一条加密通道,Fiddler和服务器之间再走另一条加密通道,中间的密文被还原成明文,展示在会话列表里。

这个设计还有个好处:抓包工具完全不碰业务数据本身,它只是“在中间看了一眼”。所以配置好之后,你不需要改App代码,也不用动服务器,纯靠网络层的代理转发就能完成抓包。

2. 电脑端全局抓包:Fiddler完整配置流程

2.1 安装Fiddler并开启HTTPS解密

Fiddler的安装没什么好说的,去官方渠道下载Fiddler Classic版本,一路Next。装完第一件事不是急着抓包,而是先打开HTTPS解密开关。

打开主界面后,进入Tools > Options > HTTPS,你会看到几个选项。我把建议的勾选状态直接列出来:

  • Capture HTTPS CONNECTs:勾选。这个选项决定Fiddler是否接收HTTPS连接请求。
  • Decrypt HTTPS traffic:勾选,下拉框选from all processes。注意,如果不选all processes,部分系统服务或后台进程的请求就抓不到。
  • Ignore server certificate errors:勾选。开发调试时,很多测试环境证书不正规,不勾的话会频繁报证书错误。

第一次勾选Decrypt HTTPS traffic,Fiddler会弹窗询问是否信任它生成的根证书,点Yes。接着导出证书备用:回到HTTPS设置页,点Actions > Export Root Certificate to Desktop,桌面上会多出一个FiddlerRoot.cer文件,后面电脑端、手机端、模拟器装证书都用得上。

这里有个小细节:改完HTTPS设置后,最好完全退出Fiddler再重新打开。我遇到过不少次,配置改了但是没生效,一看Fiddler还挂着旧配置,重启之后立刻正常。

2.2 全局抓包模式:接管系统代理

很多人对“全局抓包”有误解,以为是把网卡的所有流量都拦截下来。其实Fiddler的全局抓包,主要靠的是接管Windows的系统代理。

Windows上Chrome、Edge这类主流浏览器,默认读取系统代理设置。Fiddler启动后,会自动把系统代理设为127.0.0.1:8888,所以你开浏览器访问任何网站,流量都会先过Fiddler。你可以打开Windows设置,在网络和Internet里找到代理,会看到手动代理那一栏已经被填上了。

想确认Fiddler是否正常工作,最简单的办法是打开浏览器访问一个HTTPS网站,比如常见的新闻门户或搜索引擎。切回Fiddler,左侧会话列表应该刷出来一票请求,里面既有CONNECT开头的连接记录,也有具体的GET/POST请求。

浏览器如果提示证书不受信任,说明Windows还没信任Fiddler生成的根证书。双击桌面的FiddlerRoot.cer,选择安装到“受信任的根证书颁发机构”,按提示完成即可。

这里有个容易踩的坑:如果你电脑上装了多个代理类工具,它们可能会互相抢系统代理设置。Fiddler开着,别的工具把系统代理改走了,Fiddler就抓不到包。所以抓包前先看一眼系统代理是不是指向127.0.0.1:8888,这个是排查抓包失效的第一顺位检查项。

2.3 看懂抓包结果:会话列表与Inspectors

Fiddler装好、代理生效之后,你会面对满屏的会话记录。看不懂这些记录,抓包就是白抓。

会话列表从左到右的几列比较关键:

  • Result:HTTP状态码,200是正常,404和500需要关注。
  • Protocol:HTTP还是HTTPS。
  • Host:请求发给哪个域名。
  • URL:具体路径和查询参数。
  • Process:哪个进程发出来的请求,比如chrome.exe还是某个App,排查后台请求很有用。
  • Body和Caching:响应体积和缓存情况。

想看一条请求的完整内容,点一下这条会话,右侧Inspectors面板会分成上下两块:上面是请求(Request),下面是响应(Response)。请求里重点看Headers里的User-Agent、Content-Type,以及Body里的表单参数或JSON。响应里重点看状态行、响应头,以及JSON格式的返回内容。

Fiddler还几个高频操作,新手必须记住:

  • 筛选域名:顶部Filters页签,勾选Use Filters,在Host区域填入目标域名,比如www.example.com。不筛选的话,数据量大到你根本找不到目标请求。
  • 会话定位:底部QuickExec命令行输入?关键字,回车后自动筛选URL里包含关键字的会话,比Filter更快。
  • 请求重放:右键任一请求,Replay > Reissue Requests,Fiddler会原样再发一次,调试接口返场率极高。
  • 保存响应:右键请求,Save > Response,可以把返回内容存成文件,做数据快照。

3. 真机流量怎么抓:手机代理与证书设置

3.1 手机与电脑同一局域网,配置WLAN代理

电脑端抓包只是热身,很多人真正想要的是抓手机流量。原理其实一样:让手机上的请求也经过电脑上的Fiddler。

第一步,保证手机和电脑连在同一个局域网。比如电脑连的是家里路由器WiFi,手机也连同一个;如果你用的是手机热点,电脑也必须连手机热点,否则两边不在同一网络,代理根本不通。

第二步,查电脑IP。Windows下打开命令行,敲ipconfig,找到当前网卡的IPv4地址,记下来,一般是192.168开头的内网地址。

第三步,确认Fiddler允许远程连接。进入Tools > Options > Connections,勾选Allow remote computers to connect。这一步很多人漏掉,不勾的话手机连上来会被拒绝。改完设置记得重启Fiddler。

第四步,在手机WiFi上配置手动代理。Android和iOS的入口略有差异,但逻辑一致:找到当前连接的WiFi,长按或点详情,进入修改网络,把代理改成手动,主机名填电脑的IP,端口填8888,保存。

配置好后,打开手机浏览器访问 http://电脑IP:8888 ,能打开一个Fiddler Echo Service页面,就说明代理通了。页面上面有个FiddlerRoot certificate的下载链接,点它下载证书。这个证书装不上,后面HTTPS内容全是乱码,所以下一步非常关键。

3.2 Android证书安装与Android 7.0的坑

Android手机装抓包证书这件事,是新手翻车重灾区。原因有两个:一是各家厂商的证书安装入口不一样,二是从Android 7.0开始,系统默认不信任用户安装的证书。

先说入口。华为、小米、OPPO、vivo这些主流厂商,一般都在“设置 > 安全 > 更多安全设置 > 加密与凭据 > 安装证书”里,选择刚才下载的Fiddler证书文件。装的时候会让你设一个锁屏密码或确认PIN码,按系统提示操作就好。

再说Android 7.0的坑。7.0之后,普通App默认只信任系统证书,不信任用户手动安装的证书。也就是说,你在手机上装了Fiddler证书,浏览器流量能抓,但很多第三方App的HTTPS流量依然解不开,表现是Fiddler里能看到CONNECT连接,但展开全是密文或握手失败。

怎么解决?两个方向。

如果App是自己开发的,最干净的做法是声明信任用户证书。在App工程的res/xml下新建network_security_config.xml,内容如下:

<network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config>

然后在AndroidManifest.xml的application节点上加上:

<application android:networkSecurityConfig="@xml/network_security_config" ...>

这样App在debug包或你自己签名的包里,就会信任用户证书,Fiddler解密立刻生效。

如果是第三方App,那就得把用户证书变成系统证书。这个操作需要root权限,真机一般不折腾,但正好是后面雷电模拟器的强项。通用做法是:把Fiddler证书转成系统证书文件名,push到/system/etc/security/cacerts目录下。具体命令我在模拟器章节一起给,真机上流程一致,只是需要一台root过的设备。

3.3 iOS端抓包的差异

iOS端的抓包流程比Android简单,但有几处容易出问题。

代理配置:设置 > Wi-Fi,点已连接网络右侧的“i”图标,拉到最下面,配置代理,选手动,填电脑IP和8888。

证书下载:Safari打开 http://电脑IP:8888 ,下载FiddlerRoot certificate。和Android不同,iOS下载后只是把证书文件存下来了,还需要两步手动信任。

第一步,去“设置 > 通用 > 关于本机 > 证书信任设置”,找到Fiddler证书,打开完全信任开关。这一步漏掉的话,Safari自己访问HTTPS都会提示证书无效。

第二步,如果抓的App在iOS 14以上系统,还需要检查“设置 > 隐私 > 本地网络”,把目标App的本地网络权限打开。这个权限不开启,App可能不太乐意走你配置的代理。

iOS有一点比Android舒服:系统证书信任机制统一,不像Android那样又分用户证书又分系统证书。代价是,iOS上第三方App普遍做证书固定(SSL Pinning)的比例更高,真遇到这种App,抓包工具也束手无策,只能靠专门的Hook方案,这就超出普通教程范围了。

4. 雷电模拟器怎么抓包:从代理到设备信息

4.1 模拟器抓包为什么值得学

真机抓包环境复杂,又是证书信任又是厂商设置,而且很多App在真机上不好反复测试。雷电模拟器这类安卓模拟器,用来抓App流量有几个实打实的优势。

一是环境干净。模拟器是个独立的安卓系统,证书、代理、环境变量随便折腾,搞坏了新建一个模拟器实例就行,真机可经不起这么折腾。

二是自带root。真机想要root门槛很高,但雷电模拟器在设置里一键就能打开root权限。有root就解决了Android 7.0证书信任问题——把证书挪进系统证书目录,App的HTTPS流量就能正常解密。

三是支持多开。雷电模拟器可以同时开多个实例,每个实例里跑不同账号,配合抓包工具横向对比,测试多账号场景非常方便。

四是恢复快。模拟器支持快照和备份,抓包之前存一个干净快照,测试翻车了秒回滚。

4.2 雷电模拟器配置代理的两种姿势

雷电模拟器抓包,本质上和真机是一样的:配代理、装证书。但模拟器有个优势:可以通过ADB命令行直接操作,效率翻倍。

先备好环境。在雷电模拟器的设置里打开root权限和ADB调试,然后在电脑上打开命令行,确认能连上模拟器。

雷电模拟器的ADB端口默认是5555,看具体版本的说明,一般可以直接连:

adb connect 127.0.0.1:5555

连上之后,两种配代理的方式随你选。

方式一,图形化操作。打开模拟器里的系统设置,进入WLAN,长按当前连接的WiFi,修改网络,代理改成手动,主机名填电脑的局域网IP,端口填8888。这个流程和真机几乎一样,适合不熟悉命令行的朋友。

方式二,命令行操作。直接改安卓系统的全局代理设置,一条命令搞定:

adb shell settings put global http_proxy 192.168.1.100:8888

这里192.168.1.100要改成你电脑实际的局域网IP。改完可以用下面的命令验证代理是否生效:

adb shell settings get global http_proxy

不想抓包了,取消代理用这条命令:

adb shell settings put global http_proxy :0

证书这一步,强烈建议用命令行方案,因为模拟器有root,可以直接把证书丢进系统证书目录。

先说常规的普通安装:模拟器里打开浏览器,访问 http://电脑IP:8888 ,下载FiddlerRoot certificate安装。这种装完属于用户证书,Android 7.0以上很多App不认。

再说系统证书方案。先把Fiddler的.cer证书转成系统可识别的格式,并算出文件名hash:

openssl x509 -inform DER -in FiddlerRoot.cer -out FiddlerRoot.pem openssl x509 -inform PEM -subject_hash_old -in FiddlerRoot.pem -noout

第二条命令会输出一串hash值(比如0a1b2c3d),然后把pem文件改名成“hash值.0”:

mv FiddlerRoot.pem 0a1b2c3d.0

接着push到模拟器的系统证书目录。雷电模拟器开着root,可以这样操作:

adb root adb remount adb push 0a1b2c3d.0 /system/etc/security/cacerts/ adb reboot

重启之后,你在系统设置里看不到任何用户证书,但所有App都会信任Fiddler的根证书。这个方案我用了很久,实测下来比普通安装省心太多。

4.3 抓不到模拟器流量?先看设备信息识别

雷电模拟器上装好证书、配好代理,很多人会碰到一个奇怪现象:网页能抓,但某些App要么不联网,要么抓到的请求不全。

原因大概率是App识别到了模拟器环境,主动走了一套降级逻辑,比如不发核心请求、或者返回假数据。怎么识别模拟器的?App会读取Build.MODEL、Build.MANUFACTURER、IMEI、Android ID、MAC地址这些设备属性,发现和常见真机对不上,就认为运行环境不对。

解决办法是用雷电模拟器自带的设备信息修改功能。打开雷电模拟器的设置界面,找到设备信息相关选项,把手机品牌改成常见品牌、型号改成常见的真机型号,重新生成IMEI和Android ID。改完重启模拟器,再用Fiddler抓一次,请求头里的User-Agent和设备参数就会变成真机形态。

另外顺带说一句,模拟器自带的广告推送会在抓包时产生大量广告SDK请求,严重干扰定位目标流量。抓包之前先把模拟器设置里的推送广告功能关掉,流量列表会干净一大截。

我没法把里面涉及的每个App都测一遍,但按我自己的经验,雷电模拟器抓包遇到“请求缺失”“返回异常”这类问题,九成是设备信息识别导致的,先改设备信息再排查其他,基本不会错。

4.4 用命令行批量管理多开模拟器代理

雷电模拟器抓包还有一个进阶玩法:多开场景下的批量代理配置。你开了三四个模拟器实例,每个都要手动去WiFi设置里配代理,太累了。

雷电模拟器的安装目录下有个命令行工具,不同版本名字可能不一样,常见的是ldconsole.exe或dnconsole.exe。在命令行里切到安装目录,可以用它管理多开实例,比如查看列表、启动指定模拟器,这些命令网上能查到,写法也直白。

更实用的组合是:先把代理配置命令封装成脚本,然后对每个模拟器实例的ADB端口批量执行。雷电多开时,每个实例的ADB端口不同,常见的是5555、5557、5559这种递增规律,通过adb connect进入之后,剩下的操作就统一了。

下面是个简单的思路,Windows下可以用批处理或PowerShell脚本循环处理:

for port in 5555 5557 5559; do adb connect 127.0.0.1:$port adb -s 127.0.0.1:$port shell settings put global http_proxy 192.168.1.100:8888 done

这样几个模拟器实例一次性配好代理,再配合Fiddler里的域名过滤,多账号、多端口的流量对比就很清晰了。这个操作听起来高级,其实原理和手动配代理完全一样,只是把重复劳动交给脚本了。

5. 抓不到包怎么办:高频问题排查与延伸技巧

5.1 抓不到包,按顺序排查这5项

抓包配置不复杂,但出问题的环节特别多。我见过太多人卡在“证书装了、代理配了,就是抓不到”这个状态。按下面的顺序排查,绝大多数问题都能找到答案。

排查项检查方法和解决思路
代理是否真的生效手机或模拟器里打开WiFi设置确认代理IP和端口;模拟器可用adb shell settings get global http_proxy确认
证书是否安装并信任Android去“加密与凭据”看用户凭据;iOS去“证书信任设置”确认打开完全信任;缺了就重装
设备时间是否同步抓包工具签发的证书有效期和设备本地时间不一致时,TLS握手会直接失败,先同步时间
是否有其他代理工具冲突关掉其他代理工具,确认系统代理指向127.0.0.1:8888,没有被顶掉
App有没有做证书固定换用浏览器或自己开发的App测一下,如果浏览器能抓,只有某个App抓不到,基本是SSL Pinning

第五项经常被忽略。浏览器流量能抓、App流量抓不到,很多人怀疑自己配置错了,其实问题出在App本身。遇到证书固定的App,普通用户没什么好办法,要么找开发要debug包,要么用hook方案绕过,这部分我不展开,不属于常规抓包范畴。

5.2 高频报错与应对建议

再整理几个大家在实操里最容易碰到的报错,我都实际遇到过,直接给结论。

第一个:设备上访问 http://电脑IP:8888 打不开。先别怀疑Fiddler配置。大概率是电脑防火墙拦了8888端口。解决方法是去Windows防火墙设置里,添加入站规则,放行TCP 8888端口,或者放行Fiddler进程。加完规则重启Fiddler再试。

第二个:证书下载页面能打开,但点击下载后报“404 not found”。这种情况通常是访问地址不对,或者Fiddler版本不同导致证书下载路径变化。最稳妥的办法是,直接在Fiddler的根证书导出功能里,把证书导出成文件,再想办法传到手机上安装,而不是依赖手机浏览器下载。

第三个:Fiddler能看到大量CONNECT记录,但展开后内容全是乱码。这说明HTTPS解密没成功。检查两点:Tools > Options > HTTPS里有没有勾选Decrypt HTTPS traffic;设备证书是否安装。大多数乱码问题,根源都是设备没信任根证书。

第四个:模拟器里所有网页都打不开。常见原因是代理配置成功但证书没装,或者代理的IP写成了模拟器自己的IP。记住一个原则:代理的IP永远是电脑的局域网IP,不是手机或模拟器的IP。

第五个:抓包时发现部分请求状态是502。这不是目标服务器挂了,而是Fiddler转发出现问题,或者代理链路上有超时。先清一下Fiddler缓存、重启Fiddler,再不行就检查电脑网络是否正常。

5.3 延伸技巧:JMeter录HTTPS脚本与AutoResponder

抓包工具除了看流量,还能帮周边工具做很多事情。这里说两个高频延伸用法。

一个是JMeter录制HTTPS脚本。用JMeter自带的HTTP(S) Test Script Recorder,设置好代理端口后,手机或浏览器走这个代理,操作一遍业务,JMeter就会把请求录成测试脚本。这个功能本身不复杂,坑在于JMeter自己生成的根证书也需要被设备信任,否则HTTPS站点录不下来。还有个更省事的路线:先用Fiddler抓到请求,右键Copy as cURL,直接把cURL命令转成JMeter的HTTP请求,比录制更精准。

另一个是Fiddler的AutoResponder,也就是接口Mock。比如某个接口在测试环境返回不稳定,你可以先用Fiddler抓一次正常返回,把响应体保存成文件,然后在AutoResponder里添加规则,把该接口的请求直接替换成本地文件内容。这样App不用改代码,也不用依赖后端环境,就能模拟各种返回场景,对前端联调和异常测试非常实用。

这个技巧的进阶版本是配合Fiddler脚本做弱网模拟:在脚本里给每个请求加延时或丢掉部分响应,用来测App在弱网环境下的表现。游戏上线前经常这么干,工程上叫“弱网测试”。

6. 实操中的几点体会

6.1 先想清楚要抓谁的流量

抓包最容易犯的错,就是一上来就开Fiddler全局抓包,结果电脑上微信、浏览器、各种后台进程的流量全涌进来,界面刷得飞快,整个人直接懵掉。

我的习惯是动手之前先锁定目标。抓电脑端网页,就在Fiddler里把域名过滤条件先写好;抓手机App,就在手机上把其他App先退出,只留目标App在前台;抓模拟器里的流量,先把模拟器自带的广告推送关掉。流量干净了,分析才有意义,否则你只是在看数据洪流,而不是在看问题。

6.2 过滤器是抓包效率的分水岭

我见过不少同事用Fiddler,会话列表里几百条记录,靠肉眼一条条翻,翻到眼瞎。Fiddler的过滤功能用好了,效率差距不是一倍两倍。

最常用的是按域名过滤,在Filters页签里填入目标Host,列表立刻只剩你想要的那几条。再配合QuickExec输入框的?关键字搜索,几乎是想看什么点什么。如果你发现抓包变成了一件煎熬的事,大概率是过滤没用明白,回去把过滤规则设好再来。

6.3 抓包不只看,改包重放才算入门

很多人以为抓包就是“看”,看完就完了。其实抓包最有价值的部分,是改包和重放。

所谓改包,是把请求抓下来之后,右键拖到Composer面板,修改参数、请求头、请求体,再重新发给服务器。服务器返回什么,完全看你怎么改。我用这个方法排查过不少接口隐患,比如把订单金额字段改大看后端是否校验、把用户ID换掉看有没有越权、把请求重复发十遍看幂等是否生效。这些操作不需要写一行代码,纯靠抓包工具就能完成。

抓包工具本身不复杂,复杂的是搞清楚对象、装好证书、用好过滤。按这篇的顺序走一遍,你也能把电脑、手机、模拟器三端流量都收到手里。等到你能熟练改包重放那一刻,你会回来感谢Fiddler这个老朋友。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询