Golang Go语言中 nslook*自定义 DNS 服务器

发布于 1周前 作者 caililin 来自 Go语言

除了修改 resolv.conf 还有什么办法能自定义 DNS 服务器


Golang Go语言中 nslook*自定义 DNS 服务器
8 回复

$ nslookup www.google.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: www.google.com
Address: 172.217.15.68
Name: www.google.com
Address: 2607:f8b0:4004:805::2004

更多关于Golang Go语言中 nslook*自定义 DNS 服务器的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


让 socks 转发 dns 请求

server 114.114.114.114

nslookup 第二个参数就是自定义服务器地址。。。。

5 楼说的对,其实也可以用 dig
dig www.baidu.com .0.0.1 -p 53

$ nslookup
> google.cn
Server: 8.8.8.8
Address: 8.8.8.8#53

Non-authoritative answer:
Name: google.cn
Address: 203.208.43.111
Name: google.cn
Address: 203.208.43.127
Name: google.cn
Address: 203.208.43.119
Name: google.cn
Address: 203.208.43.120
> server 114.114.114.114
Default server: 114.114.114.114
Address: 114.114.114.114#53
> google.cn
Server: 114.114.114.114
Address: 114.114.114.114#53

Non-authoritative answer:
Name: google.cn
Address: 203.208.48.88
Name: google.cn
Address: 203.208.48.79
Name: google.cn
Address: 203.208.48.87
Name: google.cn
Address: 203.208.48.95

在Go语言中,实现一个自定义的DNS服务器,你可以使用标准库中的net包,特别是net/dns子包。虽然net/dns包主要用于解析DNS消息,但你可以结合其他网络编程技巧来搭建一个完整的DNS服务器。以下是一个简单的示例思路:

  1. 监听UDP和TCP端口53:DNS通常使用这两个端口,你需要创建一个服务器在这两个端口上监听。

  2. 解析DNS请求:使用net/dns包来解析接收到的DNS请求消息,提取查询类型、查询名等信息。

  3. 处理查询:根据查询内容,你可以实现自定义的逻辑来返回响应。这可能涉及查询一个数据库、调用其他API或返回固定的IP地址。

  4. 构造并发送DNS响应:使用net/dns包构造DNS响应消息,并将其发送回客户端。

  5. 错误处理:确保你的服务器能够优雅地处理错误,例如无效请求、网络问题等。

  6. 日志记录:对于调试和监控,记录所有DNS请求和响应是一个好习惯。

需要注意的是,net/dns包在Go 1.16及更高版本中已经被标记为废弃(deprecated),推荐使用第三方库如miekg/dns。这个库提供了更强大和灵活的DNS服务器和客户端实现。

实现一个完整的自定义DNS服务器需要深入理解DNS协议和Go语言的网络编程。如果你是初学者,建议从简单的例子开始,逐步增加功能。

回到顶部