1046prt/byteplay
GitHub: 1046prt/byteplay
一款提供完整捕获、编辑、重放往返能力的原始 TCP/UDP 数据包可视化分析与测试工具。
Stars: 0 | Forks: 0
# byteplay
**多平台网络数据包分析器与重放器** —— 捕获、编辑和重放原始 TCP/UDP 数据包,以测试服务器弹性。
## 为什么选择 byteplay?
| 工具 | 局限性 | byteplay 的优势 |
|---|---|---|
| Wireshark | 仅支持捕获/分析,不支持编辑后重发 | 完整的往返流程:捕获 → 编辑 → 重放 |
| Burp Suite | 仅支持 HTTP/HTTPS | 协议无关(原始 TCP/UDP,任意 payload) |
| Scapy(可编写脚本) | 无 GUI,学习曲线陡峭 | 简洁的 GUI,无需编写任何脚本 |
| Postman | 仅限应用层 (REST) | 工作在应用层以下 |
| hping3/nc | 仅支持 CLI,无持久化数据包库 | 已保存的数据包库 + diffing + 重放历史记录 |
**核心差异化特性:**
- **字节级十六进制 diffing** — 原始数据包和已编辑数据包之间的可视化差异
- **重放序列** — 将数据包链接为脚本化的会话重放
- **变异模糊测试** — 随机翻转字节,记录崩溃/超时
- **跨平台原生性能** — 基于 Tauri 的 Rust 捕获核心
- **本地优先,零遥测** — 数据绝不会离开您的设备
## 架构
```
┌─────────────────────────────────────────────────┐
│ Frontend (React + TypeScript) │
│ - Virtualized packet list │
│ - Hex/ASCII dual-pane viewer │
│ - Replay console + response viewer │
│ - Sequence editor + fuzzer dashboard │
└───────────────────▲──────────────────┬──────────┘
│ Tauri IPC │
┌───────────────────┴──────────────────▼──────────┐
│ Capture Engine (Rust) │
│ pnet: raw socket capture + protocol parsing │
│ socket2: TCP/UDP raw replay │
│ rusqlite: local packet library + history │
│ Multi-threaded ring buffer, non-blocking UI │
└─────────────────────────────────────────────────┘
```
## 技术栈
| 层级 | 技术 | 原因 |
|---|---|---|
| 捕获核心 | Rust + `pnet` | 内存安全的原始 socket 访问,接近 C 的性能 |
| 应用外壳 | **Tauri 2** | Rust 后端 + WebView 前端,二进制文件体积小 |
| 前端 | React 19 + TypeScript + Tailwind v4 | 快速迭代,虚拟化列表 |
| 十六进制查看器 | 自定义组件 | 高性能双窗格渲染 |
| 存储 | 通过 `rusqlite` 使用 SQLite | 简单、便携、无需服务器 |
| 重放 | `socket2` crate | 精确的 TCP/UDP 控制 |
## 项目结构
```
byteplay/
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── capture.rs # Packet capture engine (pnet)
│ │ ├── parser.rs # Ethernet/IP/TCP/UDP parsing
│ │ ├── replay.rs # TCP/UDP replay + fuzzing
│ │ ├── storage.rs # SQLite + PCAP/JSON export
│ │ ├── lib.rs # Tauri commands & state
│ │ └── main.rs # Entry point
│ └── Cargo.toml
├── src/ # React frontend
│ ├── components/
│ │ ├── Sidebar.tsx
│ │ ├── Header.tsx
│ │ ├── CaptureView.tsx
│ │ ├── PacketList.tsx
│ │ ├── PacketDetail.tsx
│ │ ├── HexViewer.tsx
│ │ ├── LibraryView.tsx
│ │ ├── ReplayView.tsx
│ │ ├── SequenceView.tsx
│ │ └── FuzzerView.tsx
│ ├── App.tsx
│ ├── main.tsx
│ ├── commands.ts # Tauri IPC wrappers
│ ├── types.ts # Shared TypeScript types
│ └── style.css
├── index.html
├── vite.config.ts
├── LICENSE
└── README.md
```
## 设置与开发
### 前置条件
- **Node.js** 18+ 和 npm
- **Rust** 工具链(通过 [rustup](https://rustup.rs/))
- **平台特定要求:**
- **Windows:** 包含“C++ build tools”工作负载的 [Visual Studio Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) + [Npcap](https://npcap.com/)
- **macOS:** Xcode Command Line Tools (`xcode-select --install`) + [Homebrew libpcap](https://formulae.brew.sh/formula/libpcap) (`brew install libpcap`)
- **Linux:** `sudo apt install libpcap-dev`
### 安装依赖
```
# Frontend
npm install
# Rust backend (from src-tauri/)
cd src-tauri && cargo build
```
### 开发
```
# 同时启动 frontend dev server 和 Tauri app
npm run tauri dev
```
### 构建
```
npm run tauri build
```
## 安全与伦理
此工具涉及原始 socket 和数据包构造。请注意:
- **默认绑定**:仅针对 `localhost` / 私有网络范围
- **外部目标**:需要显式选择开启(`Allow external targets` 复选框)
- **审计日志**:每次重放操作都会在本地记录时间戳、目标和 payload 哈希
- **许可证**:MIT —— “仅限用于您拥有或获得明确授权进行测试的系统”
## 已知局限
- **Windows 上需要 Npcap**:数据包捕获需要安装 Npcap(或 WinPcap)
- **无 TLS 解密**:此工具在原始 socket 层面运行;TLS 是不透明的
- **无 pcap 注入**:捕获使用 pnet 的数据链路通道,而非原始 pcap 注入
- **单接口捕获**:一次只能进行一个捕获会话
## 贡献
欢迎贡献!请在 [GitHub](https://github.com/1046prt/byteplay) 上开启 issue 或 PR。
## 许可证
[MIT](LICENSE)
标签:Elastic Stack, Rust, SNI设置, Tauri, 协议分析, 可视化界面, 权限提升, 流量重放, 网络抓包, 网络流量审计, 自动化攻击