我是 golang 的新手,我对 python 有一些经验,但据说还没有达到这个水平。我正在创建一个名为“digall”的应用程序,使用户在检查域名时可以轻松查看事件的 dns 记录。
在我使用的应用程序中,LookupSRV
,我似乎遇到了一些问题:
func srvRecord(query string) {
service := "sipfederationtls"
protocol:= "tcp"
fmt.Printf("\n[+] SRV Record(s)\n")
//srvMap := ["sipfederationtls", "autodiscover", "VLMCS"]
cname, addresses, err := net.LookupSRV(service, protocol, query)
if err != nil {
fmt.Printf("[!] This feature is currently under development, thus not ready yet.\n")
}
fmt.Printf("cname : %s \n", cname)
for i := 0; i < len(addresses); i++ {
fmt.Printf("addrs[%d].Target : %s \n", i, addresses[i].Target)
fmt.Printf("addrs[%d].Port : %d \n", i, addresses[i].Port)
fmt.Printf("addrs[%d].Priority : %d \n", i, addresses[i].Priority)
fmt.Printf("addrs[%d].Weight : %d \n", i, addresses[i].Weight)
}
}
如您所见,变量“service”用作 SRV 记录的前缀。我唯一的问题是我想检查此记录的多个前缀,即“sipfederationtls”、“autodiscover”和“VLMCS”。
我要问的是;我如何使这个函数快速通过这些前缀并返回有效的? (那些出错的将由 err by my fantastic error message 处理)
我知道这是一个菜鸟问题,就像我说的,我对 golang 很陌生。如果你们能给我任何提示,我将不胜感激。
这是应用程序的完整源代码:http://dpaste.com/3X24ZYR
谢谢。
最佳答案
您不能使用LookupSRV
方法一次查询多个服务,因为您不能使用dig
一次查询多个服务。
您最好创建服务名称的一部分:
services := [...]string{"service1", "service2", "service3")
然后遍历它并为每个服务调用 LookupSRV
:
for _, service := range services {
cname , addrs, err := net.LookupSRV(service, "tcp", "your.domain.name")
// error handlling
}
此外,在遍历查找结果时,最好使用 range
关键字:
for _, record := range addrs {
fmt.Printf("Target: %s:%d\n", record.Target, record.Port)
}
关于golang 网络模块(LookupSRV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41130307/