| 
						
						
						
					 | 
				
				 | 
				
					@ -1,39 +1,38 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					<?php | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					// TODO: site/app | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					function checkKms($config) { // 检测KMS服务器是否可用 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $tempPath = '/var/www/kms-server/backend/'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (isset($config['host'])) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $host = $config['host']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return json_encode(array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { // host参数必选 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'status' => 'error', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'message' => 'host param not exist' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        )); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (isset($config['port'])) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $port = $config['port']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $port = 1688; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $port = 1688; // 默认KMS端口 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (isset($config['version'])) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $version = $config['version']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (isset($config['site']) && $config['site'] !== '') { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $site = $config['site']; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $version = 6; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $site = null; // site参数可选 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $cmd = 'vlmcs '; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (isDomain($host) || isIPv4($host)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $cmd .= $host; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else if (isIPv6($host)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $cmd .= '[' . $host . ']'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $cmd .= '[' . $host . ']'; // IPv6地址需用中括号包围 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return array( // host内容不是 IPv4/IPv6/Domain | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'status' => 'error', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'message' => 'illegal host' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if ($port > 65535 || $port < 0) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if ($port > 65535 || $port < 0) { // 端口不存在 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'status' => 'error', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'message' => 'illegal port' | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -41,24 +40,22 @@ function checkKms($config) { // 检测KMS服务器是否可用 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $cmd .= ':' . $port; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if ($version != 4 && $version != 5 && $version != 6) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'status' => 'error', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'message' => 'illegal version' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $cmd .= ' -' . $version; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if ($site !== null) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        $cmd .= ' -w ' . $site; // 加入site参数 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $raw = shell_exec($cmd); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    preg_match('/successful/', $raw, $match); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $fileName = md5(rand()) . '.txt'; // 生成随机文件名 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $cmd .= ' -G ' . $tempPath . $fileName; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    shell_exec($cmd); // 执行vlmcs测试 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    $raw = shell_exec('ls ' . $tempPath); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    preg_match('/' . $fileName . '/', $raw, $match); // 判断随机文件是否存在 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    header('Content-Type: application/json; charset=utf-8'); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (!count($match)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (!count($match)) { // 随机文件不存在 -> KMS连接错误 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'status' => 'error', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'message' => 'connect fail' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } else { // 随机文件存在 -> KMS测试成功 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        shell_exec('rm -f ' . $tempPath . $fileName); // 删除随机文件 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return array( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'status' => 'ok', | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            'message' => 'success' | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |