golangで名前解決(DNS)まわりをする
golangで名前解決周りをするにあたって
go version : 1.8
os : kubuntu 16
やったこと
- 名前解決
- Lookup
名前解決
golangで名前解決する方法として、netパッケージ内のメソッドを使うことで、一発でできる
メソッド
net.ResolveIPAddr(net, addr string) (*IPAddr, error)
返り値としてIPAddrのポインターを返す。IPAddrはnetパッケージではたびたび出てくるようなので内容も確認しときましょう。
IPAddr struct
type IPAddr struct { IP IP Zone string }
IPAddr struct自体は簡単な構造体です。ちなみにZoneはIPv6でのアドレスのスコープのようです。(詳しい内容は後日)
ResolveIPAddrメソッドはプライマリーなDNSサーバで名前解決を行います。 引数のnetにはネットワークのタイプをいれます。選べるものは
ip, ip4, ip6
ほかにもプロトコルも選べるようだが、、また次回にでも
ではResolveIPAddrのサンプルです。
exsample
func main() { addr, err := net.ResolveIPAddr("ip", "www.google.com") if err != nil { fmt.Println("Resolve error ", error.Error()) os.Exit(1) } fmt.Println("Resovle addr is ", addr.String()) }
Lookup
DNSでのLookupを実現することができるメソッド。ResolveIPAddrでは一つのIPアドレスしか取得できなかったが、これだとDNSのlookupと同じ動きをする(はず)ので複数のIPアドレスも取得することができる(かもしれない)
net.LookupHost(name string) (addrs []string, err error)
引数のドメインで名前解決した結果の複数のアドレスを返す。エラーが発生した場合はエラーを返す。
exsample
func main() { addrs, err := net.LookupHost("amazon.com") if err != nil { fmt.Println("Resolution error ", err.Error()) os.Exit(1) } for _, s := range addrs { fmt.Println(s) } }
簡単ではあったんですけど、DNSの名前解決をgolangで軽く実装。
次はTCPのsocket周りでもしようかな