ネットワーク関連の操作の多くは、ホスト名を IP アドレスやその他の情報に解決するために DNS ルックアップに依存しています。 Golang は、指定されたホスト名に対応する IP アドレスまたはテキスト レコードを返す LookupAddr や LookupTXT など、DNS ルックアップを実行するための一連の便利な関数を net パッケージで提供します。
これらの関数の制限の 1 つは、通常、 /etc/resolv.conf で設定されたシステムのリゾルバーに依存します。ほとんどの場合これで十分ですが、検索を実行するために特定の 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 サイトの他の関連記事を参照してください。