从TCP包输出Minecraft服务器信息


Output Minecraft Server Info from TCP packages

我在一个德国论坛上发现了这个工作代码:

<?php
    $fp = fsockopen('176.9.59.135', 25565, $errno, $errstr, 4) or die('Verbindung fehlgeschlagen!');
    fwrite($fp, "'xFE");
    $answer = fread($fp, 256);
    if ($answer[0] != "'xFF") {
       die ('Anfrage fehlgeschlagen!');
    }
    $text = substr($answer, 3);
    $text = mb_convert_encoding($text, 'auto', 'UCS-2');
    $parts = explode("'xA7", $text);
?>
<?php echo $parts[0] . ' (' . $parts[1] . '/' . $parts[2] . ')'; ?>

结果显示有多少玩家在线。我想知道3、4和5行发生了什么:

 fwrite($fp, "'xFE");
 $answer = fread($fp, 256);
 if ($answer[0] != "'xFF") {

我在哪里知道我需要把什么写进插座(比如第3行)?我用wireshark嗅探了包含所有信息的结果包。。。如何才能像Wireshark一样回声数据?

当您调用fwrite()时,您正在向处理程序写入一些内容。在这种情况下,您正在向连接到服务器的套接字进行写入。xFE是十六进制的FE值(十进制为254)。

然后你打电话给fread()。这将读取与处理程序关联的响应。在这种情况下,您正在读取服务器的响应数据。

if ($answer[0] != "'xFF") {
  die ('Anfrage fehlgeschlagen!');
}

此代码检查服务器响应数据的第一个字节是否不是FF(十进制255)。例如,如果服务器发送0F,则该过程结束(die())

我不熟悉Minecraft Server的状态,但我的建议是检查这个类是否有效。该代码已记录在案。