KMS 服务器的配置与使用

2017年11月4日 3.79k 次阅读 2 条评论

知识科普

vlmcsd 是由 C 语言编写的一款 KMS 模拟器,它可以运行在几乎任何系统中,比如:Linux、Android、FreeBSD、Solaris、Minix、Mac OS、iOS、Windows。

战前准备

  • 一台 CentOS 7 64位的服务器(这里是因为我只有这个设备所以用这个为例子)
  • 服务器需要放通 KMS 默认的 TCP 1688 端口
  • vlmcsd 源文件:https://github.com/Wind4/vlmcsd
  • 充满智慧的大脑  :razz:

战斗开始

1、根据使用的设备选择相应的程序,这里我使用的 CentOS 7 64位服务器,所以找到 binaries\Linux\intel\glibc 目录中的 vlmcsd-x64-glibc

注意:这里的 x86 和 x64 一定要根据机器的配置来选择。

2、将 vlmcsd-x64-glibc 上传到机器的 /data 目录下,并改名为 vlmcsd ,再使用下面命令给 vlmcsd 加执行权限,然后尝试执行。

chmod u+x vlmcsd
./vlmcsd

提示:如果执行 vlmcsd 显示类似下面的结果,那么 1688 端口可能被占用:

[root@hufflepuff ~]# ./vlmcsd
Warning: [::]:1688: Address already in use
Warning: 0.0.0.0:1688: Address already in use
Fatal: Could not listen on any socket.

3、使用 ps 命令来查看执行的进程,命令如下:

ps aux|grep vlmcsd

如果显示类似下面的结果,即为正常运行:

[root@hufflepuff ~]# ps aux|grep vlmcsd
root     16336  0.0  0.0   8624   120 ?        Ss   11:01   0:00 ./vlmcsd
root     16390  0.0  0.0 112660   976 pts/0    R+   11:03   0:00 grep --color=auto vlmcsd

4、将 vlmcsd 添加到开机启动并记录相关日志,使用到的命令如下:

echo "/data/vlmcsd -l /var/log/vlmcsd.log > /dev/null 2>&1" >> /etc/rc.local  
chmod +x /etc/rc.local

注意:/data/vlmcsd 为 vlmcsd 的位置,/var/log/vlmcsd.log 为日志保存的位置。

5、至此 vlmcsd 已经搭建完成,重启服务器测试一下 vlmcsd 进程是否启动即可。

分享战果

1、如果在 Windows 环境下可以使用客户端测试,在 binaries\Windows\intel 目录找到 vlmcs-Windows-x64.exe 文件,将其拖到 CDM 命令行中,并添加以下命令测试:

-v -l 1 kms.vtrois.com

注意:-v 是输出详细信息,-l 1 表示发送 Windows 10 Enterprise G 的激活请求,kms.vtrois.com 是我搭建好的 KMS 服务器绑定的网址。

如果返回类似下面内容,则表示 KMS 服务器搭建成功:

Request Parameters
==================

Protocol version                : 6.0
Client is a virtual machine     : No
Licensing status                : 2 (OOB grace)
Remaining time (0 = forever)    : 43200 minutes
Application ID                  : 55c92734-d682-4d71-983e-d6ec3f16059f (Windows)
SKU ID (aka Activation ID)      : e0b2d383-d112-413f-8a80-97f373a5820c (Windows 10 Enterprise G)
KMS ID (aka KMS counted ID)     : 7ba0bf23-d0f5-4072-91d9-d55af5a481b6 (Windows 10 China Government)
Client machine ID               : b979c2cb-3a81-45fc-b38a-995556160dd7
Previous client machine ID      : 00000000-0000-0000-0000-000000000000
Client request timestamp (UTC)  : 2017-11-04 03:25:27
Workstation name                : www.amazon.org
N count policy (minimum clients): 25

Connecting to kms.vtrois.com:1688 ... successful

Performing RPC bind ...
... NDR64 ... BTFN ... NDR32 ... successful
Sending activation request (KMS V6) 1 of 1

Response from KMS server
========================

Size of KMS Response            : 260 (0x104)
Protocol version                : 6.0
KMS host extended PID           : 05426-03858-014-927327-03-1068-9200.0000-3502016
KMS host Hardware ID            : 3A1C049600B60076
Client machine ID               : b979c2cb-3a81-45fc-b38a-995556160dd7
Client request timestamp (UTC)  : 2017-11-04 03:25:27
KMS host current active clients : 50
Renewal interval policy         : 10080
Activation interval policy      : 120

如果搭建失败,将会提示类似下面的信息:

Connecting to kms.vtrois.com:1688 ... kms.vtrois.com:1688: 由于目标计算机积极拒绝,无法连接。
Fatal: Could not connect to any KMS server

2、使用 KMS 服务器一键激活,使用管理员模式命令提示符(可以右击左下角徽标找到)执行下面的命令即可自动激活:

slmgr /skms kms.vtrois.com
slmgr /ato

如果无法自动激活,需要首先到微软官网 KMS Client Setup Keys 获取对应版本的 KEY,然后执行下面命令激活:

slmgr /skms kms.vtrois.com
slmgr /ipk xxxxx-xxxxx-xxxxx-xxxxx
slmgr /ato

注意:xxxxx-xxxxx-xxxxx-xxxxx 是在微软官网获取的 KEY ,如果微软官网没有找到要激活的版本,那么 KMS 服务器将无法激活该版本,如果提示 0x80070005 错误,那么是由于命令不是在 管理员模式命令提示符 下运行导致,kms.vtrois.com 是我搭建好的 KMS 服务器绑定的网址。

如果不知道自己的系统是什么版本,可以使用以下命令查看:

wmic os get caption

3、为了方便激活,我这边准备了一个一键激活的批处理工具,只要保存下面的代码为 activate.bat 并以管理员身份运行即可:

@echo off

ver > C:\ver.txt
findstr "6." C:\ver.txt >nul
if %ERRORLEVEL% == 0 (
    cscript /nologo %windir%/system32/slmgr.vbs -skms kms.vtrois.com:1688
    sc query w32time | findstr RUNNING >null
    if %ERRORLEVEL% == 0 ( net start w32time )
    w32tm /config /syncfromflags:manual /manualpeerlist:"ntp.vtrois.com"
    net stop w32time
    net start w32time
    for /l %%i in (1,1,10) do (
      w32tm /resync | findstr successfully >null
      if %ERRORLEVEL% == 1 ( goto _break ) else ( C:\Windows\system32\timeout.exe /t 1 /nobreak >null )
      cscript /nologo %windir%/system32/slmgr.vbs -ato
      if %ERRORLEVEL% == 0 ( goto _break )
    )
)
:_break
del C:\ver.txt

注意:这个批处理中有一个时间同步的功能,如果时间不同步,可能导致激活失败。

Vtrois

没有天生的高手,更没有永远的菜鸟!

  1. 信球哥说道:

    KMS大神,路过mark下,有用 :wink: :cool:

  2. 神无月说道:

    完美! :lol:

发表评论

在发表评论前请确认您的言论中没有违反中国各项法律、法规和违背社会道德的内容。任何无意义的留言内容都会被直接删除。