golang 网络模块(LookupSRV)

标签 go

我是 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/

相关文章:

excel - golang将excel表格转换为结构

go - 将数据库连接存储在全局变量中

go - 如何获取go语言函数的注解?

go - 将字节数组转换为十六进制格式

sql - 为什么 OS X 会终止在终端中立即执行的进程?

amazon-web-services - Go Lambda 的 AWS ALB 始终返回 "502 Bad Gateway"

http - 如何在 golang 中获取重定向 url 而不是页面内容?

go - 防止beego中的SQL注入(inject)

go - 如何在 Go 中为使用 'multipart' 提交的表单设置内容类型

go - 从 Reader 读取并写入 Golang 中的 Writer 时是否需要检查非零长度?