# WeakNet
**Repository Path**: testaivin/WeakNet
## Basic Information
- **Project Name**: WeakNet
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-10-08
- **Last Updated**: 2026-10-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[English](README_EN.md) | 中文
# WeakNet
**Android 弱网模拟工具**
基于 `VpnService` 在用户态拦截所有 IP 流量,对数据包进行延迟、丢包、限速、重复、乱序、篡改等操控。
支持网络闪断和 DNS 故障模拟。无需 root,无需代理配置,安装即用。




---
## 为什么需要 WeakNet
移动应用在弱网环境下的表现直接影响用户体验——加载超时、图片模糊、数据丢失、重复请求。开发和测试时需要**可复现的弱网环境**来验证应用的容错能力。
**WeakNet** 通过 Android `VpnService` 在用户态拦截**所有 IP 流量**(TCP/UDP/ICMP),在数据包层面实施操控。无需 root、不限于 HTTP、支持 12 个真实场景预设。
## 功能
- **全协议覆盖** — TCP、UDP、ICMP(Ping),不限于 HTTP 层
- **12 个预设场景** — 2G/3G/4G 弱信号/WiFi 弱/地铁/电梯/高铁/高延迟/丢包地狱/DNS 超时/数据校验
- **5 种数据包操控** — 节流、乱序、重复、丢包、篡改,管线串联可任意组合
- **3 种延迟分布** — 均匀、高斯(Box-Muller)、长尾(对数正态)
- **2 种丢包模型** — 随机(伯努利)、突发(Gilbert 马尔可夫链)
- **网络闪断** — 周期性模拟断连/恢复,恢复时自动 RST 清理所有 TCP 会话
- **DNS 故障模拟** — 超时(静默丢弃)/ 失败(SERVFAIL)/ 劫持(伪造 A 记录)
- **按应用过滤** — 选择特定 App 生效,不影响其他应用
- **浮窗监控** — 实时显示上传/下载速度、会话数,支持暂停/停止
- **自定义配置** — 所有参数均可自由调节,支持保存为自定义配置
## 快速开始
### 环境要求
- Android Studio
- Android 设备或模拟器(VPN 服务无法在宿主机测试)
- minSdk 23+
### 构建
```bash
./gradlew assembleDebug # 构建 Debug APK
./gradlew compileDebugKotlin # 仅编译(快速检查)
./gradlew test # 运行单元测试
```
### Release 构建
在 `local.properties`(不被 git 跟踪)中添加签名配置:
```properties
RELEASE_STORE_FILE=../your_keystore
RELEASE_STORE_PASSWORD=your_password
RELEASE_KEY_ALIAS=your_alias
RELEASE_KEY_PASSWORD=your_password
```
## 预设场景
| 预设 | 延迟 | 丢包 | 限速 | 特殊 |
|:-----|:----:|:----:|:----:|:-----|
| 无限制 | — | — | — | — |
| 2G (EDGE) | 300ms | 5% | 50kbps | — |
| 3G (HSPA) | 100ms | 2% | 750kbps | — |
| 4G 弱信号 | 50ms | 1% | 3Mbps | — |
| WiFi 弱 | 30ms | — | 5Mbps | 抖动 15ms |
| 地铁 | 200ms | 8% | 1Mbps | 闪断 30s/2s |
| 电梯 | 500ms | 15% | 100kbps | 闪断 20s/3s |
| 高延迟 | 2000ms | — | — | 抖动 500ms |
| 丢包地狱 | 100ms | 30% | — | 重发 5% + 乱序 |
| 高铁 | 150ms | 5% | 800kbps | 闪断 60s/4s |
| DNS 超时 | — | — | — | DNS 查询丢弃 |
| 数据校验 | — | — | — | 篡改 10% |
## 架构
```
App 流量 → TUN 接口 (VpnService)
→ PacketReader (阻塞读 TUN fd)
→ PacketProcessor (解析 IP/TCP/UDP, TCP 状态机, DNS 拦截, 闪断守卫)
→ ManipulationPipeline (Throttle → Reorder → Duplicate → Loss → Tamper)
→ protect()'d SocketChannel / DatagramChannel → 真实网络
```
WeakNet 作为**用户态 TCP/IP 代理**运行:App → TUN → VPN(解析+操控+转发)→ protect()'d Socket → 真实网络。TCP 连接由 VPN 代替 app 建立,app 只与 VPN 的虚拟 TCP 端点通信。