最近有个需求,一个域名,需要根据不同的IP,返回不同的结果。而且还要提供管理借口。看了一下rfc,实现一个基本版,还是非常简单的。把域名的NS设置成自己的dns服务器,解析起来就太方便了。
DNS协议本身是基于UDP的应用层协议,一开始用了node.js处理,但是发现真处理byte buffer还是不大顺手,最后还是转回到java来解决的。
有一个需要注意的地方是,dns数据段,用了[length][data]这种格式。而且每个「.」都是一段。需要注意。
另外,配合Wireshark,分析起来会方便很多。
host.txt内容:
127.0.0.1 7.7.7.4
106.186.124.201 8.8.8.8
101.231.192.210 162.243.157.169
这样我们可以通过:
http://server:port/[dump/set/save]
来管理dns服务器,并且服务器还能每隔10分钟,自动save一次。
代码同步在Github上,以后如有更新,以Github为准: https://github.com/100apps/DNSd