Heim >Backend-Entwicklung >Golang >Wie kann ich DNS-Suchen in Go mit einem benutzerdefinierten DNS-Server durchführen?

Wie kann ich DNS-Suchen in Go mit einem benutzerdefinierten DNS-Server durchführen?

DDD
DDDOriginal
2024-11-30 19:16:10330Durchsuche

How Can I Perform DNS Lookups in Go with a Custom DNS Server?

Suchfunktionen in Go

Viele netzwerkbezogene Vorgänge basieren auf DNS-Suchvorgängen, um Hostnamen in IP-Adressen und andere Informationen aufzulösen. Golang bietet im Netzpaket eine Reihe praktischer Funktionen zum Durchführen von DNS-Suchen, einschließlich LookupAddr und LookupTXT, die die entsprechenden IP-Adressen oder Texteinträge für einen bestimmten Hostnamen zurückgeben.

Eine Einschränkung dieser Funktionen besteht darin, dass sie normalerweise Verlassen Sie sich auf die Resolver des Systems, die in /etc/resolv.conf konfiguriert sind. Während dies in den meisten Fällen ausreicht, kann es vorkommen, dass Sie einen bestimmten DNS-Server angeben müssen, um die Suche durchzuführen.

Suchfunktionen mit benutzerdefiniertem DNS-Server

Leider die Standard-Go-Bibliothek bietet derzeit keine Funktionen wie LookupAddrWithServer oder LookupTXTWithServer an, mit denen Sie einen benutzerdefinierten DNS-Server angeben können. Es gibt jedoch mehrere Bibliotheken von Drittanbietern, die diese Funktionalität bereitstellen, einschließlich der beliebten Bibliothek github.com/miekg/dns.

Das folgende modifizierte Beispiel aus der Antwort von @holys zeigt, wie Sie die Bibliothek miekg/ verwenden können. DNS-Bibliothek zum Durchführen von DNS-Suchen mit einem angegebenen Server:

package main

import (
    "fmt"
    "log"

    "github.com/miekg/dns"
)

func main() {
    target := "example.com"
    server := "8.8.8.8"

    c := dns.Client{}
    m := dns.Msg{}
    m.SetQuestion(target, dns.TypeA)
    r, t, err := c.Exchange(&m, server+":53")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Took %v", t)
    if len(r.Answer) == 0 {
        log.Fatal("No results")
    }
    for _, ans := range r.Answer {
        arecord := ans.(*dns.A)
        fmt.Printf("%s", arecord.A)
    }
}

In diesem Beispiel wird die Bibliothek github.com/miekg/dns verwendet, um einen A-Eintrag durchzuführen Suchen Sie nach example.com mit dem angegebenen DNS-Server unter 8.8.8.8. Durch die Nutzung von Bibliotheken von Drittanbietern wie miekg/dns können Sie die von der Go-Standardbibliothek bereitgestellte Funktionalität erweitern, um Ihren spezifischen Anforderungen gerecht zu werden.

Das obige ist der detaillierte Inhalt vonWie kann ich DNS-Suchen in Go mit einem benutzerdefinierten DNS-Server durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn