获取硬件信息(硬盘序列号【多个】,CPU序列号,主板序列号,mac地址【得到唯一mac地址】,bios序列号)

from wmi import WMI  # 获取硬件信息(硬盘序列号【多个】,CPU序列号,主板序列号,mac地址【另一种方法得到唯一】,bios序列号)
import uuid  # python获取本机mac
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)
            # print(f"physical_disk.SerialNumber:{str_physical_disk}")
            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()
            # print(f"cpu.ProcessorId.strip():{str_cpu_id}")
            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)
            # print(f"board_id.SerialNumber:{str_board_id}")
            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)])  # 每2个16进制数(0到F)用一个":"隔开
        # print(f"str_mac_addr:{str_mac_addr}")
        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}")
            # print(f"mac.MACAddress:{str_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()
        # 可以看到我们得到了5段数据(用-隔开),第一段是一个随机数,第二段、第三段第四段是我们的时间和日期(包括秒数),最后一段则是我们的MAC地址【跟get_mac_addr得到的一样】
        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}")  # C7C04F434633
        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()
            # print(f"bios_id.SerialNumber.strip():{str_bios_id}")
            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")



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值