Golang : How to detect a server/machine network interface capabilities?




Problem :

You want to know which network interfaces on a server that support Broadcast, Loopback, PointToPoint or Multicast networking capabilities. How to do that in Golang?

Solution :

Use the net.Interfaces() function to retrieve all the available network interfaces on the server, then check each interfaces' Flags.

For example :

 package main

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

 func main() {

 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 :

Name : lo0

Interface type and supports : up|loopback|multicast

Status : UP

Support multicast : YES

Name : gif0

Interface type and supports : pointtopoint|multicast

Status : DOWN

Support multicast : YES

Name : stf0

Interface type and supports : 0

Status : DOWN

Support multicast : NO

Name : en1

Interface type and supports : up|broadcast|multicast

Status : UP

Support multicast : YES

See Also : https://www.socketloop.com/references/golang-net-ip-isloopback-ismulticast-and-isunspecified-functions-example

References :

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

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

 const (
 FlagUp Flags = 1 << iota // interface is up
 FlagBroadcast // interface supports broadcast access capability
 FlagLoopback // interface is a loopback interface
 FlagPointToPoint // interface belongs to a point-to-point link
 FlagMulticast // interface supports multicast access capability
 )

https://www.socketloop.com/references/golang-net-flags-type-and-flags-string-function-example





By Adam Ng

IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.


Advertisement