import wmi ############ 1. 獲取硬件信息,輸出 macode # 1.CPU序列號(ID) 2.本地連接 無線局域網 以太網的MAC 3.硬盤序列號(唯一) 4.主板序列號(唯一) global s s = wmi.WMI() #cpu 序列號 def get_CPU_info(self): cpu = [] cp = s.Win32_Processor() for u in cp: cpu.append( { "Name": u.Name, "Serial Number": u.ProcessorId, "CoreNum": u.NumberOfCores } ) # print(":::CPU info:", json.dumps(cpu)) return cpu #硬盤序列號 def get_disk_info(self): disk = [] for pd in s.Win32_DiskDrive(): disk.append( { "Serial": s.Win32_PhysicalMedia()[0].SerialNumber.lstrip().rstrip(), # 獲取硬盤序列號,調用另外一個win32 API "ID": pd.deviceid, "Caption": pd.Caption, "size": str(int(float(pd.Size)/1024/1024/1024))+"G" } ) # print(":::Disk info:", json.dumps(disk)) return disk #mac 地址(包括虛擬機的) def get_network_info(self): network = [] for nw in s.Win32_NetworkAdapterConfiguration (): # IPEnabled=0 if nw.MACAddress != None: network.append( { "MAC": nw.MACAddress, # 無線局域網適配器 WLAN 物理地址 "ip": nw.IPAddress } ) # print(":::Network info:", json.dumps(network)) return network #主板序列號 def get_mainboard_info(self): mainboard=[] for board_id in s.Win32_BaseBoard (): mainboard.append(board_id.SerialNumber.strip().strip('.')) return mainboard # 由於機器碼太長,故選取機器碼字符串部分字符 # E0:DB:55:B5:9C:16BFEBFBFF00040651W3P0VKEL6W8T1Z1.CN762063BN00A8 # 1 61 k 8Z # machinecode_str = "" # machinecode_str = machinecode_str+a[0]['MAC']+b[0]['Serial Number']+c[0]['Serial']+d[0] def getCombinNumber(self): a=self.get_network_info() b=self.get_CPU_info() c=self.get_disk_info() d=self.get_mainboard_info() machinecode_str = "" machinecode_str = machinecode_str+a[0]['MAC']+b[0]['Serial Number']+c[0]['Serial']+d[0] selectindex=[15,30,32,38,43,46] macode="" for i in selectindex: macode=macode+machinecode_str[i] ### print(macode) return macode