package licence import ( "strings" "github.com/shirou/gopsutil/cpu" psnet "github.com/shirou/gopsutil/net" // "github.com/shirou/gopsutil/host" // "github.com/shirou/gopsutil/disk" ) func GetMachineCode() string { var machineCode string // CPU if cpu, err := cpu.Info(); err == nil { for _, c := range cpu { machineCode = strings.Join([]string{machineCode, c.String()}, "-cpu-") } } /* // Disk if diskInfo, err := disk.Partitions(false); err == nil { for _, d := range diskInfo { diskSerialNumber := disk.GetDiskSerialNumber(d.Device) strings.Join([]string{machineCode, diskSerialNumber}, "-") } } // Host if host, err := host.Info(); err == nil { machineCode = strings.Join([]string{machineCode, host.HostID}, "-host-") }*/ // Net if net, err := psnet.Interfaces(); err == nil { for _, n := range net { if n.MTU == 1500 && !VNetFilter(&n) { machineCode = strings.Join([]string{machineCode, n.HardwareAddr}, "-mac-") } } } return GetMd5String(machineCode, true, false) } func VNetFilter(iface *psnet.InterfaceStat) bool { if iface.HardwareAddr == "" { return true } vNetNamePrefix := [...]string{ "docker", "br-", "veth", "Npcap", "VirtualBox", } for _, v := range vNetNamePrefix { if strings.HasPrefix(iface.Name, v) { return true } } /* 暂时放弃过滤虚拟机MAC,会导致运行在虚拟机时,机器码不包含MAC地址的问题。如果不允许服务运行在虚拟机,再启用并提示警告 vNetAddrPrefix := [...]string{ "00:05:69", //vmware1 "00:0C:29", //vmware2 "00:50:56", //vmware3 "00:1c:14", //vmware4 "00:1C:42", //parallels1 "00:03:FF", //microsoft virtual pc "00:0F:4B", //virtual iron 4 "00:16:3E", //red hat xen , oracle vm , xen source, novell xen "08:00:27", //virtualbox } for _, v := range vNetAddrPrefix { if strings.HasPrefix(iface.HardwareAddr, v) { return true } } */ return false }