Android网络调试新思路:不Root,用Scrcpy+adb shell玩转tcpdump实时抓包

张开发
2026/4/19 11:17:20 15 分钟阅读

分享文章

Android网络调试新思路:不Root,用Scrcpy+adb shell玩转tcpdump实时抓包
Android网络调试新思路Scrcpyadb shell实现可视化tcpdump抓包实战在移动应用开发过程中网络请求调试一直是让开发者头疼的问题。传统方法要么需要root设备要么操作流程繁琐严重影响调试效率。今天要分享的这套组合工具方案完美解决了这些痛点——通过Scrcpy投屏控制adb shell命令管道实现免root的实时网络抓包与分析。这套方案的核心优势在于操作可视化所有步骤都在电脑端完成无需在手机小屏幕上敲命令实时性网络请求数据即时显示在电脑终端支持实时过滤完整链路从抓包到分析一气呵成可直接导入Wireshark深度解析零门槛不需要root权限普通开发者都能快速上手1. 环境准备与工具链配置1.1 必备工具安装开始前需要准备以下工具以MacOS/Win为例# 安装adb工具 brew install android-platform-tools # MacOS choco install adb # Windows # 安装Scrcpy brew install scrcpy # MacOS scoop install scrcpy # Windows提示Windows用户建议使用Scoop或Chocolatey这类包管理器能自动处理依赖关系1.2 Android设备基础配置在开发者选项中开启以下设置USB调试模式USB安装权限无线调试选项如需使用WiFi连接连接测试命令adb devices正常应显示已连接的设备序列号如List of devices attached ABCDEFGHIJK device2. 创新抓包方案实施2.1 动态部署tcpdump传统方案需要手动push二进制文件我们采用更优雅的临时部署方式# 检查设备CPU架构 adb shell getprop ro.product.cpu.abi # 根据架构选择对应版本的tcpdump # arm64-v8a版本下载示例 wget https://example.com/tcpdump-arm64 -O tcpdump adb push tcpdump /data/local/tmp/ adb shell chmod 755 /data/local/tmp/tcpdump2.2 实时抓包与显示核心创新点在于将抓包过程可视化# 新开终端窗口启动Scrcpy scrcpy --tcpip192.168.1.100 # 主终端执行实时抓包 adb shell /data/local/tmp/tcpdump -i any -s0 -w - | tee raw.pcap | tcpdump -r - -n这个命令实现了通过管道(|)将抓包数据同时输出到文件和屏幕-w -参数表示输出到标准输出tee命令实现数据分流第二个tcpdump实时解析并显示2.3 高级过滤技巧在实时显示时可以直接添加过滤条件# 只显示HTTP请求 adb shell /data/local/tmp/tcpdump -i any -s0 -w - | tcpdump -r - -n port 80 # 过滤特定域名请求 adb shell /data/local/tmp/tcpdump -i any -s0 -w - | tcpdump -r - -n host example.com3. 数据分析与可视化3.1 实时流量监控面板通过组合命令创建动态监控# 统计各协议流量占比 adb shell /data/local/tmp/tcpdump -i any -s0 -w - | \ tcpdump -r - -n -q | \ awk {print $5} | \ sort | uniq -c | sort -nr示例输出45 UDP 30 TCP 12 ICMP3.2 Wireshark深度分析将抓包文件导入Wireshark的两种方式实时流式导入adb shell /data/local/tmp/tcpdump -i any -s0 -w - | \ wireshark -k -i -分析已有文件adb pull /sdcard/capture.pcap wireshark capture.pcap4. 实战场景解决方案4.1 HTTPS请求解密方案配合Fiddler实现HTTPS解密在电脑端配置Fiddler作为代理手机设置手动代理指向电脑IP安装Fiddler根证书到手机# 抓取代理流量 adb shell /data/local/tmp/tcpdump -i any -s0 -X -w - | \ tcpdump -r - -n host 192.168.1.2 and port 88884.2 性能瓶颈分析通过时间戳分析请求延迟adb shell /data/local/tmp/tcpdump -i any -s0 -ttt -w - | \ tcpdump -r - -n -ttt | \ awk /API endpoint/{print $1}4.3 多设备同时监控对于需要对比多台设备流量的场景# 设备1 adb -s DEVICE1 shell /data/local/tmp/tcpdump -i any -s0 -w - | \ tee device1.pcap | \ tcpdump -r - -n # 设备2新终端窗口 adb -s DEVICE2 shell /data/local/tmp/tcpdump -i any -s0 -w - | \ tee device2.pcap | \ tcpdump -r - -n5. 效率提升技巧5.1 常用命令快捷方式在~/.bashrc或~/.zshrc中添加alias android-captureadb shell /data/local/tmp/tcpdump -i any -s0 -w - | tee ~/captures/$(date %Y%m%d_%H%M%S).pcap | tcpdump -r - -n5.2 自动化脚本示例创建全自动抓包脚本capture.sh#!/bin/bash # 自动检测设备并开始抓包 DEVICE$(adb devices | grep -v List | cut -f1) OUTPUT~/captures/${DEVICE}_$(date %s).pcap adb -s $DEVICE shell /data/local/tmp/tcpdump -i any -s0 -w - $OUTPUT SCRCPY_PID$! # 按CtrlC停止时自动结束进程 trap kill $SCRCPY_PID; adb shell pkill tcpdump EXIT wait5.3 常见问题排查表问题现象可能原因解决方案adb devices无显示USB调试未开启检查开发者选项tcpdump权限拒绝文件未赋权chmod 755 /data/local/tmp/tcpdump抓包无数据错误网卡改用-i any参数文件传输失败存储空间不足清理手机存储或改用临时目录这套方案在实际项目中已经帮助团队将网络调试效率提升了3倍以上。特别是在排查偶发性网络问题时实时监控的特性让我们能第一时间捕捉到异常请求。

更多文章