Golang net.InterfaceByIndex(), InterfaceByName(), Addrs() and MulticastAddrs() functions example

package net

Golang net.InterfaceByIndex(), InterfaceByName(), Addrs() and MulticastAddrs() functions usage example

 package main

 import (
 "fmt"
 "net"
 // "strings"
 )

 func main() {

 firstInterface, err := net.InterfaceByIndex(1)

 if err != nil {
 fmt.Println(err)
 }

 fmt.Println("First interface : ", firstInterface)

 byNameInterface, err := net.InterfaceByName("lo0")

 if err != nil {
 fmt.Println(err)
 }

 fmt.Println("Interface by Name : ", byNameInterface)

 addresses, err := byNameInterface.Addrs()

 // best to use for loop...but I'm lazy.
 fmt.Println("Interface Addresses : ", addresses[0].String())
 fmt.Println("Interface Addresses : ", addresses[1].String())
 fmt.Println("Interface Addresses : ", addresses[2].String())

 multicastaddresses, err := byNameInterface.MulticastAddrs()

 fmt.Println("Interface Multicast Addresses : ", multicastaddresses[0].String())
 fmt.Println("Interface Multicast Addresses : ", multicastaddresses[1].String())
 fmt.Println("Interface Multicast Addresses : ", multicastaddresses[2].String())

 // show all available network interfaces

 //interfaces, err := net.Interfaces()

 //if err != nil {
 // fmt.Print(err)
 // return
 // }
 //for _, i := range interfaces {

 // fmt.Printf("Name : %v \n", i.Name)

 // see http://golang.org/pkg/net/#Flags
 // fmt.Println("Interface type and supports : ", i.Flags.String())

 // if strings.Contains(i.Flags.String(), "up") {
 // fmt.Println("Status : UP")
 // } else {
 // fmt.Println("Status : DOWN")
 // }

 // if strings.Contains(i.Flags.String(), "multicast") {
 // fmt.Println("Support multicast : YES")
 // } else {
 // fmt.Println("Support multicast : NO")
 // }
 //}

 }

Sample output :

First interface : &{1 16384 lo0 up|loopback|multicast}

Interface by Name : &{1 16384 lo0 up|loopback|multicast}

Interface Addresses : ::1/128

Interface Addresses : 127.0.0.1/8

Interface Addresses : fe80::1/64

Interface Multicast Addresses : ff02::fb

Interface Multicast Addresses : 224.0.0.251

Interface Multicast Addresses : ff02::2:ff33:9cc0

References :

http://golang.org/pkg/net/#InterfaceByIndex

http://golang.org/pkg/net/#InterfaceByName

http://golang.org/pkg/net/#Interface.Addrs

http://golang.org/pkg/net/#Interface.MulticastAddrs

Advertisement