获取可用的网卡

hellsam · · 3900 次点击
``` 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,那么就是1*2^1 + 1*2^4 = 18 = 0x12 如果要判断网卡是否开启,因为这里面只有 FlagUp 是奇数,只要网卡开启就会加上这个奇数结果也为奇数,那么就可以通过 ``` if a[i].Flags % 2 != 0 { //网卡up } else { //网卡down } ``` 另一种判断是通过String() ``` if strings.Contains(a[i].Flags.String(), "up") { //网卡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