README
¶
doq-go
目录
功能特性
- ✅ 完全符合 RFC9250 规范
- ✅ 高性能 QUIC 传输
- ✅ 支持 TLS 1.3 加密
- ✅ 简洁易用的 API
- ✅ 支持上下文取消
- ✅ 完整的错误处理
- ✅ 支持自定义 DNS 服务器
安装
使用 go get 添加依赖:
go get github.com/masx200/doq-go
快速开始
package main
import (
"context"
"fmt"
"log"
"github.com/masx200/doq-go/doq"
"github.com/miekg/dns"
)
func main() {
// 创建使用默认设置的客户端,通过 AdGuard DoQ 服务器解析
client := doq.NewClient("dns.adguard-dns.com:853")
// 准备查询负载
q := dns.Msg{}
q.SetQuestion("www.google.com.", dns.TypeA)
// 发送 DNS 查询
r, err := client.Send(context.Background(), &q)
if err != nil {
log.Fatal(err)
}
// 处理响应
fmt.Println("响应代码:", dns.RcodeToString[r.Rcode])
for _, ans := range r.Answer {
fmt.Println(ans.String())
}
}
示例
基本查询
// 创建客户端
client := doq.NewClient("dns.adguard-dns.com:853")
// 查询 A 记录
q := dns.Msg{}
q.SetQuestion("example.com.", dns.TypeA)
// 发送查询
r, err := client.Send(context.Background(), &q)
if err != nil {
panic(err)
}
// 处理响应
fmt.Println(dns.RcodeToString[r.Rcode])
使用自定义选项
// 使用自定义选项创建客户端
client := doq.NewClient("dns.quad9.net:853",
doq.WithTimeout(5*time.Second),
doq.WithTLSConfig(&tls.Config{
ServerName: "dns.quad9.net",
}),
)
// 查询 AAAA 记录
q := dns.Msg{}
q.SetQuestion("ipv6.google.com.", dns.TypeAAAA)
// 使用超时上下文
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
r, err := client.Send(ctx, &q)
if err != nil {
panic(err)
}
并发查询
client := doq.NewClient("dns.adguard-dns.com:853")
domains := []string{"google.com", "github.com", "stackoverflow.com"}
var wg sync.WaitGroup
for _, domain := range domains {
wg.Add(1)
go func(d string) {
defer wg.Done()
q := dns.Msg{}
q.SetQuestion(d+".", dns.TypeA)
r, err := client.Send(context.Background(), &q)
if err != nil {
fmt.Printf("查询 %s 失败: %v\n", d, err)
return
}
fmt.Printf("%s: %s\n", d, dns.RcodeToString[r.Rcode])
}(domain)
}
wg.Wait()
配置选项
doq-go 提供了多种配置选项来自定义客户端行为:
client := doq.NewClient("dns.example.com:853",
doq.WithTimeout(10*time.Second), // 设置超时时间
doq.WithTLSConfig(customTLSConfig), // 自定义 TLS 配置
// 更多选项...
)
更新日志
v0.55.0
- 🚀 升级: 升级
github.com/quic-go/quic-go到 v0.55.0 - 🐛 修复: 修复了因 quic-go 升级导致的类型错误
- ⚠️ 重大变更: 适配了 quic-go 的 breaking changes
- 🔧 改进: 优化了错误处理和连接管理
早期版本
- 初始版本发布
- 实现基本的 DoQ 客户端功能
- 添加 TLS 支持和上下文取消
贡献
欢迎贡献代码!请遵循以下步骤:
- Fork 本仓库
- 创建您的特性分支 (
git checkout -b feature/AmazingFeature) - 提交您的更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开一个 Pull Request
许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
致谢
如果这个项目对您有帮助,请给一个 ⭐️
Click to show internal directories.
Click to hide internal directories.