one-api/godivert

GitHub: one-api/godivert

一个纯 Go 实现的 WinDivert 用户态网络库,用于在 Windows 上高效捕获、过滤和注入网络数据包,无需 CGO 依赖。

Stars: 4 | Forks: 2

# GoDivert [WinDivert](https://github.com/basil00/WinDivert) 和 [FastDivert](https://github.com/one-api/FastDivert)(开发中)用户态库的高性能、纯 Go 实现。 GoDivert 允许你在 Windows 上捕获和注入网络数据包,而无需复杂的 CGO 或外部 C 依赖。它专为高性能网络监控、安全和流量工程而设计。 ## 主要特性 - **🚀 零 CGO 依赖**:完全使用纯 Go 和 `golang.org/x/sys/windows` 构建。无需 GCC 或 MinGW。 - **🐹 惯用的 Go 风格**:以 Go 优先的理念设计,具有友好的错误处理和结构化的类型。 - **📦 内嵌驱动**:使用 `go:embed` 将 WinDivert 驱动直接打包到你的二进制文件中。 - **⚡ 高性能**:优化的驱动交互,实现低延迟的数据包处理。 - **🔍 纯 Go 过滤器编译器**:包含一个完整的用 Go 实现的过滤器编译器。 ## 快速开始 ``` package main import ( "github.com/one-api/godivert" ) func main() { // Open driver with a filter divert, err := godivert.New("!loopback and (tcp or udp)", godivert.LayerNetwork, 0, 0) if err != nil { panic(err) } defer divert.Close() // Buffer for packet data packet := make([]byte, 2000) var addr godivert.Address // Recv Send Loop for i := 0; ; i++ { readLen, err := divert.Recv(packet, &addr) if err != nil { panic(err) } _, err = divert.Send(packet[:readLen], &addr) if err != nil { panic(err) } } } ``` ## 示例 GoDivert 在 [examples/](examples/) 目录下提供了几个实际的示例。这些示例 展示了如何将 GoDivert 用于高级网络工程、安全和性能分析。 ### 1. 网络带宽限制器与延迟整形器 在特定的 IP/UDP/TCP 流量上模拟恶劣的网络条件(人为延迟、丢包和流量速率限制)。 * **用例**:在恶劣的网络条件下测试多人游戏或移动 API(类似于可编程的、轻量级的 CLI 版本的 Clumsy)。 * **如何运行**: # 注入 100ms 延迟,5% 丢包率,并将速度限制为 256 KB/s go run ./examples/bandwidth_limiter -latency 100 -loss 5.0 -bandwidth 256 ### 2. DNS Sinkhole 与欺骗防火墙 一个数据包级别的 DNS 防火墙。拦截出站 DNS 查询,解析查询的域名,并立即阻止/欺骗匹配广告/跟踪阻止列表的查询,将其解析为 `127.0.0.1` / `::`。 * **用例**:构建自定义的网络级广告拦截器或安全网关,而无需修改 DNS 设置或启动 DNS 服务器守护进程。 * **如何运行**: go run ./examples/dns_sinkhole ### 3. 实时进程连接与流量监控器 实时监控活动的 TCP/UDP 连接,将 Windows 进程 ID (PID) 解析为其进程映像名称(例如 `chrome.exe`、`spotify.exe`),并渲染一个交互式的彩色终端仪表板。 * **用例**:无需庞大的数据包捕获库,即可获得完整、轻量级的进程级网络流量可见性。 * **如何运行**: go run ./examples/flow_monitor ## 测试 使用以下命令运行测试: ``` go test ./... ``` ## 致谢 基于 Basil 的 [WinDivert 项目](https://github.com/basil00/WinDivert)。 ## 许可证与联系 * **许可证**:本项目基于 MIT 许可证授权。 版权所有 (c) 2026 github.com/one-api。 * WinDivert 驱动二进制文件基于 LGPL-3.0 许可证授权。 * **联系方式**:[hello@one-api.net](mailto:hello@one-api.net) 或提交一个 GitHub Issue。
标签:EVTX分析, Go语言, WinDivert, 数据包注入, 日志审计, 流量监控, 程序破解, 网络抓包, 网络流量工程