获取可用的网卡

hellsam · 2017-12-20 15:52:09 · 4090 次点击
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
)

这个定义只是针对网卡的一个属性,属性标识,但是每个网卡是由很多属性的,比如一般都有multicast + broadcast,那么就是12^1 + 12^4 = 18 = 0x12

如果要判断网卡是否开启,因为这里面只有 FlagUp 是奇数,只要网卡开启就会加上这个奇数结果也为奇数,那么就可以通过

if a[i].Flags % 2 != 0 {
  //网卡up
} else {
  //网卡down
}

另一种判断是通过String() ` if strings.Contains(a[i].Flags.String(), &#34;up&#34;) { //网卡up } else { //网卡down }

#1
更多评论
interfaces, err := net.Interfaces()
    if err != nil {
        log.Info("Can not get local interface info:%s", err)
        os.Exit(-1)
    }
    for _, inter := range interfaces {
        flags := inter.Flags.String()
        if strings.Contains(flags, "up") && strings.Contains(flags, "broadcast") {
            mac_address = append(mac_address, inter.HardwareAddr.String())
        }
    }

mac_address 应该可以拿到有效的网卡地址 一般来说,对于服务器而言,只会有一个网卡处于 up 且 broadcast 状态。

#2