APP自动化测试中,如何通过ADB或工具捕获触发的网络请求?
可行的ADB/工具方案捕获APP网络流量
1. 用ADB调用tcpdump抓包(系统级抓包)
tcpdump是Android原生支持的命令行抓包工具,能捕获设备全量网络流量,不受APP代理设置限制。缺点是HTTPS流量默认加密,需结合SSL Pinning绕过才能解密明文内容。
步骤:
- 将tcpdump二进制文件推送到设备并赋予权限:
adb push tcpdump /data/local/tmp/ adb shell chmod 777 /data/local/tmp/tcpdump - 启动抓包并指定存储路径:
参数说明:adb shell /data/local/tmp/tcpdump -i any -p -s 0 -w /sdcard/app_capture.pcap-i any捕获所有网络接口,-p禁用混杂模式,-s 0捕获完整数据包,-w指定输出文件 - 执行你的自动化操作(如
adb shell input tap 500 1490) - 操作完成后按
Ctrl+C停止抓包,将文件拉到本地:adb pull /sdcard/app_capture.pcap ./ - 用Wireshark打开
app_capture.pcap分析流量,若需解密HTTPS,需搭配下方的SSL Pinning绕过方案。
2. Frida绕过SSL Pinning + 移动端抓包工具
针对启用SSL Pinning的APP,先用Frida绕过证书校验,再用移动端抓包工具(如HttpCanary)捕获明文流量,全程可通过ADB控制流程。
步骤:
- 推送并启动Frida-server(需匹配设备架构):
adb push frida-server /data/local/tmp/ adb shell chmod 777 /data/local/tmp/frida-server adb shell /data/local/tmp/frida-server & - 执行通用SSL Pinning绕过脚本(如
universal-ssl-pinning-bypass.js):frida -U -f com.your.app.package -l bypass.js --no-pause - 提前在设备上配置HttpCanary的抓包规则(指定目标APP),用ADB模拟点击启动抓包:
# 示例:假设HttpCanary抓包按钮坐标为300,500 adb shell input tap 300 500 - 执行自动化操作,完成后用ADB点击停止抓包,最后从HttpCanary导出请求/响应数据。
3. Android Studio Network Profiler(调试版APP专属)
如果测试的是调试版APP(未开启混淆和严格SSL校验),直接用Android Studio的Network Profiler即可实时捕获明文网络请求,无需额外工具。
步骤:
- 打开Android Studio,通过USB连接已开启调试模式的设备
- 点击工具栏
Profiler按钮,选择目标APP进程 - 切换到
Network标签页,确保捕获状态为开启 - 执行
adb shell input tap等自动化操作,Profiler会实时展示所有请求的URL、请求头、响应体等完整信息。
4. mitmproxy + Frida绕过SSL Pinning
结合mitmproxy的电脑端抓包能力与Frida的绕过方案,实现明文捕获HTTPS流量:
步骤:
- 在电脑上启动mitmproxy,默认监听8080端口:
mitmproxy - 通过ADB设置设备代理到电脑IP:
adb shell settings put global http_proxy 192.168.1.100:8080 - 用Frida执行SSL Pinning绕过脚本(同方法2)
- 执行自动化操作,mitmproxy会实时显示所有明文请求和响应
- 操作完成后关闭代理:
adb shell settings put global http_proxy :0
内容的提问来源于stack exchange,提问作者Mave
相关产品推荐
相关产品推荐

