如何发现网络设备类型?

时间:2017-11-17 16:41:22

标签: go

在任何给定的计算机(OSX,WIn,Lin等)上,有任意数量的连接网络适配器......无论是Wi-Fi,蓝牙,以太网还是其他......并且取决于路由可能有多个有源设备。

在我的NARROW用例中,我想知道当前的CONNECTED默认适配器类型(Wi-Fi等等)是什么,尽管一旦知道了其他一些内容以及一些细节。

Here是一个示例shell脚本,主要工作并将其转换为Go很容易......在我看来,必须有一个原生的GO方式。

2 个答案:

答案 0 :(得分:1)

在Linux上,你需要使用the RTNETLINK interface,似乎有 a number of packages 它在这个层周围实现了包装。

基本上,您发出RTM_GETLINK请求,然后查看该手册中每个接口的类型(ifi_type字段)。 可用的类型是here - 您需要的是802.2(以太网)和802.11(Wi-Fi)。

您也可以尝试首先使用“低技术”方法 net.Interfaces()然后通过尝试阅读来查询他们的课程 名为“/ sys / class / net / {iface_name} / type”的文件(如here所述)。该类型是上述ifi_type字段包含的内容。

请注意,这种方法有一些缺点:

  • 接口可能随时出现,所以之间存在固有的竞争 通过net.Interfaces()获取列表并查询每个界面 通过/sys虚拟文件系统。

  • 可能未在特定系统上安装/sys个文件系统。 对于典型的桌面或服务器系统来说,这是非常不寻常的 但对于某些“怪异”安装(例如嵌入式等)并没有那么多。

答案 1 :(得分:0)

您可以使用Interfaces()

中的net

样品:

package main

import (
    "fmt"
    "net"
)

func main() {
    l, err := net.Interfaces()
    if err != nil {
        panic(err)

    }
    for _, f := range l {
        if f.Flags&net.FlagUp > 0 {
            fmt.Printf("%s is up\n", f.Name)
        }
    }
}