feat: 优化硬件ID生成方案,增加计算机名作为备选方案,确保ID生成的稳定性 v3.5.2
This commit is contained in:
131
test_hardware_id.py
Normal file
131
test_hardware_id.py
Normal file
@@ -0,0 +1,131 @@
|
||||
import subprocess
|
||||
import hashlib
|
||||
import logging
|
||||
import sys
|
||||
import time
|
||||
|
||||
def get_hardware_info():
|
||||
"""获取硬件信息(方案一)"""
|
||||
startupinfo = None
|
||||
if sys.platform == "win32":
|
||||
startupinfo = subprocess.STARTUPINFO()
|
||||
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||
startupinfo.wShowWindow = subprocess.SW_HIDE
|
||||
|
||||
try:
|
||||
# 获取CPU ID
|
||||
cpu_info = subprocess.check_output('wmic cpu get ProcessorId', startupinfo=startupinfo).decode()
|
||||
cpu_id = cpu_info.split('\n')[1].strip()
|
||||
|
||||
# 获取主板序列号
|
||||
board_info = subprocess.check_output('wmic baseboard get SerialNumber', startupinfo=startupinfo).decode()
|
||||
board_id = board_info.split('\n')[1].strip()
|
||||
|
||||
# 获取BIOS序列号
|
||||
bios_info = subprocess.check_output('wmic bios get SerialNumber', startupinfo=startupinfo).decode()
|
||||
bios_id = bios_info.split('\n')[1].strip()
|
||||
|
||||
if all([cpu_id, board_id, bios_id]):
|
||||
print(f"\n方案一硬件信息:")
|
||||
print(f"CPU ID: {cpu_id}")
|
||||
print(f"主板序列号: {board_id}")
|
||||
print(f"BIOS序列号: {bios_id}")
|
||||
|
||||
combined = f"{cpu_id}:{board_id}:{bios_id}"
|
||||
return hashlib.md5(combined.encode()).hexdigest()
|
||||
except Exception as e:
|
||||
print(f"方案一获取失败: {str(e)}")
|
||||
return None
|
||||
|
||||
def get_system_info():
|
||||
"""获取系统信息(方案二)"""
|
||||
startupinfo = None
|
||||
if sys.platform == "win32":
|
||||
startupinfo = subprocess.STARTUPINFO()
|
||||
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||
startupinfo.wShowWindow = subprocess.SW_HIDE
|
||||
|
||||
backup_info = []
|
||||
|
||||
try:
|
||||
# 获取系统盘序列号
|
||||
volume_info = subprocess.check_output('wmic logicaldisk where "DeviceID=\'C:\'" get VolumeSerialNumber', startupinfo=startupinfo).decode()
|
||||
volume_serial = volume_info.split('\n')[1].strip()
|
||||
if volume_serial:
|
||||
backup_info.append(("volume", volume_serial))
|
||||
print(f"\n系统盘序列号: {volume_serial}")
|
||||
except Exception as e:
|
||||
print(f"获取系统盘序列号失败: {str(e)}")
|
||||
|
||||
try:
|
||||
# 获取Windows安装时间
|
||||
os_info = subprocess.check_output('wmic os get InstallDate', startupinfo=startupinfo).decode()
|
||||
install_date = os_info.split('\n')[1].strip()
|
||||
if install_date:
|
||||
backup_info.append(("install", install_date))
|
||||
print(f"Windows安装时间: {install_date}")
|
||||
except Exception as e:
|
||||
print(f"获取系统安装时间失败: {str(e)}")
|
||||
|
||||
if backup_info:
|
||||
combined = "|".join(f"{k}:{v}" for k, v in sorted(backup_info))
|
||||
return hashlib.md5(combined.encode()).hexdigest()
|
||||
return None
|
||||
|
||||
def test_stability():
|
||||
"""测试ID的稳定性"""
|
||||
print("开始测试硬件ID稳定性...")
|
||||
print("将进行10次测试,每次间隔1秒")
|
||||
|
||||
# 存储每次生成的ID
|
||||
hardware_ids = []
|
||||
system_ids = []
|
||||
|
||||
for i in range(10):
|
||||
print(f"\n第 {i+1} 次测试:")
|
||||
|
||||
# 测试方案一
|
||||
hw_id = get_hardware_info()
|
||||
if hw_id:
|
||||
print(f"方案一(硬件信息)生成的ID: {hw_id}")
|
||||
hardware_ids.append(hw_id)
|
||||
|
||||
# 测试方案二
|
||||
sys_id = get_system_info()
|
||||
if sys_id:
|
||||
print(f"方案二(系统信息)生成的ID: {sys_id}")
|
||||
system_ids.append(sys_id)
|
||||
|
||||
time.sleep(1)
|
||||
|
||||
# 分析结果
|
||||
print("\n测试结果分析:")
|
||||
|
||||
if hardware_ids:
|
||||
unique_hw_ids = set(hardware_ids)
|
||||
print(f"\n方案一(硬件信息):")
|
||||
print(f"生成次数: {len(hardware_ids)}")
|
||||
print(f"唯一ID数: {len(unique_hw_ids)}")
|
||||
print("是否稳定: " + ("是" if len(unique_hw_ids) == 1 else "否"))
|
||||
if len(unique_hw_ids) > 1:
|
||||
print("出现的不同ID:")
|
||||
for idx, id in enumerate(unique_hw_ids):
|
||||
print(f"{idx+1}. {id}")
|
||||
else:
|
||||
print("\n方案一(硬件信息): 获取失败")
|
||||
|
||||
if system_ids:
|
||||
unique_sys_ids = set(system_ids)
|
||||
print(f"\n方案二(系统信息):")
|
||||
print(f"生成次数: {len(system_ids)}")
|
||||
print(f"唯一ID数: {len(unique_sys_ids)}")
|
||||
print("是否稳定: " + ("是" if len(unique_sys_ids) == 1 else "否"))
|
||||
if len(unique_sys_ids) > 1:
|
||||
print("出现的不同ID:")
|
||||
for idx, id in enumerate(unique_sys_ids):
|
||||
print(f"{idx+1}. {id}")
|
||||
else:
|
||||
print("\n方案二(系统信息): 获取失败")
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_stability()
|
||||
Reference in New Issue
Block a user