mirror of https://github.com/dnomd343/kms-server
Dnomd343
2 years ago
1 changed files with 57 additions and 0 deletions
@ -0,0 +1,57 @@ |
|||
<?php |
|||
|
|||
enum VlmcsResult { |
|||
case OK; // target server works fine |
|||
case NOT_KMS; // target not a kms server |
|||
case UNREACHED; // target not reachable |
|||
case ERROR; // something error |
|||
} |
|||
|
|||
/** |
|||
* Run a program and capture its stdout. |
|||
* |
|||
* @throws Exception |
|||
*/ |
|||
function runProcess(array $command): string { |
|||
$desc = array( |
|||
0 => ['pipe', 'r'], // stdin |
|||
1 => ['pipe', 'w'], // stdout |
|||
2 => ['pipe', 'w'], // stderr |
|||
); |
|||
$process = proc_open($command, $desc, $pipes, null, array()); // start process |
|||
if (!is_resource($process)) { |
|||
throw new Exception('process running failed'); |
|||
} |
|||
while(proc_get_status($process)['running']) { // wait process exit |
|||
usleep(50); // delay 50ms |
|||
} |
|||
return stream_get_contents($pipes[1]); // fetch stdout |
|||
} |
|||
|
|||
function vlmcsCheck(string $host, int $port): VlmcsResult { |
|||
$host = str_contains($host, ':') ? "[$host]" : $host; // ipv6 host add bracket |
|||
try { |
|||
$content = runProcess(['vlmcs', $host . ':' . $port]); |
|||
} catch (Exception) { |
|||
return VlmcsResult::ERROR; |
|||
} |
|||
|
|||
preg_match_all('/Sending activation request \(KMS V6\)/', $content, $match); |
|||
if (count($match[0]) != 0) { |
|||
return VlmcsResult::OK; // kms server works fine |
|||
} |
|||
preg_match_all('/Connecting to .* successful/', $content, $match); |
|||
if (count($match[0]) != 0) { |
|||
return VlmcsResult::NOT_KMS; // server connected but not working |
|||
} else { |
|||
return VlmcsResult::UNREACHED; // kms server connect failed |
|||
} |
|||
} |
|||
|
|||
//$t = vlmcsCheck('1.1.1.1', 1688); |
|||
//$t = vlmcsCheck('kms.343.re', 1688); |
|||
$t = vlmcsCheck('8.210.148.24', 1688); |
|||
$t = vlmcsCheck('8.210.148.24', 1689); |
|||
//$t = vlmcsCheck('0.0.0.0.', 1688); |
|||
//$t = vlmcsCheck('baidu.com', 1688); |
|||
var_dump($t); |
Loading…
Reference in new issue