目录
- 核心原理:为什么能抓到包?
- 最简单直接 - 使用 Android Studio 的网络 Profiler (推荐给开发者)
- 最常用灵活 - 使用抓包工具 (Charles / Fiddler)
- 准备工作:配置抓包工具
- 配置 Android 设备
- 抓取 HTTPS 流量(关键步骤)
- 常见问题与解决
- 最底层 - 使用 Wireshark (推荐给高级用户和安全分析)
- 原理:中间人攻击
- 实施步骤
- 最硬核 - 使用 ADB + tcpdump
- 总结与对比
- 重要注意事项与最佳实践
核心原理:为什么能抓到包?
Android 设备上的所有网络流量(无论是 App 产生的还是系统自带的)最终都会通过设备的网络接口(Wi-Fi 或移动数据)发送出去,抓包的本质就是在数据离开或进入设备时,复制一份数据包,然后由抓捕工具进行分析和展示。

这就像在邮局里,你可以截获所有寄出或收到的信件并查看其内容,要做到这一点,通常需要以下几种技术:
- 代理模式: 将设备的网络请求全部转发到一台中间服务器(你的电脑上运行的抓包工具),由这台服务器代为请求,然后将返回的数据转发回来。Charles 和 Fiddler 主要使用这种方式。
- 网桥/混杂模式: 将你的电脑变成一个“透明网桥”,让所有数据都“路过”你的电脑,网卡设置为“混杂模式”以接收所有经过的数据包,而不仅仅是发给自己的。Wireshark 主要使用这种方式。
- 直接抓包: 在设备本身安装抓包工具,直接在系统层面捕获网络数据包。tcpdump 就是这种方式。
方法一:使用 Android Studio 的网络 Profiler (推荐给开发者)
这是 Android 开发者最推荐的“无痛”抓包方式,无需额外安装软件,直接集成在开发环境中。
优点:
- 零配置,开箱即用。
- 只能抓取通过
HttpURLConnection和OkHttp发起的请求,对其他网络库(如Volley)或原生库支持有限。 - 自动处理 HTTPS 证书问题,无需手动安装证书。
- 界面友好,直接集成在 Logcat 中。
步骤:

- 打开你的 Android Studio 项目。
- 点击右上角的 "Profiler" (性能分析器) 标签。
- 在设备列表中选择你要调试的设备。
- 在 Profiler 窗口中选择 "Network" (网络) 选项卡。
- 点击应用右上角的 "Start" 按钮(红色圆形)。
- 现在在你的 App 中执行网络操作,你就会在 Network 标签页中看到详细的请求列表,包括 URL、Method、状态码、耗时等。
- 点击任意一个请求,可以在下方查看其详细的请求头、请求体、响应头和响应体。
方法二:使用抓包工具 (Charles / Fiddler)
这是最流行、功能最强大的抓包方式,尤其适合调试混合了 H5 和原生代码的 App。
准备工作:配置抓包工具
以 Charles 为例(Fiddler 步骤类似):
- 下载并安装 Charles: 官网下载并安装。
- 设置代理:
- 进入
Proxy->Proxy Settings...。 - 在
Proxy选项卡中,确保 "Enable transparent HTTP proxying" 是勾选的。 - 记下 HTTP Proxy 的端口号,默认是 8888。
- 进入
- 抓取 HTTP 流量:
- 点击
Proxy->Recording,确保它是开启状态。 - Charles 已经可以抓取所有通过它代理的 HTTP 流量了。
- 点击
配置 Android 设备
- 确保手机和电脑在同一个 Wi-Fi 网络下。
- 在手机上连接该 Wi-Fi。
- 进入 Wi-Fi 设置,长按当前连接的网络,选择 "修改网络" 或 "高级选项"。
- 将 代理 设置为 "手动"。
- 代理主机名 填入你电脑的 IP 地址。
- 如何获取电脑 IP 地址?在 Windows 上 cmd 输入
ipconfig,在 Mac/Linux 上终端输入ifconfig,找到你当前使用的 Wi-Fi 网卡的 IP 地址(通常是168.x.x或x.x.x)。
- 如何获取电脑 IP 地址?在 Windows 上 cmd 输入
- 代理端口 填入 Charles 中设置的端口号(默认 8888)。
- 保存设置,此时手机上的大部分网络流量都会被导向你的电脑。
抓取 HTTPS 流量(关键步骤)
现代 App 大量使用 HTTPS,默认情况下 Charles 无法解密 HTTPS 内容,会显示 "SSL Proxy Error"。
- 在 Charles 中安装根证书:
- 手机上会自动弹出提示,询问是否信任 Charles 提供的证书,点击 "安装" 或 "允许"。
- 如果没有弹出,可以手动在手机浏览器中访问
chls.pro/ssl(Charles 的官方证书下载地址),下载并安装证书。 - Android 7.0 (Nougat) 及以上系统 的安全机制更加严格,你需要将安装好的证书手动 "导入" 到 "证书安装" 或 "安全" -> "加密与凭据" -> "从存储设备安装",证书文件通常名为
charles-proxy-ssl-proxying-certificate.pem。
- 在 Charles 中启用 SSL 代理:
- 进入
Proxy->SSL Proxying Settings...。 - 勾选 "Enable SSL Proxying"。
- 在 "Locations" 中,点击 "Add",填入
Host为 ,Port为 ,这表示抓取所有域名的所有 HTTPS 端口流量,也可以只填你关心的特定域名和端口(如api.example.com,443)。
- 进入
- 重启 Charles 和 App,现在你就可以清晰地看到 HTTPS 请求的明文内容了。
常见问题与解决
- 问题: 手机无法上网,或连接超时。
- 解决: 检查电脑防火墙是否阻止了 Charles 的端口(8888),在防火墙中添加对 Charles 的允许规则。
- 问题: 抓不到 App 的包。
- 解决:
- 确认 App 使用的网络是 Wi-Fi,而不是移动数据。
- 检查 App 是否强制使用了系统代理以外的代理(某些 App 会检测并绕过代理)。
- 检查 App 是否使用了 VPN。
- 尝试重启 App 和 Charles。
- 解决:
方法三:使用 Wireshark (推荐给高级用户和安全分析)
Wireshark 是一个非常强大的协议分析器,能捕获底层的网络数据包,但配置和使用相对复杂。

原理: 通过创建一个 Wi-Fi 接入点(AP),让手机连接到它,这样所有流量都会经过你的电脑网卡,Wireshark 就能捕获到。
步骤:
-
准备工作:
- 电脑需要支持 “主机模式” 的无线网卡。
- 下载并安装 Wireshark 和 Npcap (Wireshark 的抓包驱动)。
- 下载一个创建虚拟 AP 的工具,如
Connectify(付费但有试用) 或开源的HostedNetwork(Windows 命令行工具)。
-
创建虚拟 AP:
- 使用 Connectify 等工具,创建一个名为你喜欢的 Wi-Fi 网络,设置一个密码。
- 记下这个 AP 的 SSID 和密码。
-
配置 Wireshark 捕获:
- 打开 Wireshark,在网卡列表中选择你刚才创建虚拟 AP 时使用的那个无线网卡。
- 在捕获过滤器中输入
tcp port 80 or tcp port 443,只捕获 HTTP 和 HTTPS 流量,避免数据量过大。 - 点击开始捕获。
-
连接手机并抓包:
- 断开手机原来的 Wi-Fi,连接到你刚刚创建的虚拟 AP。
- 手机上会弹出“网络安全证书”警告,必须点击“接受”或“继续”,否则无法建立连接。
- 在手机上操作 App,你就可以在 Wireshark 中看到海量的网络数据包了。
-
分析数据包:
- Wireshark 显示的是原始数据包,没有 Charles 那么友好,你需要手动筛选 IP 地址、端口号来定位你关心的请求。
- HTTPS 流量在这里是加密的,无法直接查看内容,除非你配置了 SSL 密钥日志(这非常复杂)。
方法四:使用 ADB + tcpdump
这种方法直接在 Android 设备上进行抓包,不依赖于外部网络环境,适合抓取移动数据流量或无法配置代理的场景。
步骤:
-
准备工作:
- 在电脑上安装好 Android SDK Platform-Tools (包含
adb)。 - 下载
tcpdumpfor Android,可以从网上搜索android-tcpdump找到预编译好的.apk或.arm/.arm64可执行文件。
- 在电脑上安装好 Android SDK Platform-Tools (包含
-
将 tcpdump 传入设备:
- 将下载好的
tcpdump可执行文件(tcpdump-arm)复制到你的设备上。adb push tcpdump-arm /data/local/tmp/tcpdump
- 将下载好的
-
在设备上赋予执行权限:
adb shell su # 如果需要 root 权限 chmod 777 /data/local/tmp/tcpdump
-
开始抓包:
- 执行以下命令开始抓包,并将结果保存到
/sdcard/capture.pcap文件中。/data/local/tmp/tcpdump -i any -p -s 0 -w /sdcard/capture.pcap
-i any: 捕获所有网络接口(包括 Wi-Fi 和移动数据)。-p: 不将网卡设置为混杂模式(通常不需要)。-s 0: 抓取完整的数据包,不截断。-w: 将抓包结果写入文件,而不是直接显示在终端。
- 执行以下命令开始抓包,并将结果保存到
-
停止抓包并下载:
- 在终端中按
Ctrl+C停止抓包。 - 将抓包文件下载到电脑上分析。
adb pull /sdcard/capture.pcap .
- 使用 Wireshark 打开
capture.pcap文件进行分析。
- 在终端中按
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Android Profiler | 零配置,集成度高,自动处理 HTTPS | 仅限 HttpURLConnection/OkHttp,功能单一 |
App 开发调试,快速查看网络请求 |
| Charles / Fiddler | 功能强大,界面友好,支持 HTTPS,可修改请求/响应 | 配置稍复杂,依赖代理,可能被 App 检测 | Web/H5 混合开发,API 测试,协议分析 |
| Wireshark | 功能最强大,捕获底层包,不依赖代理 | 配置复杂,分析困难,HTTPS 流量加密 | 网络底层分析,安全审计,复杂问题排查 |
| ADB + tcpdump | 直接在设备上抓包,可抓移动数据,不依赖外部网络 | 需要文件传输,操作命令行,分析需用 Wireshark | 抓取移动数据流量,无 Wi-Fi 环境下,自动化测试 |
重要注意事项与最佳实践
- 合法性与道德: 请确保你只抓取自己拥有或被授权测试的应用的流量。 未经授权抓取他人或商业公司的网络数据是违法的。
- 隐私保护: 抓到的包可能包含用户隐私信息(如 Token、用户名、密码、聊天记录等),务必妥善处理,不要泄露或滥用。
- HTTPS 是常态: 现代应用必须使用 HTTPS,抓包时配置好 SSL 代理是关键一步。
- App 的反抓包机制:
- 证书锁定: 一些安全性要求高的 App(如银行、金融类)会使用证书锁定,只信任服务器的真实证书,不信任 Charles 等工具的中间人证书,这种情况下,使用 Charles 抓包会失败,需要通过 Hook 等高级技术绕过。
- 代理检测: App 会检测系统代理,如果发现代理存在,可能会拒绝联网或返回错误。
- 性能影响: 抓包本身会消耗一定的 CPU 和内存资源,尤其是在抓取高流量或使用 Wireshark 捕获所有包时,调试完毕后,记得关闭抓包工具并移除设备上的代理设置。
