Maison >développement back-end >Golang >Comment puis-je effectuer des recherches DNS dans Go avec un serveur DNS personnalisé ?

Comment puis-je effectuer des recherches DNS dans Go avec un serveur DNS personnalisé ?

DDD
DDDoriginal
2024-11-30 19:16:10229parcourir

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

Fonctions de recherche dans Go

De nombreuses opérations liées au réseau s'appuient sur des recherches DNS pour résoudre les noms d'hôtes en adresses IP et autres informations. Golang fournit un ensemble de fonctions pratiques dans le package net pour effectuer des recherches DNS, notamment LookupAddr et LookupTXT, qui renvoient les adresses IP ou les enregistrements de texte correspondants pour un nom d'hôte donné.

Une limitation de ces fonctions est qu'elles sont généralement s'appuyer sur les résolveurs du système configurés dans /etc/resolv.conf. Bien que cela soit suffisant dans la plupart des cas, il peut y avoir des cas où vous devrez spécifier un serveur DNS spécifique pour effectuer la recherche.

Fonctions de recherche avec un serveur DNS personnalisé

Malheureusement, la bibliothèque Go standard n'offre actuellement pas de fonctions telles que LookupAddrWithServer ou LookupTXTWithServer qui vous permettent de spécifier un serveur DNS personnalisé. Cependant, il existe plusieurs bibliothèques tierces qui fournissent cette fonctionnalité, y compris la populaire github.com/miekg/dns.

L'exemple modifié suivant tiré de la réponse donnée par @holys montre comment vous pouvez utiliser le miekg/ Bibliothèque DNS pour effectuer des recherches DNS avec un serveur spécifié :

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)
    }
}

Cet exemple utilise la bibliothèque github.com/miekg/dns pour effectuer une recherche d'enregistrement A. par exemple.com en utilisant le serveur DNS spécifié à l'adresse 8.8.8.8. En tirant parti de bibliothèques tierces telles que miekg/dns, vous pouvez étendre les fonctionnalités fournies par la bibliothèque standard Go pour répondre à vos besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn