41 lines
740 B
Go
41 lines
740 B
Go
package device
|
||
|
||
import (
|
||
"net"
|
||
"os"
|
||
"strings"
|
||
)
|
||
|
||
// GetDeviceID 返回本机原始唯一ID(Linux /etc/machine-id 或 hostname+MAC)
|
||
func GetDeviceID() string {
|
||
// 尝试读取 Linux /etc/machine-id
|
||
if data, err := os.ReadFile("/etc/machine-id"); err == nil {
|
||
s := strings.TrimSpace(string(data))
|
||
if s != "" {
|
||
return s
|
||
}
|
||
}
|
||
|
||
// fallback: hostname + first non零MAC
|
||
hn, _ := os.Hostname()
|
||
mac := getFirstMac()
|
||
return hn + "|" + mac
|
||
}
|
||
|
||
func getFirstMac() string {
|
||
ifaces, err := net.Interfaces()
|
||
if err != nil {
|
||
return ""
|
||
}
|
||
for _, it := range ifaces {
|
||
if len(it.HardwareAddr) == 0 {
|
||
continue
|
||
}
|
||
mac := it.HardwareAddr.String()
|
||
if mac != "" && mac != "00:00:00:00:00:00" {
|
||
return mac
|
||
}
|
||
}
|
||
return ""
|
||
}
|