如何确定活动网络接口媒体类型?

时间:2017-12-08 17:54:05

标签: windows go

我正在尝试以合理可靠的方式确定当前的活动/默认网络是wifi还是以太网。 Windows提供了一个命令netsh.exe interface ipv4 show interfaces这似乎是可靠的,除了我真的不喜欢在这种情况下向CLI进行shell。至少在Windows中事情是合理的。 OSX模拟的可靠性或准确性要差得多。使用net.Interface不可靠,因为FlagUp也不明确。我的下一个测试可能是检查FlagBooadcastthis

1 个答案:

答案 0 :(得分:0)

显然答案因操作系统而异。这个问题是针对OSX的。最大的挑战是,在没有桥接网络的个人计算机上有两个活动且可路由的设备是可能的,但不寻常。这更像是一个服务器功能...在我的情况下,我对ONE网络媒体设备感兴趣。这可能很复杂......

在OSX上有一个操作系统工具,它按优先级顺序转储设备类型及其附带的设备名称。

networksetup -listnetworkserviceorder

我必须捕获输出然后解析它以调用以下isactive函数。

func isactive(name string) bool {
    if iface, err := net.InterfaceByName(name); err!=nil {
        log.Printf("could not locate %s interface - %v", name, err)
    } else {
        if addrs, err := iface.Addrs(); err!=nil || len(addrs)==0 {
            log.Printf("could not locate %s addr - %v", name, err)
            return false
        }
        if iface.Flags & net.FlagBroadcast == net.FlagBroadcast && iface.Flags & net.FlagUp == net.FlagUp {
            //log.Printf("%s is active", name)
            return true
        }
    }
    return false
}

回想起来还有另外一件事需要注意...... iface.Addrs()可以返回多个IP地址。但在正常使用情况下再次不太可能。