gpt4 book ai didi

linux - 以编程方式进行 DNS SRV 绑定(bind)

转载 作者:IT王子 更新时间:2023-10-29 01:25:57 25 4
gpt4 key购买 nike

谁知道如何在 Go 中本地设置 SRV 记录?

这是为了测试目的。例如,我想在测试期间将 test.com 绑定(bind)到 localhost。目前,我必须编辑主机 /etc/bind/test.com.hosts

test.com.   IN  SOA bindhostname. admin.test.com. (
1452607488
10800
3600
604800
38400 )
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 main

import (
"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, Class: dns.ClassINET, 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 {
}
}

您可以检查此绑定(bind)服务器是否为挖掘提供正确答案

dig @"127.0.0.1"  _etcd-client._tcp. SRV

我假设您使用的是 IPv4 地址(它只增加了大约十行,但我希望代码简洁而不处理 IPv6)。

您可以更改我作为常量使用的 DOM 和 SRV 模式。

您可以将其集成为库,在您进行测试时启动 dns 服务器。我正在使用您需要成为 root 用户的端口 53。您可以将其更改为其他内容。当测试运行时,您可以从一些不同的端口获取它。

关于linux - 以编程方式进行 DNS SRV 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37402459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com