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'); }
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); }
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'); }
public function QueryOldPre17() { Socket_Send($this->Socket, "þ", 2, 0); $Len = Socket_Recv($this->Socket, $Data, 512, 0); 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'); }