基于 SunnyNet 引擎的 Android 抓包示例应用。通过系统 VPN(TUN)拦截设备流量,演示 HTTP/HTTPS、WebSocket、TCP、UDP 的抓包、规则处理与会话导入导出等能力。
项目定位
本仓库为 SunnyNet SDK 在 Android 端的参考示例,并非功能完备的生产级产品。部分能力仍在完善中,界面与交互也可能随版本调整;请以源码为准,自行评估是否满足你的使用场景。
功能完整性
当前实现覆盖 SunnyNet 核心能力的 大致流程与用法示例,与桌面版 SunnyNetV5 相比可能存在功能缺失、行为差异或已知问题。欢迎在此基础上二次开发,但不保证所有场景开箱即用。
合法使用
本工具仅供学习、调试及 经授权 的网络分析。请勿用于窃取他人隐私、绕过安全机制或其他违法行为;使用者须自行承担合规责任。
本仓库 应用层源码 采用 MIT License 开源。
MIT License
Copyright (c) 2025 秦天
特此向任何获得该软件副本或相关文档的人免费授予许可,可随意处理本软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件的副本,并允许提供该软件的人可以按照下述条件对其进行操作:
1. 本软件的所有副本或重要部分必须包含上述版权声明和本许可声明。
2. 本软件按"原样"提供,不附带任何明示或暗示的保证,包括但不限于适销性、特定用途适应性和非侵权。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面产生的、与本软件或使用或其他交易有关的或与之连接的行为。
完整许可全文见 LICENSE 文件;应用内 开源协议 页面亦提供中文版说明。
| 组件 | 协议 | 说明 |
|---|---|---|
| AndroidX | Apache 2.0 | UI 与架构组件 |
| Material Components | Apache 2.0 | Material Design |
| ObjectBox | Apache 2.0 | 本地数据库 |
| SunnyNet SDK | 见 SDK 仓库 | 预编译原生库,位于 app/src/main/jniLibs/ |
以下为本示例当前已实现的主要能力,不代表 SunnyNet 全量功能:
- VPN 模式启停抓包,前台服务与通知栏快捷停止
- 按应用包名筛选抓包目标(不选则抓取全部,不含本应用)
- 可开关 HTTP/HTTPS、WebSocket、TCP、UDP 抓取范围
- 列表按协议与关键字筛选;详情页支持总览、请求/响应、时间、流列表与 Hex 查看
- 响应体 JSON / 文本 / 图片等基础展示
- 规则类型示例:替换、重写、拦截、屏蔽、Hosts(字段对齐 SunnyNetV5)
- 匹配方式:字符串、十六进制、Base64、正则
- 本机监听端口(默认
2025),支持局域网 HTTP/S、SOCKS5 代理接入 - 根证书导出,用于 HTTPS 解密
- 会话文件导入/导出
- ObjectBox 本地持久化抓包记录
| 项目 | 要求 |
|---|---|
| Android 系统 | API 24(Android 7.0)及以上 |
| 编译 SDK | Android API 36 |
| JDK | 11 |
| Android Studio | 推荐最新稳定版(含 AGP 9.x 支持) |
| Gradle | 9.4.1(已包含 Wrapper) |
git clone https://github.com/qtgolang/SunnyNetAndroid.git
cd SunnyNetAndroid# Windows
gradlew.bat assembleDebug
# macOS / Linux
./gradlew assembleDebugDebug APK 输出路径:app/build/outputs/apk/debug/。
- 打开项目根目录,等待 Gradle 同步完成
- 连接真机(抓包需 VPN 授权,模拟器支持有限)
- 运行
app模块
-
安装根证书(HTTPS 解密必需)
侧栏 → 证书 → 导出根证书 → 在系统设置中安装为「CA 证书」 -
选择抓包目标(可选)
侧栏 → 抓包目标 → 选择要监控的应用 -
配置抓取范围(可选)
侧栏 → 抓取范围 → 开关 HTTP、WebSocket、TCP、UDP -
配置规则(可选)
侧栏 → 规则设置 → 添加替换 / 重写 / 拦截 / 屏蔽 / Hosts 规则 -
开始抓包
抓包工作台 → 开始抓包 → 在系统弹窗中允许 VPN 连接 -
局域网代理抓包(可选)
侧栏 → 端口设置 查看内网地址,将其他设备代理指向该地址 -
导入 / 导出会话(可选)
侧栏 → 会话文件 → 与桌面 SunnyNetV5 交换.syn3/.sy4
SunnyNetAndroid/
├── app/
│ ├── src/main/java/com/sunnynet/tools/
│ │ ├── capture/ # 抓包引擎、规则、事件处理
│ │ ├── data/ # ObjectBox 实体与持久化
│ │ ├── net/ # 网络 / VPN 辅助
│ │ ├── service/ # 前台抓包服务
│ │ ├── session/ # 会话文件导入导出
│ │ └── ui/ # 界面与交互
│ ├── src/main/jniLibs/ # SunnyNet 原生 SDK(.so + .jar)
│ └── src/main/res/ # 布局、字符串、主题
├── gradle/
└── build.gradle.kts
- 语言:Java 11
- UI:Material Design、Navigation Drawer、ViewPager2、RecyclerView
- 存储:ObjectBox 4.x
- 抓包核心:SunnyNet Native SDK(
libSunnyNet.so+SunnyNet-v4.jar)
| 权限 | 用途 |
|---|---|
INTERNET |
网络通信 |
ACCESS_NETWORK_STATE / CHANGE_NETWORK_STATE |
VPN 状态检测 |
BIND_VPN_SERVICE |
VPN 抓包 |
FOREGROUND_SERVICE |
前台抓包服务 |
POST_NOTIFICATIONS |
通知栏显示停止按钮 |
QUERY_ALL_PACKAGES |
列出已安装应用以供选择抓包目标 |
欢迎提交 Issue 与 Pull Request。提交前请确保:
- 代码风格与现有项目保持一致
- 变更范围聚焦,避免无关重构
- 在真机上验证抓包核心流程
- SunnyNet SDK / 桌面版:qtgolang/SunnyNet
Q:HTTPS 抓包显示乱码或无法解密?
A:请确认已安装并信任 SunnyNet 根证书;部分应用启用证书锁定(Certificate Pinning)时无法解密。
Q:启动失败,提示端口被占用?
A:前往 端口设置 修改监听端口(建议使用 1024–65535)。
Q:抓包开始后界面无法点击?
A:请在系统 VPN 授权弹窗中点击「确定」;若已授权仍异常,尝试重启应用。
Q:VPN 被其他应用占用后自动停止?
A:Android 同一时间仅允许一个 VPN 连接;本应用检测到 VPN 断开后会自动停止抓包。
如有问题或建议,欢迎在 Issues 中反馈。