它用于测试目的.例如,我想在测试期间将test.com绑定到localhost.目前,我必须编辑主机/etc/bind/test.com.hosts
test.com. IN SOA bindhostname. admin.test.com. (145260748810800360060480038400 )test.com. IN NS bindhostname.my1.test.com. 300 IN A 127.0.0.1_etcd-clIEnt._tcp 300 IN SRV 0 0 5000 my1.test.com.
我看了https://github.com/miekg/dns,但无法弄清楚从哪里开始.有人可以帮忙吗?
谢谢!
解决方法 首先,您需要将本地IP添加到/etc/resolv.conf然后你可以使用以下代码:
package mainimport ( "log" "net" "github.com/mIEkg/dns")const ( DOM = "test.com." srvDom = "_etcd-clIEnt._tcp.")func handleSRV(w dns.ResponseWriter,r *dns.Msg) { var a net.IP m := new(dns.Msg) m.SetReply(r) if ip,ok := w.RemoteAddr().(*net.UDPAddr); ok { a = ip.IP } if ip,ok := w.RemoteAddr().(*net.TCPAddr); ok { a = ip.IP } // Add in case you are using IPv6 alongwith AAAA /*if a.To4() !=nil { a = a.To4() } */ // Checking which type of query has come switch r.Question[0].Qtype { default: fallthrough case dns.TypeA: rr := new(dns.A) rr.Hdr = dns.RR_header{name: DOM,Rrtype: dns.TypeA,Class: dns.ClassINET,Ttl: 0} rr.A = a.To4() m.Answer = append(m.Answer,rr) case dns.TypeSRV: rr := new(dns.SRV) rr.Hdr = dns.RR_header{name: srvDom,Rrtype: dns.TypeSRV,Ttl: 0} rr.Priority = 0 rr.Weight = 0 rr.Port = 5000 rr.Target = DOM m.Answer = append(m.Answer,rr) } w.WriteMsg(m)}func serve(net string) { server := &dns.Server{Addr: ":53",Net: net,TsigSecret: nil} err := server.ListenAndServe() if err != nil { log.Fatal("Server can't be started") }}func main() { dns.HandleFunc(DOM,handleSRV) dns.HandleFunc(srvDom,handleSRV) go serve("tcp") go serve("udp") for { }}
您可以检查此绑定服务器是否为dig提供了正确答案
dig @"127.0.0.1" _etcd-clIEnt._tcp. SRV
我假设您正在使用IPv4地址(它只增加了大约十行,但我希望代码在没有处理IPv6的情况下简洁).
您可以更改我作为const使用的DOM和SRV模式.
您可以将其集成为在进行测试时启动DNS服务器的库.我正在使用端口53,您需要成为root用户.您可以将其更改为其他内容.当测试运行时,您可以从一些不同的端口获取它.
总结以上是内存溢出为你收集整理的linux – 以编程方式转到DNS SRV绑定全部内容,希望文章能够帮你解决linux – 以编程方式转到DNS SRV绑定所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)