78 lines
2.1 KiB
Go
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
|
|
}
|