Skip to content

Instantly share code, notes, and snippets.

@StevenKGER
Created April 1, 2018 00:12
Show Gist options
  • Save StevenKGER/dfa50ec82aaa0f38c9edc7e9ef803370 to your computer and use it in GitHub Desktop.
Save StevenKGER/dfa50ec82aaa0f38c9edc7e9ef803370 to your computer and use it in GitHub Desktop.
Go tool to get preferred network interface
package main
import (
"net"
"strings"
)
func main() {
preffered, list, err := GetPublicInterface()
if err != nil {
panic(err)
}
if len(preffered) == 0 {
println(list[0])
} else {
println(preffered)
}
}
func GetPublicInterface() (string, []string, error) {
interfaces, err := net.Interfaces()
if err != nil {
return "", nil, err
}
list := make([]string, 0)
for _, iface := range interfaces {
if iface.Flags&net.FlagUp != 0 && iface.Flags&net.FlagBroadcast != 0 && !isNetworkBridge(iface.Name) &&
!(iface.Flags&net.FlagLoopback != 0) && !isTapAdapter(iface.Name) && !isTunAdapter(iface.Name) {
list = append(list, iface.Name)
}
}
if len(list) == 0 {
return "", list, nil
}
for _, iface := range list {
if isPreferred(iface) {
return iface, list, nil
}
}
return "", list, nil
}
func isNetworkBridge(iface string) bool {
return strings.HasPrefix(iface, "vmbr")
}
func isTapAdapter(iface string) bool {
return strings.HasPrefix(iface, "tap")
}
func isTunAdapter(iface string) bool {
return strings.HasPrefix(iface, "tun")
}
func isPreferred(iface string) bool {
return strings.HasPrefix(iface, "eth") || strings.HasPrefix(iface, "ens")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment