Android抓包如何配置Charles和Fiddler?

来源:微信开发网作者:林则安头衔:网络博主
导读:本期聚焦于林则安创作的《Android抓包如何配置Charles和Fiddler?》,敬请观看详情。Android端HTTPS请求抓不到、接口数据一片空白,通常是证书和代理链路没配对。Charles和Fiddler在PC端都是主流抓包工具,但放到Android环境里,配置思路并不完全一样。这篇文章会把两套配置拆开讲:代理端口怎么填、根证书怎么装、HTTPS解密开关在哪里打开,以及Android 7.0之后系统对用户证书的限制会带来什么影响。如果你调试的是正式签名应用,还需要额外处理证书存储位置,否则即使手机连上代理也只能看到加密后的乱码。读完以后你可以按需选择Charles或Fiddler,快速搭建一套稳定的Android抓包环境。

Android抓包环境搭不起来,很多时候不是工具本身难用,而是代理端口、证书信任、应用目标版本这几个环节没有同时打通。Charles和Fiddler在PC端都足够成熟,但把它们接到Android设备上时,配置路径和踩坑点确实存在差异。下面会分别说明两套工具的完整配置过程,并补充Android系统对证书信任的限制,帮助你把明文请求稳定地抓到手里。

Android抓包如何配置Charles和Fiddler?

一、Charles抓包配置:代理、证书与SSL代理设置

先在PC上启动Charles,确认本机局域网IP地址。手机和电脑需要连接同一个Wi-Fi,然后在Charles菜单中查看Proxy设置,默认HTTP代理端口通常为8888。建议在Proxy Settings中把HTTP Proxy端口固定为8888,并勾选Enable transparent HTTP proxying选项,这样后续手机端只需要填IP和端口即可。

Android手机进入Wi-Fi详情页,把代理从无改为手动,主机名填写PC的局域网地址,例如192.168.1.100,端口填写8888。保存后手机浏览器访问chls.pro/ssl,Charles会提供一个证书下载页面。下载并安装证书时,Android会提示证书用途,选择用于VPN和应用即可。安装完成后,还需要在Charles中开启SSL Proxying,否则HTTPS请求只会显示CONNECT隧道,看不到请求和响应内容。

开启方式是在Proxy菜单下找到SSL Proxying Settings,勾选Enable SSL Proxying,并添加需要解密的域名与端口。这里不建议直接填写通配符*去匹配所有域名,因为部分证书绑定较强的应用会拒绝连接。更稳妥的做法是先针对目标域名添加规则,例如api.ipipp.com:443,等确认抓包正常后再逐步扩大范围。

# Charles SSL Proxying Settings 示例
# 只对目标域名开启解密
Host: api.ipipp.com
Port: 443

# 调试多个子域名时使用
Host: *.ipipp.com
Port: 443

证书安装完成后,如果应用仍然报证书错误,通常是因为Android 7.0及以上版本默认不信任用户安装的根证书。此时需要通过adb把Charles根证书推送到系统证书目录,或者使用已root的设备。对于普通模拟器,处理起来会比较方便,部分模拟器本身就允许直接导入系统证书。

二、Fiddler抓包配置:端口、HTTPS与证书导出

Fiddler的代理端口也可以在Tools菜单下的Options里调整。打开Options后进入Connections选项卡,确认Fiddler listens on port后面是8888,并勾选Allow remote computers to connect。这个选项如果不打开,手机连上代理后会出现网络不通的情况。配置完成后重启Fiddler,让远程连接设置生效。

HTTPS解密需要进入HTTPS选项卡,勾选Capture HTTPS CONNECTs和Decrypt HTTPS traffic。Fiddler会提示安装根证书到本机,按提示操作即可。Android手机需要安装Fiddler的根证书,可以在手机浏览器中访问http://电脑IP:8888,页面底部有FiddlerRoot certificate下载链接。下载后安装证书,并同样选择用于VPN和应用。

如果证书安装完成但部分应用仍然不信任连接,可以把Fiddler根证书从PC导出。在Fiddler的Actions菜单中可以选择Export Root Certificate to Desktop,导出的cer文件可以通过adb推送到设备中。对于需要系统级信任的场景,cer文件还需要转换成Android系统可识别的格式,并放置到系统证书目录下。

# Fiddler 默认代理配置
Fiddler listens on port: 8888
Allow remote computers to connect: true

# HTTPS 解密
Capture HTTPS CONNECTs: true
Decrypt HTTPS traffic: true

Charles和Fiddler在配置逻辑上很相似,但Fiddler对Windows环境的兼容性更好,适合在Windows开发机上快速排查HTTP接口问题。Charles则更擅长查看长连接、WebSocket以及更复杂的请求结构。在实际项目中,如果只做普通接口抓包,任意一个工具都能满足需求。

三、Android 7.0以上的证书限制与系统证书方案

Android 7.0开始,系统对用户证书和系统证书做了明确区分。用户在设置中安装的证书属于用户证书,默认情况下只有浏览器和部分旧版本应用会信任它。很多正式打包的应用由于启用了网络安全配置,只信任系统证书,这就导致即使手机已经安装Charles或Fiddler证书,请求仍然会报SSL错误。

解决这个问题的思路通常有两种。一是将抓包工具的根证书安装到系统证书目录。以Charles为例,先把证书导出为PEM格式,然后用adb连接设备,将证书文件推送到/system/etc/security/cacerts/目录下。该操作需要root权限,并且要保证证书文件名与证书主题哈希值一致。对于没有root的真机,可以先使用模拟器或测试机完成配置。

# 查看证书主题哈希值
openssl x509 -inform PEM -subject_hash_old -in charles.pem

# 输出类似:
# 1a2b3c4d
# 将证书重命名后推送
adb root
adb remount
adb push 1a2b3c4d.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/1a2b3c4d.0

第二种思路是借助VirtualXposed、平行空间这类工具,把目标应用运行在虚拟环境中。虚拟环境会重新处理证书信任关系,部分场景下可以让应用直接信任用户安装的证书。不过这种方式并不适用于所有应用,尤其是带加固或环境检测的应用,可能会直接崩溃或拒绝运行。真正稳定的做法仍然是使用测试包或debug包,并在AndroidManifest或网络安全配置中显式声明信任用户证书。

四、Android端代理与测试环境注意事项

手机连接代理后,如果PC端抓包工具显示大量CONNECT请求但没有实际接口内容,基本可以判断是SSL Proxying没有覆盖目标域名。Charles需要手动添加域名规则,Fiddler则需要确认Decrypt HTTPS traffic已经勾选。另一个常见的坑是应用使用双向证书校验,此时仅安装抓包根证书是无效的,还需要将客户端证书导入抓包工具中。

对于使用OkHttp、Retrofit等网络库的应用,代理设置会直接沿用系统Wi-Fi代理,因此普通HTTP请求通常可以直接抓到。但如果应用内部自定义了网络栈或使用了原生Socket通信,就需要额外关注是否绕过系统代理。此时可以在PC端使用透明代理模式,或者在路由器层面做流量转发。

调试完成后,一定要把Android手机的代理设置改回无,并且删除抓包证书。否则后续正常使用手机时,所有流量会继续经过PC代理,一旦电脑关机或抓包工具退出,手机就会出现无法上网的情况。证书残留也会带来安全隐患,尤其是测试机之后可能被用于登录真实账号。

# 检查是否真正移除代理
adb shell settings get global http_proxy
# 如果输出为空或 :0 表示未设置代理

# 清理用户证书
# 进入设置 -> 安全 -> 加密与凭据 -> 用户证书
# 找到 Charles/Fiddler 证书并删除

总体而言,Charles和Fiddler在Android抓包中的核心区别集中在界面和高级功能层面,基础代理配置是相通的。只要把端口、证书、HTTPS解密、系统信任这几个点依次处理到位,大部分接口调试工作都能顺利完成。

Android抓包CharlesFiddler修改时间:2026-09-20 16:25:02

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0920/59715.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。