zhangzengfei
2021-04-02 f455f4ffec96c5838de6f10b7b2959c860485be1
machine.go
@@ -1,6 +1,9 @@
package licence
import (
   "os/exec"
   "sort"
   "strconv"
   "strings"
   "github.com/shirou/gopsutil/cpu"
@@ -10,12 +13,15 @@
)
func GetMachineCode() string {
   var machineCode string
   var machineInfo []string
   // CPU
   if cpu, err := cpu.Info(); err == nil {
      for _, c := range cpu {
         machineCode = strings.Join([]string{machineCode, c.String()}, "-cpu-")
   if cnt, err := cpu.Counts(true); err == nil {
      machineInfo = append(machineInfo, "cpuCounts:"+strconv.Itoa(cnt))
      if cnt > 0 {
         if c, err := cpu.Info(); err == nil {
            machineInfo = append(machineInfo, "cpuModelName:"+c[0].ModelName)
         }
      }
   }
@@ -23,25 +29,36 @@
   if diskInfo, err := disk.Partitions(false); err == nil {
      for _, d := range diskInfo {
         diskSerialNumber := disk.GetDiskSerialNumber(d.Device)
          strings.Join([]string{machineCode, diskSerialNumber}, "-")
         machineInfo = append(machineInfo, diskSerialNumber)
       }
   }
   // Host
   if host, err := host.Info(); err == nil {
      machineCode = strings.Join([]string{machineCode, host.HostID}, "-host-")
      machineInfo = append(machineInfo, host.HostID)
   }*/
   // 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-")
      // 获取虚拟网卡
      cmd := exec.Command("/bin/sh", "-c", "ls /sys/devices/virtual/net/")
      cmdResult, _ := cmd.Output()
      vNets := string(cmdResult)
      for _, iface := range net {
         // 排除lo, 和虚拟接口
         if iface.MTU == 1500 && !VNetFilter(&iface) && !strings.Contains(vNets, iface.Name) {
            machineInfo = append(machineInfo, "mac:"+iface.HardwareAddr)
         }
      }
   }
   return GetMd5String(machineCode, true, false)
   sort.Strings(machineInfo)
   // fmt.Println("machineInfo", machineInfo)
   return GetMd5String(strings.Join(machineInfo, "-|-"), true, false)
}
func VNetFilter(iface *psnet.InterfaceStat) bool {
@@ -55,6 +72,7 @@
      "veth",
      "Npcap",
      "VirtualBox",
      "dummy",
   }
   for _, v := range vNetNamePrefix {