import console;
import crypt;
import com.wmi;
import inet.adapterInfo;

// 获取cpuID
function getCpuID(){
    var cpuTable = com.wmi.getTable("SELECT ProcessorId FROM Win32_Processor");
    if(#cpuTable){
        return cpuTable[1].ProcessorId;
    }
    return "";
}

// 获取第一个物理硬盘的序列号
function getFirstDiskSerial() {
    var drive = com.wmi.get("SELECT SerialNumber FROM Win32_DiskDrive WHERE Index=0");
    if(drive && drive.SerialNumber) {
        return string.trim(drive.SerialNumber);
    }
    return "";
}

// 常见虚拟化厂商的 MAC 地址前缀(OUI)
var virtualOUI = {
    "00-05-69" = "VMware",
    "00-0C-29" = "VMware",
    "00-50-56" = "VMware",
    "00-1C-42" = "Parallels",
    "00-03-FF" = "Microsoft Hyper-V",
    "00-15-5D" = "Microsoft Hyper-V",
    "08-00-27" = "VirtualBox",
    "0A-00-27" = "VirtualBox",
    "00-FF"    = "虚拟网卡(常见)"
};

// // 检查前6个字符(OUI)
function isVirtualByMAC(mac) {
    for prefix in virtualOUI {
        if(string.find(mac, prefix)) {
            return true;
        }
    }
    return false;
}

// 获取第一个物理网卡MAC地址
function getFirstMac(){
    for adapter in inet.adapterInfo.each() {
        if(adapter.operStatusUp and adapter.mac){
            if(not isVirtualByMAC(adapter.mac)){
                return adapter.mac;
            }
        }
    }
    return "";
}

var cpu_id = getCpuID();
console.success("CPUID", cpu_id);

var serial = getFirstDiskSerial();
console.success("硬盘序列号", serial);

var mac_info = getFirstMac();
console.success("MAC", mac_info);

content = string.join({cpu_id, serial, mac_info}, "-");
var sha1 = crypt.sha1(content, false);

console.success("机器码", string.left(sha1, 8));
console.pause();

阅读量: 128 | 标签: 暂无标签

添加新评论