golang有没有类似py的netifaces包来获取某个网卡的网关,MAC,子网掩码等信息的第三方库?

在python中有netifaces包用来获取某个网卡的ip,掩码,网关等信息
golang的net可以获取ip,掩码,貌似也可以获取mac。那怎么获取网关地址,或者有没有别的类似的第三方库?
现在目的就是想要根据网卡名字比如eth1,获取该网卡的ip地址,子网掩码,物理地址,网关,DNS

阅读 11.8k
2 个回答

既然标准库 net 已经有方法,那么应当优先使用标准库(何况该有的都有)

1、获取Mac Addr、IP、Mask

    // 此处填你的网卡名称(因为你的需求是根据网卡名字获取XXX)
    inter, err :=  net.InterfaceByName("eno16777736")
    if err != nil {
        log.Fatalf("无法获取信息: %v", err)
    }

    // 获取Mac地址
    fmt.Println("Mac addr: ", inter.HardwareAddr.String())

    addrs, err := inter.Addrs()
    if err != nil {
        log.Fatalln(err)
    }

    // 获取IP地址,子网掩码
    for _, addr := range addrs {
        if ip, ok := addr.(*net.IPNet); ok && !ip.IP.IsLoopback() {
            if ip.IP.To4() != nil {
                fmt.Println("IP:", ip.IP)
                fmt.Println("Mask:", ip.Mask)
            }
        }
    }

2、获取DNS地址

读取 /etc/resolv.conf 文件中的本地 dns server 地址列表

然后进行规则解析即可

3、获取物理地址

ARP(Address Resolution Protocol),地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址

这个篇幅很大了,简单来说就是根据IP地址获取物理地址。网上有不少资料,你可以去看看。


你要想一下,你需要的这几个东西,不是一个包能完成的

因为他们不完全是同一个东西,各司其职

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏