【问题标题】:golang net module(LookupSRV)golang 网络模块(LookupSRV)
【发布时间】:2016-12-13 20:50:05
【问题描述】:

我对 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 由我奇妙的错误消息处理)

我知道这是一个菜鸟问题,就像我说的那样,我对 golang 很陌生。如果你们能给我任何建议,我将不胜感激。

这里是应用程序的完整源代码:http://dpaste.com/3X24ZYR

谢谢。

【问题讨论】:

    标签: go


    【解决方案1】:

    您不能使用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)
    }
    

    【讨论】:

    • 谢谢。我试图将它添加到我的应用程序中,但我不断收到这样的错误:go run digall.go google.com # command-line-arguments ./digall.go:54: undefined: err ./digall.go:58 :未定义:cname ./digall.go:60:未定义:地址./digall.go:61:未定义:地址./digall.go:62:未定义:地址./digall.go:63:未定义:地址./ digall.go:64: undefined:addresses ./digall.go:91: cannot use query[1] (type byte) as type string in argument to srvRecord 未更改的版本在这里:dpaste.com/3X24ZYR
    • 请注意我已经在循环内声明了cnameaddrserr,因此如果您尝试在循环范围之外打印它们的内容,它们将不可用.
    • 很抱歉回复晚了。我想我已经想通了。谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多