在任何给定的计算机(OSX,WIn,Lin等)上,有任意数量的连接网络适配器......无论是Wi-Fi,蓝牙,以太网还是其他......并且取决于路由可能有多个有源设备。
在我的NARROW用例中,我想知道当前的CONNECTED默认适配器类型(Wi-Fi等等)是什么,尽管一旦知道了其他一些内容以及一些细节。
Here是一个示例shell脚本,主要工作并将其转换为Go很容易......在我看来,必须有一个原生的GO方式。
答案 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)
}
}
}