UDPME 项目教程
udpme项目地址:https://gitcode.com/gh_mirrors/ud/udpme
1. 项目的目录结构及介绍
udpme/
├── .github/
│ └── workflows/
│ └── goreleaser.yml
├── .gitignore
├── LICENSE
├── README.md
├── go.mod
├── go.sum
├── udpme.go
└── upstream.go
- .github/workflows/goreleaser.yml: GitHub Actions 的工作流配置文件,用于自动化构建和发布。
- .gitignore: Git 忽略文件配置。
- LICENSE: 项目许可证,采用 GPL-3.0 许可证。
- README.md: 项目说明文档。
- go.mod: Go 模块依赖管理文件。
- go.sum: Go 模块依赖的校验和文件。
- udpme.go: 项目主文件,包含主要的逻辑和功能。
- upstream.go: 上游处理文件,负责与上游服务器通信。
2. 项目的启动文件介绍
udpme.go 是项目的启动文件,主要包含以下功能:
- 初始化配置
- 启动 UDP 监听
- 处理 DNS 请求
- 与上游服务器通信
示例代码片段:
package main
import (
"flag"
"log"
"net"
)
func main() {
var listenAddr string
var upstreamAddr string
var testUpstream bool
flag.StringVar(&listenAddr, "l", "127.0.0.1:5353", "监听地址")
flag.StringVar(&upstreamAddr, "u", "8.8.8.8", "UDP 上游地址,支持自定义端口,必需支持 EDNS0")
flag.BoolVar(&testUpstream, "t", false, "快速测试上游是否支持 EDNS0")
flag.Parse()
// 启动 UDP 监听
udpAddr, err := net.ResolveUDPAddr("udp", listenAddr)
if err != nil {
log.Fatalf("解析监听地址失败: %v", err)
}
conn, err := net.ListenUDP("udp", udpAddr)
if err != nil {
log.Fatalf("启动 UDP 监听失败: %v", err)
}
log.Printf("开始监听 %s", listenAddr)
// 处理 DNS 请求
handleDNSRequests(conn, upstreamAddr, testUpstream)
}
3. 项目的配置文件介绍
项目没有显式的配置文件,配置通过命令行参数传递。以下是常用的命令行参数:
- -l: 监听地址,默认值为
127.0.0.1:5353
。 - -u: UDP 上游地址,支持自定义端口,必需支持 EDNS0,默认值为
8.8.8.8
。 - -t: 快速测试上游是否支持 EDNS0。
示例命令:
# 正常使用
udpme -l 127.0.0.1:5353 -u 8.8.8.8
# 测试服务器是否支持 EDNS0
udpme -u 8.8.8.8 -t
通过这些命令行参数,用户可以灵活配置项目的运行参数。