package core import ( "aufs/config" "encoding/json" "fmt" "net" "net/http" "os" "os/exec" "os/user" "runtime" "strings" ) type Iplist struct { Ips []Ips `json:"ip"` } type Ips struct { Netcard string `json:"netcard"` Mac string `json:"mac"` Ip string `json:"ip"` } // json 结构体 type HdResp struct { Status string `json:"status"` //状态 Hip string `json:"hostip"` //主机ip Hname string `json:"hostname"` //主机名 Cpu string `json:"cpu"` //cpu Mem string `json:"mem"` //内存 Disks string `json:"disks"` //磁盘 Net string `json:"net"` //网络 Osname string `json:"osname"` //操作系统 } // 服务器的硬件信息 func Hdinfo(w http.ResponseWriter, r *http.Request) { // 获取服务器的信息 hostip, err := config.GetLocalIP() if err != nil { fmt.Println("获取主机IP失败:", err) return } hostname, err := os.Hostname() if err != nil { fmt.Println("获取主机名失败:", err) return } // respone file list response := HdResp{ Status: "success", Hip: hostip, Hname: hostname, Cpu: fmt.Sprintf("%d", runtime.NumCPU()), // cpu、的数量 Mem: getMachieMem(), Disks: "", // 因 getDiskInfo 未定义,暂时使用空字符串占位,需实现 getDiskInfo 函数后再修改, Net: getMachieNet(), // 因 getMachieNet 未定义,暂时使用空字符串占位,需实现 getMachieNet 函数后再修改, Osname: runtime.GOOS, } // 开启跨域 uCorsHadler(w, r) json.NewEncoder(w).Encode(response) } func getMachieNet() string { var iplist Iplist var ret []string ifaces, err := net.Interfaces() if err != nil { fmt.Println("无法获取网络接口信息:", err) } else { for _, iface := range ifaces { ret = append(ret, iface.Name) ret = append(ret, iface.HardwareAddr.String()) // ip地址信息等 var ipaddr []string addrs, _ := iface.Addrs() for _, addr := range addrs { ipaddr = append(ipaddr, addr.String()) } // 合并到ret 中 ret = append(ret, strings.Join(ipaddr, ",")) iplist.Ips = append(iplist.Ips, Ips{iface.Name, iface.HardwareAddr.String(), strings.Join(ipaddr, ",")}) // jsonobj, err := json.Marshal(iplist) if err != nil { fmt.Println("er", err) } ret[0] = string(jsonobj) // fmt.Println("网络接口名称:", iface.Name) // fmt.Println("硬件地址 (MAC):", iface.HardwareAddr) // addrs, _ := iface.Addrs() // for _, addr := range addrs { // fmt.Println("IP地址:", addr.String()) // } // fmt.Println() } } return ret[0] // return strings.Join(ret, ",") } func getCurrentUser() (*user.User, error) { currentUser, err := user.Current() if err != nil { return nil, err } return currentUser, nil } func getDiskInfo() (string, error) { var diskInfo string // 执行 df 命令获取磁盘信息 cmd := exec.Command("df", "-h") output, err := cmd.Output() if err != nil { return "", err } diskInfo = string(output) return diskInfo, nil } // 内存信息 func getMachieMem() string { var m runtime.MemStats runtime.ReadMemStats(&m) // 内存使用占比 // memUsage := fmt.Sprintf("%.2f%%", float64(m.Alloc)/float64(m.Sys)*100) ttmem := fmt.Sprintf("%v MB\n", m.TotalAlloc/1024/1024) return ttmem }