获取系统唯一标识信息
1. 什么是系统 UUID
系统 UUID(Universally Unique Identifier,通用唯一识别码)是硬件厂商在制造主板时写入 BIOS/UEFI 中的唯一标识符,用于唯一标识一台计算机设备。
UUID 的特点:
- 全局唯一性:每台设备的 UUID 都是唯一的
- 持久性:存储在硬件中,重装系统不会改变
- 应用场景:软件授权、设备管理、资产追踪
2. Windows 系统
2.1 使用 WMIC 命令
bash
wmic csproduct get uuid输出示例:
text
UUID
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX2.2 使用 PowerShell
powershell
Get-WmiObject -Class Win32_ComputerSystemProduct | Select-Object -ExpandProperty UUID2.3 使用注册表
UUID 也存储在注册表中,可以通过以下路径查看:
text
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid使用命令查询:
bash
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography /v MachineGuid3. Linux 系统
3.1 使用 dmidecode 命令
需要 root 权限:
bash
sudo dmidecode -s system-uuid输出示例:
text
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX3.2 读取 sysfs 文件系统
bash
sudo cat /sys/class/dmi/id/product_uuid或者:
bash
sudo cat /sys/devices/virtual/dmi/id/product_uuid3.3 使用 lshw 命令
bash
sudo lshw -class system | grep uuid4. macOS 系统
4.1 使用 system_profiler
bash
system_profiler SPHardwareDataType | grep "Hardware UUID"4.2 使用 ioreg
bash
ioreg -rd1 -c IOPlatformExpertDevice | grep IOPlatformUUID输出示例:
text
"IOPlatformUUID" = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"5. 跨平台解决方案
5.1 Python 实现
python
import platform
import subprocess
import uuid
def get_system_uuid():
"""获取系统 UUID"""
system = platform.system()
if system == "Windows":
# Windows 系统
result = subprocess.check_output(
'wmic csproduct get uuid',
shell=True
).decode()
uuid_str = result.split('\n')[1].strip()
return uuid_str
elif system == "Linux":
# Linux 系统
try:
with open('/sys/class/dmi/id/product_uuid', 'r') as f:
return f.read().strip()
except PermissionError:
# 需要 sudo 权限
result = subprocess.check_output(
['sudo', 'dmidecode', '-s', 'system-uuid']
).decode()
return result.strip()
elif system == "Darwin":
# macOS 系统
result = subprocess.check_output(
['system_profiler', 'SPHardwareDataType']
).decode()
for line in result.split('\n'):
if 'Hardware UUID' in line:
return line.split(':')[1].strip()
else:
# 使用 uuid 库生成(不是真正的硬件 UUID)
return str(uuid.uuid4())
if __name__ == "__main__":
system_uuid = get_system_uuid()
print(f"系统 UUID: {system_uuid}")5.2 Node.js 实现
javascript
const { execSync } = require('child_process')
const os = require('os')
function getSystemUUID() {
const platform = os.platform()
try {
if (platform === 'win32') {
// Windows
const output = execSync('wmic csproduct get uuid', { encoding: 'utf8' })
return output.split('\n')[1].trim()
} else if (platform === 'linux') {
// Linux
try {
const output = execSync('cat /sys/class/dmi/id/product_uuid', { encoding: 'utf8' })
return output.trim()
} catch (error) {
// 需要 sudo 权限
const output = execSync('sudo dmidecode -s system-uuid', { encoding: 'utf8' })
return output.trim()
}
} else if (platform === 'darwin') {
// macOS
const output = execSync('system_profiler SPHardwareDataType', { encoding: 'utf8' })
const match = output.match(/Hardware UUID: (.+)/)
return match ? match[1].trim() : null
}
} catch (error) {
console.error('获取 UUID 失败:', error.message)
return null
}
}
console.log('系统 UUID:', getSystemUUID())6. 注意事项
6.1 权限要求
- Linux/macOS:大多数情况下需要 root/sudo 权限才能读取硬件 UUID
- Windows:普通用户权限即可
6.2 虚拟机环境
在虚拟机中,UUID 可能由虚拟化软件生成:
- VMware 会为每个虚拟机分配唯一的 UUID
- VirtualBox 也会生成虚拟机 UUID
- Docker 容器继承宿主机的 UUID
6.3 UUID 的局限性
- 可修改性:技术上 UUID 可以被修改(需要特殊工具)
- 隐私问题:UUID 可能被用于追踪设备
- 克隆影响:磁盘克隆可能导致多台设备具有相同 UUID
6.4 替代方案
如果无法获取硬件 UUID,可以考虑:
- MAC 地址:网卡物理地址
- 硬盘序列号:存储设备序列号
- CPU 序列号:处理器序列号
- 组合标识:多个硬件信息的组合哈希
7. 应用场景
7.1 软件授权
python
import hashlib
def generate_license_key(uuid, product_key):
"""基于 UUID 生成软件许可证"""
data = f"{uuid}-{product_key}"
return hashlib.sha256(data.encode()).hexdigest()
def validate_license(uuid, license_key, product_key):
"""验证许可证"""
expected_key = generate_license_key(uuid, product_key)
return license_key == expected_key7.2 设备追踪
python
import requests
import json
def report_device_info(uuid):
"""上报设备信息到服务器"""
data = {
'uuid': uuid,
'hostname': platform.node(),
'os': platform.system(),
'version': platform.version()
}
response = requests.post(
'https://api.example.com/devices',
json=data
)
return response.json()7.3 资产管理
在企业环境中,IT 管理员可以使用 UUID 来:
- 追踪公司设备
- 管理软件安装
- 监控设备状态
- 执行远程操作
8. 参考资料
- https://en.wikipedia.org/wiki/Universally_unique_identifier - UUID 维基百科
- https://docs.microsoft.com/en-us/windows/win32/wmisdk/ - Windows WMI 文档
- https://linux.die.net/man/8/dmidecode - dmidecode 手册
- https://support.apple.com/en-us/HT201375 - macOS 系统信息