NetAssistant 是一个基于 Rust 构建的高性能、现代化的跨平台网络调试工具,专为开发者设计,支持 Windows、Linux 和 macOS 系统。它提供了直观的界面,用于测试和调试网络通信,支持 TCP/UDP 协议的客户端和服务端模式,帮助开发者快速验证网络通信逻辑和数据格式,是网络应用开发、硬件调试和嵌入式系统开发的得力助手。
- 多协议支持:完整支持 TCP/UDP 客户端和服务端模式
- IPv4/IPv6 双栈:同时支持 IPv4 和 IPv6 协议,适应各种网络环境
- 多种 TCP 解码器:支持原始数据、基于行的解码、长度前缀解码和 JSON 解码,满足不同协议格式需求,有效解决 TCP 粘包问题
- JSON 格式化:发送框在文本模式提供「美化/压缩」按钮格式化待发送内容;接收区顶部可切换「原始/美化/压缩」全局显示格式,支持美化缩进和压缩展示,非JSON内容原样返回
- 聊天式报文记录:直观展示报文交互过程,便于调试和分析
- 配置持久化:自动保存连接配置,下次启动直接使用
- 复制消息:快速复制单条消息内容到剪贴板,支持文本和十六进制两种格式
- 收藏消息:将重要消息添加到收藏夹,支持为收藏项添加备注说明,并提供关键字搜索
- 实时日志记录:手动开启后所有收发消息实时异步写入日志文件(每条flush落盘),支持自定义保存路径,断开连接自动刷新关闭;日志文件名可点击打开目录
- 随时手动导出:不需要一直记日志?可随时导出当前消息记录为 TXT/JSON/CSV 格式文件,便于归档、分享和二次分析
- UDP 广播回复智能展示:针对上位机/物联网设备发现场景优化,向广播地址发送指令后接收所有设备回复,非预期地址的回复用红色高亮标识,不丢失重要响应
- 连接配置编辑:已保存的连接配置支持直接编辑修改,无需删除重建
- 自动回复功能:支持测试用的自动回复,模拟服务端或客户端响应
- 周期发送功能:支持定时周期性发送消息,用于压力测试或长时间稳定性测试
- 压力测试功能:内置 TCP/UDP 高并发压力测试引擎,实时展示 QPS(当前/峰值)、总发送/成功/失败、活跃连接(当前/峰值)、断连/重连、收发字节统计;p50/p95/p99/平均/最大延迟分位数仅在 Ping-Pong(往返)模式下显示(该模式发送后等待响应,可统计 RTT 延迟);支持失败原因分类(连接失败/发送失败/接收超时/对端关闭/校验失败),帮助快速定位瓶颈;支持变量模板(
${seq}全局序号、${worker_id}线程ID、${counter}本地计数、${timestamp}时间戳、${uuid}随机UUID、${random:min:max}随机整数)、配置自动保存复用和 CSV 报告导出
- 暗黑模式支持:自动适应系统主题,提供舒适的夜间使用体验
- 多标签页管理:同时管理多个连接,方便切换和对比
- 客户端消息查看:在服务端模式下,可选择特定客户端查看其消息
- UDP 手动添加客户端:在 UDP 服务端模式下,可手动添加客户端地址,便于主动向指定地址发送数据(UDP 无连接特性)
- 开发者通信验证:包括后端开发者对接硬件前模拟硬件发送数据,以及网络应用开发时测试客户端与服务端之间的通信逻辑和数据格式,验证服务端或应用的正确性和鲁棒性
- 硬件设备测试:涵盖硬件工程师测试常规硬件设备(如传感器、控制器等),以及嵌入式开发者验证资源受限嵌入式系统的网络协议栈实现、数据传输效率和内存占用情况,确保设备网络功能正常运行
- 服务性能压测:利用内置压力测试功能对自研服务端进行并发吞吐、延迟分布和稳定性评估,快速定位性能瓶颈
- Windows: 10 或更高版本
- Linux: 需要 GTK3 库(如 Ubuntu 22.04 及以上版本)
- macOS: 10.15 或更高版本
推荐方法:使用 winget 安装
- 优势:支持自动升级,安装和管理更便捷
- 步骤:
- 首先安装 winget(Windows 10 1809+ 或 Windows 11 内置,或参考 Microsoft 官方文档 了解安装方法)
- 打开命令提示符或 PowerShell,运行以下命令:
winget install SunJary.NetAssistant
- 后续升级只需运行:
winget upgrade SunJary.NetAssistant
备选方法:从 GitHub Release 下载 请访问 GitHub Release 页面 下载最新版本。
推荐方法:从 GitHub Release 下载
- 步骤:
- 请访问 GitHub Release 页面 下载最新版本的 Linux 压缩包
- 解压安装包:
tar -xzf netassistant-linux-x64.tar.gz
- 运行可执行文件:
./netassistant
推荐方法:从 GitHub Release 下载
- 步骤:
- 请访问 GitHub Release 页面 下载最新版本的 macOS 压缩包
- 解压安装包
- 将 NetAssistant 拖放到 Applications 文件夹
- 右键点击应用程序,选择 "打开" 运行(首次运行需要此操作)
根据不同操作系统的安装方法,运行对应的可执行文件即可。
-
创建连接
- 点击左侧面板的
[+新建]按钮 - 选择连接类型(客户端/服务端)
- 选择协议(TCP/UDP)
- 填写地址和端口
- 创建完成后,在连接详情页面可以配置 TCP 解码器类型
- 点击左侧面板的
-
连接到服务器
- 对于客户端连接,点击
[连接]按钮 - 对于服务端连接,点击
[启动]按钮
- 对于客户端连接,点击
-
选择消息模式
- 在底部输入框上方,选择消息发送模式:文本模式或十六进制模式
- 文本模式:直接输入字符串消息
- 十六进制模式:输入十六进制格式数据,如 "0A0B0C"
-
发送消息
- 在底部输入框输入消息内容
- 点击
[发送]按钮或按 Enter 键发送
-
周期发送
- 在连接标签页中启用周期发送功能
- 设置发送间隔(毫秒)
- 点击
[发送]按钮开始周期发送 - 取消勾选周期发送可停止发送任务
-
自动回复
- 在连接标签页中启用自动回复功能
- 设置自动回复内容
- 收到消息时自动回复
-
消息管理
- 复制消息:点击消息项上的复制按钮,将内容复制到剪贴板
- 收藏消息:点击消息项上的收藏按钮,可将消息加入收藏夹;可在弹窗中为收藏项填写备注,并通过关键字搜索快速定位
- JSON 格式化:
- 发送端:文本输入模式下,输入框旁有「美化」「压缩」按钮,可格式化待发送的 JSON 内容
- 接收端:顶部工具栏有「格式:原始/美化/压缩」按钮,切换所有消息的显示格式;非 JSON 内容会原样显示
- 导出消息记录:在连接标签页中点击导出按钮,选择 TXT / JSON / CSV 格式并保存到本地文件
- 实时日志记录:点击「日志记录」开关手动开启/关闭记录,开启后所有消息实时异步写入日志文件(每条消息自动flush落盘);默认保存到
文档/NetAssistant/logs/目录,点击旁边的铅笔按钮可自定义保存路径,日志文件名可点击直接打开所在目录,断开连接自动刷新关闭日志
-
编辑连接配置
- 对于已保存的连接配置,右键点击连接选择编辑,或点击编辑按钮
- 可修改协议类型、地址、端口等配置,无需删除重建
-
UDP 手动添加客户端
- 在 UDP 服务端模式下,点击
[+添加客户端]按钮 - 输入目标客户端的 IP 和端口
- 添加完成后即可主动向该地址发送消息
- 在 UDP 服务端模式下,点击
-
UDP 设备发现场景(上位机/物联网调试)
- 当需要发现局域网内的物联网/嵌入式设备时,向广播地址(如
192.168.1.255)发送 discovery 指令 - 所有设备的回复都会正常显示(不会被源地址过滤)
- 来自非目标地址的设备回复,源地址会用浅红色高亮标识,鼠标悬停显示「非预期地址的回复」提示,帮助你识别哪些设备做出了响应
- 既不丢失重要的设备响应,又能清晰区分广播回复与目标地址正常回复
- 当需要发现局域网内的物联网/嵌入式设备时,向广播地址(如
-
压力测试
- 通过标签页上的'压测'入口切换到压力测试页面
- 填写目标地址、端口、并发客户端数、发送速率、消息内容及变量模板(支持
${seq}、${worker_id}、${counter}、${timestamp}、${uuid}、${random:min:max}) - 压测模式支持:
- Ping-Pong(往返)模式:发送后等待响应,会统计 RTT 延迟(p50/p95/p99/平均/最大),适合接口性能测试
- 吞吐模式:只发送不等待响应,不统计延迟,适合最大吞吐量测试
- 连接模式支持:短连接(每次请求新建连接)、长连接
- 点击开始后,在压力测试面板实时查看 QPS(当前/峰值)、总发送/成功/失败、活跃连接(当前/峰值)、断连/重连、收发字节统计;有失败时会自动显示失败原因分类(连接失败/发送失败/接收超时/对端关闭/校验失败)
- 压测配置自动保存,下次打开自动回填
- 测试结束后可导出 CSV 报告,点击停止按钮可随时终止测试
-
管理连接
- 使用标签页切换不同连接
- 点击标签页上的
×关闭连接 - 右键点击连接可以删除或编辑保存的配置
-
客户端消息查看
- 在服务端模式下,左侧面板会显示连接的客户端列表
- 点击单个客户端地址可以选中该客户端,右侧消息列表会只显示该客户端的消息
- 再次点击已选中的客户端可以取消选择,恢复显示所有消息
- 服务端回复给该客户端的消息也会包含在查看结果中
-
Rust 驱动:使用 Rust 构建,实现最大性能和安全性
- 零成本抽象,编译时优化
- 内存安全保证,无需垃圾回收
- 现代化的并发模型
-
Tokio 异步运行时:高效的异步 I/O 操作
- 基于 epoll/kqueue 的高性能事件循环
- 非阻塞 I/O,最大化系统资源利用率
- 轻量级任务调度,支持百万级并发连接
-
GPUI 框架:前沿的 GPU 加速 UI
- 基于 GPU 的渲染,充分利用硬件加速
- 硬件加速的文本渲染
- 流畅的 60fps 体验
-
自适应主题:自动适应系统主题,支持亮色和暗色模式
- 提供舒适的视觉体验
- 减少长时间使用的视觉疲劳
-
响应式设计:适应不同屏幕尺寸的自适应布局
- 灵活的窗口大小调整
- 自适应的消息显示
- 优化的空间利用
-
实时消息监控:即时消息显示和自动滚动
- 毫秒级消息响应
- 自动滚动到最新消息
- 消息时间戳精确到毫秒
-
智能解码器:多种解码方式,适应不同协议格式
- 支持原始数据、行分隔、长度前缀和 JSON 格式
- 可根据协议需求灵活切换
-
压测引擎:独立的压力测试引擎层
- 零 GPUI 依赖的纯逻辑设计,便于复用与测试
- 基于令牌桶的速率限制,精准控制发送频率
-
连接管理:支持多个同时连接
- 多标签页界面
- 独立的连接状态管理
- 便捷的连接切换
-
GPUI - GPU 加速 UI 框架
- 高性能的 GPU 渲染
- 现代化的组件模型
- 响应式状态管理
-
gpui-component - 现代 UI 组件库
- 丰富的 UI 组件
- 统一的设计语言
- 易于定制和扩展
- Tokio - 网络异步运行时
- 高性能异步 I/O
- 丰富的网络协议支持
- 成熟的生产级解决方案
开发过程中使用内置压测功能对 NetAssistant 自身进行了高并发测试,借此发现并优化了多个性能瓶颈(消息批量更新、批量日志写入等),确保在高负载场景下依然保持流畅:
-
启动时间:< 100ms
- 快速启动,无需等待
- 即时响应用户操作
-
消息吞吐量
- 高并发消息处理,批量更新优化降低CPU占用
- 低延迟的消息传输
-
内存占用:< 20MB
- 轻量级资源占用
- 优化消息存储,高负载下内存稳定
-
UI 响应:60fps 渲染
- 流畅的用户体验
- 大量消息场景下无卡顿
netassistant/
├── src/ # 源代码目录
│ ├── main.rs # 应用入口:初始化日志、创建应用实例、启动主窗口
│ ├── app.rs # 主应用逻辑:管理连接、处理网络事件、状态管理
│ ├── message.rs # 消息处理:定义消息结构、消息方向、收藏项等
│ ├── export.rs # 消息导出:支持 TXT/JSON/CSV 多种格式
│ ├── assets.rs # 资源加载:图标、字体等
│ ├── custom_icons.rs # 自定义图标定义
│ ├── log_writer.rs # 日志写入器
│ ├── theme_detector.rs # 主题检测
│ ├── theme_event_handler.rs # 主题事件处理
│ ├── theme_manager.rs # 主题管理
│ ├── update_checker.rs # 应用更新检查
│ ├── config/ # 配置管理:连接配置、应用统计、存储加载
│ │ ├── connection.rs # 连接配置和类型定义
│ │ ├── storage.rs # 配置持久化存储
│ │ ├── app_stats.rs # 应用统计数据
│ │ └── mod.rs # 配置模块导出
│ ├── core/ # 核心逻辑:与 UI 解耦的纯逻辑层
│ │ └── message_processor.rs # 消息处理器
│ ├── network/ # 网络通信:TCP/UDP 协议、编解码、连接管理
│ │ ├── connection/ # 连接管理:客户端和服务端连接
│ │ │ └── manager.rs # 连接管理器
│ │ ├── protocol/ # 协议实现:TCP/UDP 协议处理与解码器
│ │ │ ├── tcp.rs # TCP 协议
│ │ │ ├── udp.rs # UDP 协议
│ │ │ └── decoder.rs # 解码器(原始/行/长度前缀/JSON)
│ │ ├── events.rs # 网络事件定义
│ │ └── interfaces.rs # 网络接口抽象
│ ├── stress/ # 压力测试模块:零 GPUI 依赖的引擎层
│ │ ├── engine.rs # 压测引擎:调度工作线程、聚合统计
│ │ ├── client_worker.rs # 客户端工作线程:长/短连接发送逻辑
│ │ ├── config.rs # 压测配置
│ │ ├── port_range.rs # 端口范围解析
│ │ ├── rate_limiter.rs # 令牌桶速率限制器
│ │ ├── stats.rs # 实时统计(QPS/延迟分位数)
│ │ ├── report.rs # CSV 报告生成
│ │ ├── variables.rs # 变量模板(seq/worker_id/counter 等)
│ │ └── events.rs # 压测事件定义
│ ├── ui/ # UI 组件:构建用户界面和处理用户交互
│ │ ├── main_window.rs # 主窗口组件
│ │ ├── connection_panel.rs# 连接面板:显示和管理连接
│ │ ├── connection_tab.rs # 连接标签页:每个标签页对应一个连接
│ │ ├── stress_panel.rs # 压力测试面板:实时展示压测指标
│ │ ├── tab_container.rs # 标签页容器
│ │ ├── components/ # 通用 UI 组件
│ │ │ └── input_with_mode.rs # 带模式切换的输入框(文本/十六进制)
│ │ └── dialog/ # 对话框
│ │ ├── new_connection.rs # 新建/编辑连接对话框
│ │ ├── add_client.rs # UDP 手动添加客户端对话框
│ │ ├── decoder_selection.rs# 解码器选择对话框
│ │ ├── favorite_list.rs # 收藏列表对话框
│ │ ├── favorite_remark.rs # 收藏备注对话框
│ │ ├── port_limit_help.rs # 端口限制帮助对话框
│ │ └── stress_config.rs # 压力测试配置对话框
│ └── utils/ # 工具函数:通用工具和辅助功能
│ ├── hex.rs # 十六进制数据处理
│ └── text_measurement.rs# 文本测量
├── assets/ # 资源文件:图标、字体和截图
│ ├── icon/ # 应用图标文件
│ ├── icons/ # SVG 矢量图标
│ ├── fonts/ # 内嵌字体(JetBrains Mono)
│ └── screenshots/ # 应用截图
├── themes/ # 主题配置文件
├── .cargo/ # Cargo 配置:Rust 构建工具配置
├── .github/ # GitHub 配置:CI/CD 工作流
├── Cargo.toml # 项目配置:依赖管理和项目元数据
├── Cargo.lock # 依赖锁文件:固定依赖版本
├── README.md # 项目文档:中文说明
├── README-en.md # 英文文档:英文说明
└── build.rs # 构建脚本:自定义构建逻辑
- 文件数据源
- 多语言支持
- 十六进制编辑器
- 支持 SSE 调试
- 支持更多数据格式的编解码
- 支持 WebSocket 协议
Q: 支持哪些操作系统?
A: 支持 Windows 10/11、Linux(需要 GTK3)和 macOS 10.15+。
Q: 可以同时管理多少个连接?
A: 理论上没有限制,取决于系统资源。实际使用中同时管理 10-20 个连接完全没问题。
Q: UDP 模式下为什么有的消息地址是红色的?
A: 红色地址表示这条消息来自「非预期地址」,这是专门为上位机/物联网设备发现场景设计的功能。当你向广播地址(如 192.168.1.255)发送发现指令时,局域网内的多个设备会从各自不同的 IP 回复响应。这些回复会正常显示,但源地址用红色高亮标识,既不丢失设备响应,又能帮你区分广播回复和正常回复。
Q: 压力测试支持哪些协议?
A: 支持 TCP 和 UDP 协议压测,可配置并发数、发送速率、变量模板等。
Q: 压测报告可以导出吗?
A: 可以,测试结束后支持导出 CSV 格式的详细统计报告。
Q: UDP 服务端怎么主动发消息给客户端?
A: UDP 是无连接协议,在 UDP 服务端模式下点击「+添加客户端」按钮,输入目标 IP:端口 后即可主动向该地址发送消息。
Q: 消息支持导出哪些格式?
A: 支持 TXT(便于阅读)、JSON(结构化)、CSV(表格分析)三种格式。
Q: 日志怎么开启?保存在哪里?可以修改路径吗?
A: 点击连接标签页中的「日志记录」开关即可手动开启/关闭日志记录。默认保存在 文档/NetAssistant/logs/ 目录,点击旁边的铅笔编辑按钮可以自定义保存路径,日志文件名可点击直接打开所在目录。断开连接时日志会自动刷新关闭。
Q: TCP 解码器支持哪些类型?
A: 支持原始数据、基于行的解码、长度前缀解码和 JSON 解码,有效解决 TCP 粘包问题。
Q: 支持暗黑模式吗?
A: 支持,NetAssistant 自动跟随系统主题切换亮色/暗色模式。
Q: 已保存的连接配置可以修改吗?
A: 可以,右键点击连接选择编辑,或点击编辑按钮即可修改地址、端口等配置,无需删除重建。
如果您需要自定义编译或获取最新开发版本,可以从源代码编译:
git clone https://github.com/sunjary/netassistant.git
cd netassistant
cargo build --release编译完成后,可执行文件将位于 target/release 目录下。
欢迎贡献代码、报告问题或提出建议!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 Apache License 2.0 许可证 - 详见 LICENSE 文件。
感谢以下开源项目的贡献:
如果这个项目对你有帮助,请给它一个 ⭐️
Made with ❤️ by Rust Community











