Golang Go语言中 nslook*自定义 DNS 服务器
除了修改 resolv.conf 还有什么办法能自定义 DNS 服务器
Golang Go语言中 nslook*自定义 DNS 服务器
$ 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
dnschef
让 socks 转发 dns 请求
server 114.114.114.114
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服务器。以下是一个简单的示例思路:
-
监听UDP和TCP端口53:DNS通常使用这两个端口,你需要创建一个服务器在这两个端口上监听。
-
解析DNS请求:使用
net/dns
包来解析接收到的DNS请求消息,提取查询类型、查询名等信息。 -
处理查询:根据查询内容,你可以实现自定义的逻辑来返回响应。这可能涉及查询一个数据库、调用其他API或返回固定的IP地址。
-
构造并发送DNS响应:使用
net/dns
包构造DNS响应消息,并将其发送回客户端。 -
错误处理:确保你的服务器能够优雅地处理错误,例如无效请求、网络问题等。
-
日志记录:对于调试和监控,记录所有DNS请求和响应是一个好习惯。
需要注意的是,net/dns
包在Go 1.16及更高版本中已经被标记为废弃(deprecated),推荐使用第三方库如miekg/dns
。这个库提供了更强大和灵活的DNS服务器和客户端实现。
实现一个完整的自定义DNS服务器需要深入理解DNS协议和Go语言的网络编程。如果你是初学者,建议从简单的例子开始,逐步增加功能。