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, 数据包注入, 日志审计, 流量监控, 程序破解, 网络抓包, 网络流量工程