22. golang 列出网络接口

在golang中如何列出主机上的所有网络接口,一个方法是使用net包

package main

import (
        "fmt"
        "net"
)

func main() {
        ifaces, err := net.Interfaces()
        if err != nil {
                fmt.Print(fmt.Errorf("localAddresses: %+v\n", err.Error()))
                return
        }
        for _, iface := range ifaces {
                fmt.Printf("interfaces is : %v\n", iface)
        }
}
interfaces is : {1 65536 lo  up|loopback}
interfaces is : {2 1500 eno1 cc:64:a6:5c:d0:d3 up|broadcast|multicast}
interfaces is : {3 1500 eno2 cc:64:a6:5c:d0:d4 up|broadcast|multicast}
interfaces is : {4 1500 eno3 cc:64:a6:5c:d0:d5 up|broadcast|multicast}
interfaces is : {5 1500 eno4 cc:64:a6:5c:d0:d6 up|broadcast|multicast}
interfaces is : {6 1500 ens3f0 28:41:c6:aa:53:34 up|broadcast|multicast}
interfaces is : {7 1500 ens3f1 28:41:c6:aa:53:35 up|broadcast|multicast}
interfaces is : {8 1500 docker0 02:42:34:eb:e9:e1 up|broadcast|multicast}
interfaces is : {14 1500 vethf0cc960 d2:24:7c:67:95:d2 up|broadcast|multicast}
interfaces is : {20 1500 veth17de1fd 0a:8f:dc:9e:fc:3b up|broadcast|multicast}
interfaces is : {44 1500 vetha43a667 72:ce:b7:51:25:50 up|broadcast|multicast}

或者使用netlink包

package main

import (
        "fmt"
        "github.com/vishvananda/netlink"
)

func main() {
        enos, err := netlink.LinkList()
        if err != nil {
                fmt.Println("get link list error")
                fmt.Println(err)
                return
        }
        for _, eno := range enos {
                attr := eno.Attrs()
                fmt.Println("interface is ", eno.Type(), attr.Index, attr.MTU, attr.Name, attr.HardwareAddr, attr.HardwareAddr)
        }
}