from wmi import WMI
import uuid
import subprocess
class PCSerialNumber:
"""获取pc信息:各种序列号【硬盘序列号、CPU序列号、主板、mac地址的字符串、bios_id】"""
def __init__(self):
self.c = WMI()
def get_physical_disk_serial_numbers(self):
"""获取硬盘序列号【多个】"""
physical_disk_list = list()
for physical_disk in self.c.Win32_DiskDrive():
str_physical_disk = str(physical_disk.SerialNumber)
physical_disk_list.append(str_physical_disk)
return "".join(physical_disk_list)
def get_CPU_id(self):
"""获取CPU序列号"""
cpu_id_list = list()
for cpu_id in self.c.Win32_Processor():
str_cpu_id = cpu_id.ProcessorId.strip()
cpu_id_list.append(str_cpu_id)
return "".join(cpu_id_list)
def get_board_id(self):
"""获取主板序列号"""
board_id_list = list()
for board_id in self.c.Win32_BaseBoard():
str_board_id = str(board_id.SerialNumber)
board_id_list.append(str_board_id)
return "".join(board_id_list)
def get_mac_addr(self):
"""获取本机的mac地址的字符串(每2个16进制数(0到F)用一个":"隔开)"""
mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
str_mac_addr = ":".join([mac[e:e + 2] for e in range(0, 11, 2)])
return str_mac_addr
def get_mac_addr2(self):
"""获取mac_addr【多个,不推荐】"""
mac_list = list()
for mac in self.c.Win32_NetworkAdapter():
str_mac = mac.MACAddress
print(f"mac:{mac}")
if str_mac is None:
pass
else:
mac_list.append(str_mac)
return "".join(mac_list)
def get_mac_addr3(self):
"""跟get_mac_addr得到的结果一样,都是唯一"""
mac = uuid.uuid1()
print(f"get_mac_addr3中mac:{mac}")
str_mac_addr = f"{mac}"
return str_mac_addr
def get_mac_addr4(self):
"""一路找寻,感觉这个比较靠谱一点:https://www.thinbug.com/q/38328176;https://www.cnpython.com/qa/257031"""
cmd = 'wmic csproduct get uuid'
str_mac_addr = str(subprocess.check_output(cmd), 'utf-8').split('\n')[1].strip()
print(f"get_mac_addr4中str_mac_addr:{str_mac_addr}")
return str_mac_addr
def get_bios_id(self):
"""获取bios_id"""
bios_id_list = list()
for bios_id in self.c.Win32_BIOS():
str_bios_id = bios_id.SerialNumber.strip()
bios_id_list.append(str_bios_id)
return "".join(bios_id_list)
def get_local_machine_info_dict(self):
"""获取本地机器指纹的字典(方便保存)"""
local_machine_info_dict = dict()
local_machine_info_dict["cpu_id"] = self.get_CPU_id()
local_machine_info_dict["board_id"] = self.get_board_id()
local_machine_info_dict["mac_addr"] = self.get_mac_addr()
local_machine_info_dict["bios_id"] = self.get_bios_id()
return local_machine_info_dict
def get_local_machine_fingerprint(self):
"""获取本地机器指纹"""
local_machine_info_dict = self.get_local_machine_info_dict()
cpu_id = local_machine_info_dict["cpu_id"]
board_id = local_machine_info_dict["board_id"]
mac_addr = local_machine_info_dict["mac_addr"]
bios_id = local_machine_info_dict["bios_id"]
str_machine_fingerprint = f"{cpu_id}{board_id}{mac_addr}{bios_id}"
return str_machine_fingerprint
def get_str_machine_fingerprint(self, sk, times, start_date, due_date, q_class):
"""获取机器指纹字符串(可以加上权限,次数,开始日期,截至日期,权限等级"""
local_machine_info_dict = self.get_local_machine_info_dict()
cpu_id = local_machine_info_dict.get('cpu_id')
board_id = local_machine_info_dict.get('board_id')
mac_addr = local_machine_info_dict.get('mac_addr')
bios_id = local_machine_info_dict.get('bios_id')
str_machine_fingerprint = f"{cpu_id}{board_id}{mac_addr}{bios_id}_{sk}_{times}_{start_date}_{due_date}_{q_class}"
print(f"str_machine_fingerprint:{str_machine_fingerprint}")
return str_machine_fingerprint
def main():
serial_number_obj = PCSerialNumber()
local_machine_info_dict = dict()
cpu_id = serial_number_obj.get_CPU_id()
board_id = serial_number_obj.get_board_id()
mac_addr = serial_number_obj.get_mac_addr()
mac_addr2 = serial_number_obj.get_mac_addr2()
mac_addr3 = serial_number_obj.get_mac_addr3()
mac_addr4 = serial_number_obj.get_mac_addr4()
bios_id = serial_number_obj.get_bios_id()
local_machine_info_dict["bios_id"] = bios_id
local_machine_info_dict["mac_addr"] = mac_addr
local_machine_info_dict["board_id"] = board_id
local_machine_info_dict["cpu_id"] = cpu_id
cpu_id = local_machine_info_dict["cpu_id"]
board_id = local_machine_info_dict["board_id"]
mac_addr = local_machine_info_dict["mac_addr"]
bios_id = local_machine_info_dict["bios_id"]
str_machine_fingerprint = f"{cpu_id}{board_id}{mac_addr}{bios_id}"
print(f"local_machine_info_dict: {local_machine_info_dict}")
print(f"str_machine_fingerprint: {str_machine_fingerprint}")
if __name__ == '__main__':
import time
st = time.time()
main()
print(f"耗时:{time.time() - st} s")