Obtendo Informações de Servidores Usando PHP

Obtendo Informações de Servidores Usando PHP

Requerimentos:

  • Noções básicas de PHP
  • Webserver com suporte a PHP 4.x.x ou superior

Tipos de servidores suportados:

  • Counter-Strike 1.6
  • Half-Life 1

1)  Introdução

  • Será necessário a utilização do protocolo UDP para receber os dados do servidor, devido o sistema do game Half-Life.
  • A primeira coisa a fazer é nos conectar no servidor, no exemplo usaremos o ip:porta 127.0.0.1:27015.

2)   Montando o Script para abrir e pegar conteúdo.

  • Para chamar uma conexão utilizado PHP, usaremos a funcão fsockopen()
<?php
$ServerIP = "127.0.0.1";// IP doServidor
$ServerPort = "27015";// Porta do Servidor
$ServerinfoCommand = "\377\377\377\377infostring";// Variavel que determina qual Query a ser enviada para o servidor
$fp = fsockopen("udp://".$ServerIP, $ServerPort, $errno, $errstr);// Abrindo a conexão com o servidor
fwrite($fp, $ServerinfoCommand);//Enviando a Query para o servidor
$JunkHead = fread($fp,24);//Removendo os Headers iniciais inuteis
$CheckStatus = socket_get_status($fp);// Rotina para checar se o servidor está rodando
 if($CheckStatus["unread_bytes"] == 0)
{
die("Não foi possível estabelecer conexão, verifique se o servidor encontra-se online.");
}
// Obtendo as informações que chegarem
$do = 1;
$HLServerStats= "";
while($do)
 {
$str = fread($fp,1);
$HLServerStats.= $str;
$status = socket_get_status($fp);
if($status["unread_bytes"] == 0) {$do = 0;}
}

//Fechando a conexão
fclose($fp);
?>

O código acima, enviará a Query \377\377\377\377infostring para o servidor com a função fwrite() e em seguida criamos um while loop para pegar todo o conteúdo e o colocarmos na variavel $HLServerStats

Para uma lista detalhada de todas as Querys de sistem Half-life acesse http://dev.kquery.com/index.php?article=31

3) Montando o Script para retornar o conteúdo obtido

– Agora que nós já temos as informações desejadas, podemos criar um script para facilitar o seu retorno, simplificando na hora de colocar em um servidor web. Vamos dividir a variavel $HLServerStats colocando seu conteúdo em Arrays de uma forma mais organizada.

<?php
// Separando o conteúdo em Arrays
$HLServerStats = explode("\\", $HLServerStats);
// Contando a quantidade de arrays
$count = count($HLServerStats);
// O resultado da quantidade precisa ser um número par
if($count % 2 == 0)
{
// "Loopamos" o conteúdo através dos arrays e em seguida o colocamos em uma variavel chamada $ServerData
$i = 0;
while($count != $i)
{
$ServerData[$HLServerStats[$i]] = $HLServerStats[$i+1];
$i = $i + 2;
   }
 }
?>

4) Informações adquiridas

– Pronto, agora que já temos a variavel, podemos usa-la de forma organizada.

Estas são as palavras-chaves obtidas, cada uma retorna o seu devido valor:

protocol – Versão do Protocolo de rede (atualmente 47)
address – Endereço IP do Servidor
players – Número de jogadores atualmente no servidor.
proxytarget – Este servidor possue proxy HLTV? 1 = Sim, 0 = Não
lan – Este servidor corre em LAN? 1 = Sim, 0 = Não
max – Número máximo de jogadores que podem jogar
bots – Número de Bots em jogo
gamedir – Diretório do Mod (Ex: tfc)
description – Nome do Mod (Ex: Counter-Strike)
hostname – Nome do Servidor
map – Mapa atual que está em jogo
type – Tipo do servidor. d = dedicado, l = listen.
password – O Servidor possue senha? 1 = Sim, 0 = Não
os – Sistema Operacional do servidor. w = Windows, l = Linux.
secure – Modo seguro VAC ativo? 1 = Sim, 0 = Não

Para mostrar via Web um determinado conteúdo, utilize este exemplo:

<? echo $ServerData['PALAVRA-CHAVE']; ?>

Depois é só personalizar a seu gosto, insira Código HTML a vontade ou qualquer outra coisa.
Salve o arquivo com um nome qualquer.php, e pronto!
Este script é útil para sites de games, por exemplo, mostrar as estatísticas de um servidor pertencente a algum Clã, bastante simples e sem complicações.

Gostou?
Comentem!

Anúncios

#php