根据机器的CPU、主板、MAC地址生成唯一的激活码,授权认证

参考了网上许多博客,文章,最后总结出来。

https://github.com/Dagon0577/Dagon_Code

Dagon_Code

从Windows,Linux获取CPU,主板,MAC地址,虚拟ID(docker,machine-rkt),并生成Dagon_Code。

判断是否为虚拟机或者容器

首先判断是否为虚拟机或者是容器,若不是,再去物理机下获取。(相关方法在下文)

/**
     * 判断是否为容器、虚拟机,返回虚拟ID
     *
     * @return
     */
    public static String getVirtualID() {
   
   
        String execResult = executeLinuxCmd("systemd-detect-virt");
        if (!execResult.contains("none")) {
   
   
            //docker容器
            String VirtualID = getSerialNumber("cat /proc/1/cgroup", "docker", "docker/");
            if (VirtualID != null) {
   
   
                return VirtualID;
            }
            //machine-rkt
            VirtualID = getSerialNumber("cat /proc/1/cgroup", "machine-rkt", "machine-rkt\\");
            if (VirtualID != null) {
   
   
                VirtualID.replaceAll("\\x2d", "-");
                return VirtualID;
            }
            //vmware
            VirtualID = getSerialNumber("dmidecode -t system", "UUID", ":");
            if (VirtualID != null) {
   
   
                return VirtualID;
            }
            return "UNKNOWN";
        }
        return null;
    }

Windows下

通过创建vbs脚本,然后使用Runtime.getRuntime().exec()执行脚本,获取序列号等信息。

获取CPU序列号

 /**
     * 获取CPU序列号
     *
     * @return
     */
    public static String getCPUSerial() {
   
   
        String result = "";
        try {
   
   
            File file = File.createTempFile("tmp", ".vbs");
            file.deleteOnExit();
            FileWriter fw = new java.io.FileWriter(file);
            String vbs = "Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
                    + "Set colItems = objWMIService.ExecQuery _ \n"
                    + "   (\"Select * from Win32_Processor\") \n"
                    + "For Each objItem in colItems \n" + "    Wscript.Echo objItem.ProcessorId \n"
                    + "    exit for  ' do the first cpu only! \n" + "Next \n";

            // + "    exit for  \r\n" + "Next";
            fw.write(vbs);
            fw.close();
            String path = file.getPath().replace("%20", " ");
            Process p = Runtime.getRuntime
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值