ドーモ。えりくべです。
現在私はメルカリさんが主催している「Step up Go for Students - ゼロから海外カンファレンスを目指そう」という、Goでソフトウェアをつくって、それをコードレビューしてもらえるというすごいものに参加しています。
mercari.connpass.com
(第2回からでも参加できるようなのでご興味がある方は是非)
そのソフトウェアを作る際に、IPアドレスを求める必要があったので、実際に書いてみました。
コメントアウトから適宜読み取っていただけると幸いです。
// IPv4アドレスを求めるプログラム package main import ( "fmt" "net" ) func main() { // すべてのアドレスを取得 addrs, err := net.InterfaceAddrs() if err != nil { fmt.Println("cannot get address.") return } // 表示 for i, addrs := range addrs { fmt.Printf("%d:%s\n", i+1, addrs.String()) } fmt.Println() fmt.Println("----------------------------") fmt.Println() var ipv4 net.IP // IPv4アドレスを取得 for _, a := range addrs { ipnet, ok := a.(*net.IPNet) // ipnetが真で、ループバックアドレスを除外 if ok && !ipnet.IP.IsLoopback() { //IPv4に変換できるとき if ipnet.IP.To4() != nil { fmt.Printf("IPv4 address:%s\n", ipnet.IP.String()) ipv4 = ipnet.IP } } } // ipv4からサブネットマスク値を求める mask := ipv4.DefaultMask() fmt.Println("subnet mask:", mask) //maskを使って、ipv4をマスクして、ネットワークアドレスに変える netIPv4 := ipv4.Mask(mask) fmt.Println("network address:", netIPv4) }
実行結果
1:127.0.0.1/8 2:::1/128 3:fe80::1/64 4:fe80::1888:1970:c3cc:850d/64 5:192.168.11.4/24 6:fe80::1c14:a1ff:fe53:5fe/64 7:fe80::bf48:51ad:da48:d2cc/64 ---------------------------- IPv4 address:192.168.11.4 subnet mask: ffffff00 network address: 192.168.11.0