Files
2025-12-06 11:26:05 +08:00

78 lines
2.1 KiB
Go

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
}