package host_info import ( "cmii-uav-watchdog-common/models" "cmii-uav-watchdog-common/wdd_log" "net" "strings" ) // getMACAddress 获取指定接口的 MAC 地址 func getMACAddress(iface net.Interface) (string, error) { _, err := iface.Addrs() if err != nil { return "", err } // 获取 MAC 地址 return iface.HardwareAddr.String(), nil } // getNetworkInterfaces 获取网卡信息 func GetNetworkInterfaces() []models.NetworkInterfaceInfo { var interfaces []models.NetworkInterfaceInfo // 获取所有网络接口 ifaces, err := net.Interfaces() if err != nil { wdd_log.Error("获取网络接口失败: %v", err) return []models.NetworkInterfaceInfo{{Name: "unknown", MACAddress: "00:00:00:00:00:00", IPAddresses: []string{}}} } for _, iface := range ifaces { // 过滤掉 Docker 和 Kubernetes 网络插件创建的网卡 if strings.HasPrefix(iface.Name, "docker") || strings.HasPrefix(iface.Name, "cali") || strings.HasPrefix(iface.Name, "flannel") || strings.HasPrefix(iface.Name, "br") || strings.HasPrefix(iface.Name, "lo") || strings.HasPrefix(iface.Name, "tunl0") { continue } // 获取 MAC 地址 macAddress, err := getMACAddress(iface) if err != nil { wdd_log.Error("获取网卡 %s 的MAC地址失败: %v", iface.Name, err) continue } // 获取有效的 IP 地址 var ipAddresses []string addrs, err := iface.Addrs() if err != nil { wdd_log.Error("获取网卡 %s 的IP地址失败: %v", iface.Name, err) continue } for _, addr := range addrs { if ipNet, ok := addr.(*net.IPNet); ok && ipNet.IP.To4() != nil { ipAddresses = append(ipAddresses, ipNet.IP.String()) } } // 仅在有 IP 地址时才添加到接口列表 if len(ipAddresses) > 0 { interfaces = append(interfaces, models.NetworkInterfaceInfo{ Name: iface.Name, MACAddress: macAddress, IPAddresses: ipAddresses, }) } } // 如果没有找到任何有效的接口,返回默认值 if len(interfaces) == 0 { return []models.NetworkInterfaceInfo{{Name: "unknown", MACAddress: "00:00:00:00:00:00", IPAddresses: []string{}}} } return interfaces }