ホームページ >バックエンド開発 >Golang >カスタム DNS サーバーを使用して Go で DNS ルックアップを実行するにはどうすればよいですか?

カスタム DNS サーバーを使用して Go で DNS ルックアップを実行するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-30 19:16:10228ブラウズ

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

Go の検索関数

ネットワーク関連の操作の多くは、ホスト名を IP アドレスやその他の情報に解決するために DNS ルックアップに依存しています。 Golang は、指定されたホスト名に対応する IP アドレスまたはテキスト レコードを返す LookupAddr や LookupTXT など、DNS ルックアップを実行するための一連の便利な関数を net パッケージで提供します。

これらの関数の制限の 1 つは、通常、 /etc/resolv.conf で設定されたシステムのリゾルバーに依存します。ほとんどの場合これで十分ですが、検索を実行するために特定の DNS サーバーを指定する必要がある場合もあります。

カスタム DNS サーバーを使用した検索関数

残念ながら、標準の Go ライブラリは現在、カスタム DNS サーバーを指定できる LookupAddrWithServer や LookupTXTWithServer などの関数は提供されていません。ただし、人気のある github.com/miekg/dns など、この機能を提供するサードパーティ ライブラリがいくつかあります。

@holys によって提供された回答を変更した次の例は、miekg/ の使用方法を示しています。 dns ライブラリを使用して、指定したサーバーで DNS ルックアップを実行します:

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

この例では、github.com/miekg/dns ライブラリを使用して、 8.8.8.8 にある指定された DNS サーバーを使用して、example.com の A レコード ルックアップを実行します。 miekg/dns などのサードパーティ ライブラリを活用することで、Go 標準ライブラリによって提供される機能を拡張して、特定の要件を満たすことができます。

以上がカスタム DNS サーバーを使用して Go で DNS ルックアップを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。