Files
nezhacursor/test_hardware_id.py

131 lines
4.6 KiB
Python

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()