linux – 以编程方式转到DNS SRV绑定

linux – 以编程方式转到DNS SRV绑定,第1张

概述有人知道如何在Go中本地设置SRV记录吗? 它用于测试目的.例如,我想在测试期间将test.com绑定到localhost.目前,我必须编辑主机/etc/bind/test.com.hosts test.com. IN SOA bindhostname. admin.test.com. (145260748810800360060480038400 )test.com. IN 有人知道如何在Go中本地设置SRV记录吗?

它用于测试目的.例如,我想在测试期间将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绑定所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1018237.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存