解析类型域名。断续器

我是Go的新手,并试图让一个小型DNS程序工作,解析返回的A和CNAME记录。这是在使用 github.com/miekg/dns 包。


我无法理解如何正确解析 A 或 CNAME 的返回资源记录。对于 A 记录,我想获取 IP 地址并将其存储在变量中。对于返回了多个 RR 的 CNAME,我想解析“名称”和“地址”字段并存储在变量中。


我尝试过将结构转换为字符串或将其解压缩,但无济于事。任何人都可以提供任何见解,非常感谢。


下面是下面的代码。文本文件包含一行带有“www”:


package main


import (

    "bufio"

    "fmt"

    "log"

    "os"

    "github.com/miekg/dns"

)


func dns_request_fwd(s string) []dns.RR {

    //fmt.Println(s, " : started processing DNS request")


    m1 := new(dns.Msg)

    m1.Id = dns.Id()

    m1.RecursionDesired = true

    m1.Question = make([]dns.Question, 1)

    m1.Question[0] = dns.Question{s, dns.TypeA, dns.ClassINET}

    in, err := dns.Exchange(m1, "8.8.8.8:53")


    if err != nil {

        log.Fatal(err)

    }


    if len(in.Answer) > 0 {

        //fmt.Println("Response greater than 0 - got something!")

        //fmt.Println(in.Answer)

    } else {

        //fmt.Println("Empty DNS Response")

        return nil

    }


    if _, ok := in.Answer[0].(*dns.A); ok {


        //fmt.Println("Detected an 'A' record Answer.  Returning RR!")

        return in.Answer


    } else if _, ok := in.Answer[0].(*dns.CNAME); ok {

        //fmt.Println("Detected a 'CNAME' record Answer.  Returning RR!")

        return in.Answer


    } else {

        fmt.Println("Returning nil")

        return nil


    }


}


func main() {


    f, err := os.Open("list4.txt")


    if err != nil {

        log.Fatal(err)

    }


    defer f.Close()


    domain := "acme.com"

    domain_lookup := "." + domain + "." 


    scanner := bufio.NewScanner(f)


    for scanner.Scan() {


    a_record := scanner.Text()


    lookup := a_record+domain_lookup

    fmt.Println("Looking up: ", lookup)

    dreq := dns_request_fwd(lookup)


GCT1015
浏览 87回答 1
1回答

哈士奇WWW

您不需要“解析”结构。该库已经解析了响应,以便为您提供结构。只需使用结构中包含所需数据的字段,如 dns。A.A,这是一张网。IP 或域名。别名。目标是字符串。有关更多详细信息,请参阅包文档。if arec, ok := dreq[0].(*dns.A); ok {    fmt.Println("    [+] Type is A")    fmt.Println("    [+] Answer: ", arec.A)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go