kiroro123/netshapper
GitHub: kiroro123/netshapper
NetShaper 是一个安全优先的授权网络流量整形与诊断工具包,用于在受控实验室中对目标设备进行网络发现、数据包捕获、流量限速及 MITM 风格的 HTTPS 拦截测试。
Stars: 0 | Forks: 0
# NetShaper
NetShaper 是一个模块化的、授权的网络测试工具包,用于受控实验室和客户端网络分析。它将网络发现、数据包捕获、DNS 处理、流量整形和 MITM 风格的拦截结合在一个 Python CLI 中。
**请仅在您拥有或获得明确书面测试许可的网络和设备上使用。**
## 架构
NetShaper 被组织为可独立审计的组件:
```
┌─────────────────────────────────────────────────────────────────┐
│ CLI Entry Point │
│ (src/netshaper/ui/cli.py) │
└─────────────────────┬───────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
┌────────┐ ┌────────────┐ ┌──────────┐
│Discovery│ │Authorization│ │Firewall │
│ │ │ Policy │ │Manager │
│ ARP/NDP │ │ │ │ │
│ sweep │ │ CIDR checks │ │ iptables │
│ hostname│ │ │ │ nat/mgle │
└────────┘ └────────────┘ └──────────┘
│ │ │
└───────────────┼───────────────┘
│
┌───────────────┼───────────────┬──────────────┐
│ │ │ │
▼ ▼ ▼ ▼
┌────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Traffic│ │ Packet │ │ mitmproxy│ │ Stale │
│ Shaper│ │ Sniffer │ │ Manager │ │ Recovery │
│(tc HTB)│ │ │ │ │ │ Manager │
│ │ │ .pcap │ │ HTTPS │ │ │
│ │ │ capture │ │ intercept│ │ Cleanup │
└────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │ │
└───────────────┼───────────────┴──────────────┘
│
▼
┌─────────────────────────────┐
│ State Persistence Layer │
│ /run/netshaper/state.json │
└─────────────────────────────┘
```
## 组件职责
| 模块 | 用途 | 审计面 |
|--------|---------|---|
| **AuthorizationPolicy** | 根据授权的 CIDR 允许列表验证目标 IP | IP 验证、边界检查 |
| **FirewallManager** | 管理用于转发和针对特定目标拦截的 iptables/ip6tables 规则 | 防火墙规则构建、清理 |
| **MitmProxyManager** | 以透明模式启动、监控并终止 mitmproxy | 进程生命周期、端口绑定 |
| **RecoveryManager** | 检测并清理崩溃会话遗留的孤立规则 | 失效会话检测、原子清理 |
| **TargetSession** | 针对特定目标的拦截(ARP 欺骗、DNS 重定向、防火墙规则) | 单目标规则作用域、隔离 |
| **TrafficShaper** | 基于 Linux `tc` 的 HTB qdisc 带宽限速 | Qdisc 生命周期、速率限制 |
| **PacketSniffer** | 使用 libpcap 捕获数据包至 .pcap | 数据包捕获、滚动文件 |
| **NetworkDiscovery** | ARP 扫描和主机名解析 | 网络扫描、主机枚举 |
## 工作流程:DNS 重定向 + 强制门户 + HTTPS 检查
测试目标设备的典型流程:
```
1. DISCOVERY PHASE
├─ NetShaper discovers targets on subnet via ARP sweep
├─ Resolves hostnames (reverse DNS)
└─ Validates targets are in authorized CIDR
2. SETUP PHASE (per-target)
├─ AuthorizationPolicy checks target IP
├─ FirewallManager applies per-target iptables rules
├─ Setup ARP/NDP spoofing (TargetSession)
│ └─ Device now sends traffic to NetShaper IP
├─ Setup DNS interception (iptables redirect 53 → fake_server3)
├─ Setup HTTP captive portal redirect
└─ Setup HTTPS inspection (mitmproxy transparent mode)
3. ACTIVE SESSION
├─ fake_server3 captures DNS queries
│ ├─ Responds with spoofed A/AAAA records
│ └─ Serves captive portal redirect
├─ Device visits http://..., gets 302 to captive portal
├─ Captive portal serves mitmproxy root CA download
├─ Device installs CA and retries HTTPS
├─ HTTPS traffic flows through mitmproxy (transparent proxy)
├─ Traffic shaping applies bandwidth limits (tc HTB)
├─ Packet sniffer captures all traffic to .pcap
└─ State persisted to /run/netshaper//state.json
4. SHUTDOWN PHASE
├─ Signal all subsystems to halt
├─ TargetSession cleanup (remove ARP spoofing, iptables rules)
├─ FirewallManager cleanup (remove global forwarding rules)
├─ MitmProxyManager cleanup (terminate mitmproxy)
├─ RecoveryManager verifies no stale rules remain
├─ Sysctl settings restored to pre-session state
└─ State file cleaned up
5. RECOVERY (if process crashes)
├─ Next NetShaper startup detects stale /run/netshaper/state.json
├─ RecoveryManager checks process ownership (PID + start time)
├─ Orphaned rules detected and removed
│ ├─ Firewall rules cleaned
│ ├─ Traffic shaper qdisc removed
│ ├─ Sysctl settings restored
│ └─ State file deleted
└─ Recovery logged to /var/log/netshaper.log
```
## 功能
- 双栈 ARP + NDP 欺骗(IPv4 和 IPv6 MITM)
- 针对特定目标的 DNS 重定向和强制门户 (HTTP)
- 通过 Linux `tc` HTB 进行带宽限速
- 带有可选滚动 `.pcap` 文件的数据包捕获
- 通过 mitmproxy 进行透明 HTTPS 检查
- 原子状态持久化和自动失效会话恢复
- 完整的 `--dry-run` 模式 —— 仅打印命令,不修改系统
- 模块化、可独立审计的组件
## 要求
- Linux,Python ≥ 3.10
- Root (`sudo`)
- 位于 PATH 中的 `iptables` / `ip6tables`、`tc`、`sysctl`
- `scapy`、`psutil`(自动安装)
## 安装说明
```
python -m pip install -e .
```
开发附加包(pytest、mypy、bandit、ruff、coverage):
```
python -m pip install -e ".[dev]"
```
## 快速入门
```
sudo env PYTHONPATH="$PWD/src" python -m netshaper -i \
--allow-cidr
```
Dry-run 预览(不改变系统):
```
sudo env PYTHONPATH="$PWD/src" python -m netshaper -i \
--allow-cidr --targets --dry-run
```
可选的 DNS/HTTP 强制门户辅助工具(在单独的终端中):
```
sudo env PYTHONPATH="$PWD/src" python -m netshaper.fake_server3 --smart-spoof-all --host-ip
```
## 用户指南
请参阅 [USER_GUIDE.md](USER_GUIDE.md) 了解完整的工作流程、shell 别名、伪服务器模式、发现行为、dry-run 用法和故障排除。
## 安全与风险
请参阅 [SECURITY.md](SECURITY.md) 了解:
- 已知风险(未经身份验证的 `/cert` endpoint、root 权限要求)
- 缓解策略
- 推荐的审计程序
- 失效会话恢复行为
## 测试
单元测试(模拟):
```
python -m pytest tests/ -v --cov=src/netshaper --cov-report=term
```
仅限 Root 的端到端 namespace 检查(需要网络 namespace):
```
sudo env PYTHONPATH="$PWD/src:$PWD" python -m pytest tests/test_netns_integration.py -v
```
代码质量检查:
```
ruff check src/netshaper/
mypy src/netshaper/
bandit -r src/netshaper/ -ll
```
发布前检查清单(合并到 `main` 之前):
- [ ] 所有单元测试通过 (`pytest tests/`)
- [ ] 覆盖率 ≥ 80% (`coverage report`)
- [ ] 类型检查通过 (`mypy src/netshaper/`)
- [ ] 风格和 lint 通过 (`ruff check`)
- [ ] 安全检查通过 (`bandit`)
- [ ] 特权测试在自托管 runner 上通过 (`sudo pytest tests/test_netns_integration.py`)
## 发布规范
不要分发工作树的 ZIP 压缩包。请从干净的检出中使用 `python -m build` 或 `git archive` 构建发布,以便排除 `.git`、虚拟环境、数据包捕获、日志、缓存、参考工件和状态文件。
将 Git 历史记录和数据包捕获视为敏感材料。
## 日志和调试
在正常运行(非 `--dry-run`)时,NetShaper 会写入 `/var/log/netshaper.log`。
启动后,CLI 会打印一个已验证的证据块:
- Session ID、时间戳、接口
- 目标、状态文件路径
- 监控线程状态、嗅探器状态、数据包捕获文件
- mitmproxy 进程 ID 和日志路径
- 检测到的任何 runtime 错误
在活动会话期间,NetShaper 会持续监控:
- 带宽监控线程(更新 TX/RX 计数器)
- 数据包嗅探器(运行中或已停止)
- mitmproxy 进程(运行中或已崩溃)
- 本地重定向端口(可达或不可达)
如果任何健康检查失败,它将被报告为错误并触发正常清理。
## 操作说明
- 会话状态存储在 `/run/netshaper/` 下(root 所有,模式 0700),并在退出时清理
- 同一时间只能运行一个 NetShaper 实例(通过 `/run/netshaper/netshaper.lock` 强制执行)
- `fake_server3` 是用于强制门户和 DNS 实验场景的可选辅助工具;ARP 欺骗或流量整形不需要它
- 在运行实时会话之前,请广泛使用 `--dry-run`
- 在会话期间和之后监控 `/var/log/netshaper.log`
- 防火墙规则使用 `netshaper::global` 标记,以便于识别
## 故障排除
请参阅 [USER_GUIDE.md](USER_GUIDE.md) 获取详细的故障排除步骤,包括:
- 设备未被欺骗
- DNS 未重定向
- 流量整形未应用
- mitmproxy 未启动
- 失效会话恢复
标签:Python CLI, Wildcard支持, 中间人攻击, 情报分析, 授权测试, 流量 shaping, 系统分析, 网络分析, 网络测试, 网络诊断, 逆向工具, 防御绕过