function QueryMinecraft($IP, $Port = 25565, $Timeout = 2)
{
    $Socket = Socket_Create(AF_INET, SOCK_STREAM, SOL_TCP);
    Socket_Set_Option($Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => (int) $Timeout, 'usec' => 0));
    Socket_Set_Option($Socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => (int) $Timeout, 'usec' => 0));
    if ($Socket === FALSE || @Socket_Connect($Socket, $IP, (int) $Port) === FALSE) {
        return FALSE;
    }
    Socket_Send($Socket, "þ", 2, 0);
    $Len = Socket_Recv($Socket, $Data, 512, 0);
    Socket_Close($Socket);
    if ($Len < 4 || $Data[0] !== "ÿ") {
        return FALSE;
    }
    $Data = SubStr($Data, 3);
    // Strip packet header (kick message packet and short length)
    $Data = iconv('UTF-16BE', 'UTF-8', $Data);
    // Are we dealing with Minecraft 1.4+ server?
    if ($Data[1] === "§" && $Data[2] === "1") {
        $Data = Explode("", $Data);
        return array('HostName' => $Data[3], 'Players' => IntVal($Data[4]), 'MaxPlayers' => IntVal($Data[5]), 'Protocol' => IntVal($Data[1]), 'Version' => $Data[2]);
    }
    $Data = Explode("§", $Data);
    return array('HostName' => SubStr($Data[0], 0, -1), 'Players' => isset($Data[1]) ? IntVal($Data[1]) : 0, 'MaxPlayers' => isset($Data[2]) ? IntVal($Data[2]) : 0, 'Protocol' => 0, 'Version' => '1.3');
}
Пример #2
0
 public function Connect()
 {
     $this->Socket = Socket_Create(AF_INET, SOCK_STREAM, SOL_TCP);
     Socket_Set_Option($this->Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => $this->Timeout, 'usec' => 0));
     Socket_Set_Option($this->Socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $this->Timeout, 'usec' => 0));
     if ($this->Socket === FALSE || @Socket_Connect($this->Socket, $this->ServerIP, $this->ServerPort) === FALSE) {
         throw new MinecraftPingException('Failed to connect or create a socket');
     }
 }
function QueryMinecraft($IP, $Port = 25565, $Timeout = 2)
{
    $Socket = Socket_Create(AF_INET, SOCK_STREAM, SOL_TCP);
    Socket_Set_Option($Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => (int) $Timeout, 'usec' => 0));
    if ($Socket === FALSE || @Socket_Connect($Socket, $IP, (int) $Port) === FALSE) {
        return FALSE;
    }
    Socket_Send($Socket, "þ", 1, 0);
    $Len = Socket_Recv($Socket, $Data, 256, 0);
    Socket_Close($Socket);
    if ($Len < 4 || $Data[0] != "ÿ") {
        return FALSE;
    }
    $Data = SubStr($Data, 3);
    $Data = iconv('UTF-16BE', 'UTF-8', $Data);
    $Data = Explode("§", $Data);
    return array('HostName' => SubStr($Data[0], 0, -1), 'Players' => isset($Data[1]) ? IntVal($Data[1]) : 0, 'MaxPlayers' => isset($Data[2]) ? IntVal($Data[2]) : 0);
}
Пример #4
0
 function QueryMinecraft($IP, $Port)
 {
     $Socket = Socket_Create(AF_INET, SOCK_STREAM, SOL_TCP);
     Socket_Set_Option($Socket, SOL_SOCKET, SO_SNDTIMEO, array('sec' => 2, 'usec' => 0));
     Socket_Set_Option($Socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 2, 'usec' => 0));
     if ($Socket === FALSE || @Socket_Connect($Socket, $IP, (int) $Port) === FALSE) {
         return FALSE;
     }
     Socket_Send($Socket, "�", 2, 0);
     $Len = Socket_Recv($Socket, $Data, 512, 0);
     Socket_Close($Socket);
     if ($Len < 4 || $Data[0] !== "�") {
         return FALSE;
     }
     $Data = SubStr($Data, 3);
     $Data = iconv('UTF-16BE', 'UTF-8', $Data);
     if ($Data[1] === "�" && $Data[2] === "1") {
         $Data = Explode("", $Data);
         return array('HostName' => $Data[3], 'Players' => IntVal($Data[4]), 'MaxPlayers' => IntVal($Data[5]), 'Protocol' => IntVal($Data[1]), 'Version' => $Data[2]);
     }
     $Data = Explode("�", $Data);
     return array('HostName' => SubStr($Data[0], 0, -1), 'Players' => isset($Data[1]) ? IntVal($Data[1]) : 0, 'MaxPlayers' => isset($Data[2]) ? IntVal($Data[2]) : 0, 'Protocol' => 0, 'Version' => '1.3');
 }