You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
4.8 KiB
Python
182 lines
4.8 KiB
Python
import hashlib
|
|
import logging
|
|
import os
|
|
import socket
|
|
import subprocess
|
|
import uuid
|
|
from website import settings
|
|
|
|
def get_cpu_id():
|
|
p = subprocess.Popen(["dmidecode -t 4 | grep ID | tail -1"],
|
|
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
data = p.stdout
|
|
lines = []
|
|
while True:
|
|
line = str(data.readline(), encoding="utf-8")
|
|
if line == '\n':
|
|
break
|
|
if line:
|
|
d = dict([line.strip().split(': ')])
|
|
lines.append(d)
|
|
else:
|
|
break
|
|
return lines
|
|
|
|
|
|
def get_system_uuid():
|
|
p = subprocess.Popen(["dmidecode -s system-uuid"],
|
|
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
data = p.stdout
|
|
lines = []
|
|
while True:
|
|
line = str(data.readline(), encoding="utf-8")
|
|
if line == '\n':
|
|
break
|
|
if line:
|
|
lines.append(line)
|
|
else:
|
|
break
|
|
print("system uuid {}".format(lines))
|
|
|
|
return lines
|
|
|
|
|
|
def get_system_manufacture():
|
|
p = subprocess.Popen(["dmidecode -s processor-manufacturer | tail -1"],
|
|
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
data = p.stdout
|
|
lines = []
|
|
while True:
|
|
line = str(data.readline(), encoding="utf-8")
|
|
if line == '\n':
|
|
break
|
|
if line:
|
|
lines.append(line)
|
|
else:
|
|
break
|
|
|
|
return lines
|
|
|
|
|
|
def get_board_manufacturer():
|
|
p = subprocess.Popen(["dmidecode -s baseboard-manufacturer"],
|
|
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
data = p.stdout
|
|
lines = []
|
|
while True:
|
|
line = str(data.readline(), encoding="utf-8")
|
|
if line == '\n':
|
|
break
|
|
if line:
|
|
lines.append(line)
|
|
else:
|
|
break
|
|
|
|
return lines
|
|
|
|
|
|
def get_board_serial_number():
|
|
p = subprocess.Popen(["dmidecode -s baseboard-serial-number"],
|
|
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
data = p.stdout
|
|
lines = []
|
|
while True:
|
|
line = str(data.readline(), encoding="utf-8")
|
|
if line == '\n':
|
|
break
|
|
if line:
|
|
lines.append(line)
|
|
else:
|
|
break
|
|
|
|
return lines
|
|
|
|
|
|
def get_board_serialnumber():
|
|
p = subprocess.Popen(["dmidecode -t 2 | grep Serial"],
|
|
shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
data = p.stdout
|
|
lines = []
|
|
while True:
|
|
line = str(data.readline(), encoding="utf-8")
|
|
if line == '\n':
|
|
break
|
|
if line:
|
|
d = dict([line.strip().split(': ')])
|
|
lines.append(d)
|
|
else:
|
|
break
|
|
return lines
|
|
|
|
|
|
def get_idntify_code_v2():
|
|
cpuid = get_cpu_id()
|
|
system_uuid = get_system_uuid()
|
|
system_manufacture = get_system_manufacture()
|
|
board_manufacturer = get_board_manufacturer()
|
|
board_serial_number = get_board_serial_number()
|
|
s = ""
|
|
|
|
if cpuid:
|
|
s += cpuid[0]["ID"]
|
|
print("cpuid: ", cpuid[0]["ID"])
|
|
if system_uuid:
|
|
print(system_uuid)
|
|
s += system_uuid[0].strip()
|
|
if system_manufacture:
|
|
print(system_manufacture)
|
|
s += system_manufacture[0].strip()
|
|
if board_manufacturer:
|
|
print(board_manufacturer)
|
|
s += board_manufacturer[0].strip()
|
|
if board_serial_number:
|
|
print(board_serial_number)
|
|
s += board_serial_number[0].strip()
|
|
|
|
s += settings.system_salt
|
|
# system_salt = "5bVQmI0ATh+QITf75WgVchT6TPN1DEOasSmrtMcTsPQ="
|
|
# s += system_salt
|
|
code = hashlib.sha256(s.encode("utf8")).hexdigest()
|
|
return code
|
|
|
|
|
|
def get_identify_code():
|
|
mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
|
|
mac_addr = ":".join([mac[e:e + 2] for e in range(0, 11, 2)])
|
|
|
|
host_name = socket.getfqdn(socket.gethostname())
|
|
cpu_ids = get_cpu_id()
|
|
serialnumbers = get_board_serialnumber()
|
|
|
|
s = ""
|
|
if mac_addr:
|
|
s += mac_addr
|
|
if host_name:
|
|
s += host_name
|
|
if cpu_ids:
|
|
for cpu in cpu_ids:
|
|
s += cpu["ID"]
|
|
if serialnumbers:
|
|
for number in serialnumbers:
|
|
s += number["Serial Number"]
|
|
logging.info(s)
|
|
|
|
code = hashlib.new('md5', s.encode("utf8")).hexdigest()
|
|
return code
|
|
|
|
|
|
def get_docker_container_id():
|
|
# 获取当前 Docker 容器的 ID
|
|
cmd = "cat /proc/self/cgroup"
|
|
output = os.popen(cmd)
|
|
rests = output.readlines()
|
|
container_message = rests[-1]
|
|
if not container_message:
|
|
container_id = "abc"
|
|
else:
|
|
container_id = container_message.strip().split("docker/")[-1]
|
|
return container_id
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(get_idntify_code_v2()) |