Извлечение серверов имен из домена с помощью DNSutil | тип dns.RR не имеет поля или метода Hdr - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь извлечь серверы имен из записи DNS, используя GoLang. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу прочитать поля из структуры.

Я превращаю Response в JSON, чтобы я мог «прочитать», какие поля у него есть, для этого я использую следующий код:

json, _ := json.Marshal(ns)
fmt.Println(string(json))

Это распечатывает:

{"Hdr":{"Name":"example.com.","Rrtype":2,"Class":1,"Ttl":172800,"Rdlength":16},"Ns":"ns2.example.eu."}

Теперь, когда я пытаюсь прочитать, напечатайте значение Name из этой строки, используя:

fmt.Println(ns.Hdr.Name)

Я получаю следующую ошибку:

./main.go:19:18: ns.Hdr undefined (type dns.RR has no field or method Hdr)

Может ли кто-нибудь помочь мне извлечь Имя (example.com.) Из Ns (Struct?).

package main

import (
    "encoding/json"
    "fmt"

    "github.com/lixiangzhong/dnsutil"
)

func main() {
    var dig dnsutil.Dig
    dig.SetDNS("8.8.4.4")

    res, _ := dig.Trace("example.com.")
    for _, nameservers := range res {
        for _, ns := range nameservers.Msg.Ns {
            json, _ := json.Marshal(ns)
            fmt.Println(string(json))
            fmt.Println(ns.Hdr.Name)
        }
    }
}

Я ожидал, что это распечатает "example.com". но вместо этого я получаю ошибку.

Спасибо!

1 Ответ

0 голосов
/ 14 января 2019

чтобы избежать ошибки компиляции, измените Hdr на Header ()

package main

import (
    "encoding/json"
    "fmt"

    "github.com/lixiangzhong/dnsutil"
)

func main() {
    var dig dnsutil.Dig
    dig.SetDNS("8.8.4.4")

    res, _ := dig.Trace("example.com.")
    for _, nameservers := range res {
        for _, ns := range nameservers.Msg.Ns {
            json, _ := json.Marshal(ns)
            fmt.Println(string(json))
            fmt.Println(ns.Header().Name)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...