Skip to content

timberseoul/netFlow_tool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

netFlow_tool

netFlow_tool 是一个 (青春版netlimiter) Windows 本地 WebUI 网络流量监控工具,采用 Rust 和 Go 编写:

  • Rust core WinDivert 抓包、协议解析、PID 映射、流量聚合与 IPC 传输
  • Go WebUI host 拉起核心进程、轮询统计快照,并通过本地 HTTP/WebSocket 服务 React WebUI

功能概览

  • 按进程展示实时上传 / 下载速率
  • 展示当前会话最高上传 / 下载峰值速率,启动窗口日志会输出抓包丢包计数与 PID 映射记录
  • 展示累计上传 / 下载流量
  • 可以按 User / System / Service 分类查看进程
  • 可以按 All / Active / Inactive 状态筛选进程
  • 提供历史流量统计页面与历史上下行柱状图
  • 提供本地 WebUI 实时监测面板
  • 支持表头排序、分类筛选、父子进程树形展示与历史流量图表

使用说明

实时页面

  • 通过页面顶部导航栏在 Overview / Processes / History 页面之间切换
  • 点击 Processes 页面中进程表头的 Process / Upload / Download 切换排序方式与升降序;Peak/Total 等完整指标在 Details 面板展示
  • 点击进程名前的箭头展开 / 收起子进程
  • 父进程会显示本机程序图标;图标由本地 Go WebUI host 从进程可执行文件中提取、按 exe 路径缓存并后台预热
  • 在页面顶部导航栏中按 All / User / System / Service 筛选
  • Processes 页面表格标题处按 All / Inactive / Active 筛选进程状态
  • 进程树使用 Rust core 最新 1 秒快照,避免测速峰值被长窗口平均稀释

历史页面

  • History 页面显示基于每日历史数据的上传 / 下载柱状图,悬停提示统一使用 MB / GB 单位,并在 Recent Daily Usage 表格中支持按日期或总流量排序

项目结构

netFlow_tool/
├─ rust_core/                # Rust 抓包与聚合核心
│  ├─ src/
│  └─ libs/                  # WinDivert 运行时与导入库
├─ go-ui/                    # Go WebUI host、IPC 客户端、StatsService 与 React WebUI
├─ scripts/                  # 本地构建 / 运行脚本
├─ build/                    # 本地产物输出目录(生成物)
└─ .github/workflows/        # GitHub Actions 工作流

运行环境

  • Windows 10/11
  • 管理员权限运行
  • Rust MSVC toolchain
  • Go 1.21+
  • Node.js 22+(构建 React WebUI)

管理员权限仅用于 WinDivert 驱动抓包与监测,不会涉及其他额外的系统级用途。

WinDivert 文件说明

仓库现已包含项目运行与构建所需的 WinDivert 文件,位于 rust_core/libs/

  • WinDivert.dll
  • WinDivert64.sys
  • WinDivert.lib

其中:

  • WinDivert.dll:运行时动态库
  • WinDivert64.sys:内核驱动
  • WinDivert.lib:Rust 构建时使用的导入库

如果你准备替换 WinDivert 版本,请确保这三个文件保持版本匹配。

快速开始

在仓库根目录的 PowerShell 中执行:

# 构建 Rust core + Go WebUI host,并将最终产物复制到 build/
.\scripts\build.ps1

# 运行 WebUI host(会自动拉起并管理 Rust core)
.\scripts\run.ps1

首次真正抓包时,需要以管理员权限运行。

启动后,Go 进程会拉起本地 WebUI 服务,并随机监听一个高位端口,例如:

Web UI: http://127.0.0.1:52341

程序会尝试自动打开浏览器。即使浏览器没有自动弹出,也可以手动访问终端中输出的地址。

前端独立开发

修改 WebUI 样式或交互时,可以只启动 Vite 本地开发服务器,不需要启动 Go WebUI host、Rust core 或 WinDivert:

cd go-ui\web\webui
npm run dev

Vite 会监听固定地址:

http://127.0.0.1:5173

在该模式下,前端会自动使用内置 mock 流量快照数据,支持热更新实时预览界面;正式 npm run build 后嵌入 Go WebUI host 的版本仍然通过 /api/bootstrap/ws 读取真实后端数据。

WebUI 架构

WebUI 采用前后端分离:

  • 后端:Go 本地 HTTP server
    • 提供 /api/bootstrap 初始化接口
    • 提供 /ws WebSocket 实时推送接口
  • 前端:使用 Vite 构建的独立 React 工程
    • 使用 React 渲染
    • 使用 Tailwind CSS 做样式
    • 使用 shadcn CLI 生成的 UI 组件组织界面
    • 使用 TanStack Table 渲染表格
    • 使用 shadcn Chart 组件与 Recharts 绘制历史流量图表
    • 使用 api/client.js 与自定义 hooks 统一 bootstrap / WebSocket / mock 数据接入
    • 使用 lib/processTree.js 维护可测试的进程树构建与聚合逻辑

前端源码位于 go-ui/web/webui/,构建产物输出到 go-ui/web/webui/dist/,随后由 Go 程序直接嵌入并服务。

手动构建

构建 Rust core

cd rust_core
$env:WINDIVERT_PATH = (Resolve-Path ".\libs").Path
cargo build --release

构建 Go WebUI host

cd go-ui
go build -o ..\build\netFlow_tool-webui.exe .

输出产物

执行 .\scripts\build.ps1 后,build\ 目录下会生成:

  • netFlow_tool-core.exe
  • netFlow_tool-webui.exe
  • WinDivert.dll
  • WinDivert64.sys

双击 netFlow_tool-webui.exe 即可运行并自动拉起 netFlow_tool-core.exe 与本地 WebUI 服务。

运行机制

数据流

Network
  -> WinDivert
  -> crossbeam channel
  -> parser
  -> PID mapper
  -> FlowAggregator
  -> IPC pipe server
  -> Go StatsService
  -> Go HTTP/WebSocket server
  -> React WebUI

故障排查

提示需要管理员权限

这是因为 WinDivert 抓包需要管理员权限。WebUI host 会在检测到非管理员运行时尝试自动请求提权重启;也可以直接右键以管理员身份运行程序。

看不到流量数据

请检查:

  • 是否使用管理员权限启动
  • build\ 目录中是否包含 WinDivert.dllWinDivert64.sys
  • Rust core 是否已成功启动

构建失败

请检查:

  • 是否安装 Rust MSVC 工具链
  • 是否安装 Go 1.21+
  • 是否安装 Node.js 22+
  • rust_core/libs/ 中的 WinDivert 文件是否完整

已知限制

  • 当前以监控展示为主,限速逻辑尚未接入主流程
  • Go WebUI host 与 Rust core 之间同一时刻仅维护单个 IPC 客户端连接
  • IPC 当前仍使用 newline-delimited JSON;已带 protocol_version / snapshot_id,但尚未迁移到 length-prefixed framing

许可证与第三方组件

  • 本项目采用 MIT License
  • 项目依赖 WinDivert,请在发布和再分发时确认对应版本的许可证条款
  • WinDivert 官方项目:https://github.com/basil00/WinDivert

About

一个轻量化Windows终端网络流量监控工具

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors