?php
function source_query($ip)
{
//set timeout in ms
$timeout = "1";
$cut = explode(":", $ip);
$HL2_address = $cut[0];
$HL2_port = $cut[1];
$HL2_command = "\377\377\377\377TSource Engine Query\0";
$HL2_socket = fsockopen("udp://" . $HL2_address, $HL2_port, $errno, $errstr, 3);
fwrite($HL2_socket, $HL2_command);
socket_set_timeout($HL2_socket,$timeout);
$JunkHead = fread($HL2_socket, 4);
$CheckStatus = socket_get_status($HL2_socket);
//print_r($CheckStatus);
if ($CheckStatus["unread_bytes"] == 0)
return 0;
if ($CheckStatus['timed_out'] == 1) {
return 0;
}
$do = 1;
while ($do) {
$str = fread($HL2_socket, 1);
$HL2_stats .= $str;
$status = socket_get_status($HL2_socket);
if ($status["unread_bytes"] == 0) {
$do = 0;
}
}
fclose($HL2_socket);
$x = 0;
while ($x <= strlen($HL2_stats)) {
$x++;
$result .= substr($HL2_stats, $x, 1);
}
// ord ( string $string );
$result = str_split($result);
$info['network'] = ord($result[0]);
$char = 1;
while (ord($result[$char]) != "") {
$info['name'] .= $result[$char];
$char++;
}
$char++;
while (ord($result[$char]) != "") {
$info['map'] .= $result[$char];
$char++;
}
$char++;
while (ord($result[$char]) != "") {
$info['dir'] .= $result[$char];
$char++;
}
$char++;
while (ord($result[$char]) != "") {
$info['description'] .= $result[$char];
$char++;
}
$char++;
$info['appid'] = ord($result[$char] . $result[($char + 1)]);
$char += 2;
$info['players'] = ord($result[$char]);
$char++;
$info['max'] = ord($result[$char]);
$char++;
$info['bots'] = ord($result[$char]);
$char++;
$info['dedicated'] = ord($result[$char]);
$char++;
$info['os'] = chr(ord($result[$char]));
$char++;
$info['password'] = ord($result[$char]);
$char++;
$info['secure'] = ord($result[$char]);
$char++;
while (ord($result[$char]) != "") {
$info['version'] .= $result[$char];
$char++;
}
return $info;
}
?
This will allow you to query any source game server like CSS TF2 and GarrysMod for it's information like players, map, OS and many more from a webpage.
No comments:
Post a Comment