Advertisement
Guest User

Untitled

a guest
Mar 6th, 2015
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.52 KB | None | 0 0
  1. <?php
  2. if(!function_exists('getmicrotime')) {
  3. function getmicrotime() {
  4. list($usec, $sec) = explode(" ", microtime());
  5. return ((float)$usec + (float)$sec);
  6. }
  7. }
  8. function getString(&$packet){
  9. $str = "";
  10. $n = strlen($packet);
  11. for($i=0;($packet[$i]!=chr(0)) && ($i < $n);++$i)
  12. $str .= $packet[$i];
  13. $packet = substr($packet, strlen($str));
  14. return trim($str);
  15. }
  16. function getChar(&$packet){
  17. $char = $packet[0];
  18. $packet = substr($packet, 1);
  19. return $char;
  20. }
  21. function sortByKills($a, $b) {
  22. if ($a['kills'] == $b['kills'])
  23. return 0;
  24. return ($a['kills'] > $b['kills']) ? -1 : 1;
  25. }
  26.  
  27. function serverInfo($server) {
  28. list($ip,$port) = explode(":", $server);
  29. $timeStart = getmicrotime();
  30. $fp = @fsockopen('udp://'.$ip, $port);
  31. if($fp) {
  32. stream_set_timeout($fp, 1);
  33. fwrite($fp,"\xFF\xFF\xFF\xFFTSource Engine Query\0\r");
  34. $temp = fread($fp, 4);
  35. $status = socket_get_status($fp);
  36. if($status['unread_bytes']>0) {
  37. $temp = fread($fp, $status['unread_bytes']);
  38. $version = ord(getChar($temp));
  39. $array = array();
  40. $array['ping'] = (int)((getmicrotime() - $timeStart)*1000);
  41. $array['status'] = "on";
  42.  
  43.  
  44. if($version == 109) {
  45. $array['game'] = "cstrike";
  46. $array['ip'] = getString($temp);
  47. $temp = substr($temp, 1);
  48. $array['name'] = getString($temp);
  49. $temp = substr($temp, 1);
  50. $array['map'] = getString($temp);
  51. $temp = substr($temp, 1);
  52. getString($temp);
  53. $temp = substr($temp, 1);
  54. getString($temp);
  55. $temp = substr($temp, 1);
  56. $array['players'] = ord(getChar($temp));
  57. $array['max_players'] = ord(getChar($temp));
  58.  
  59.  
  60.  
  61. } elseif($version == 73) {
  62. $array['name'] = getString($temp);
  63. $temp = substr($temp, 1);
  64. $array['map'] = getString($temp);
  65. $temp = substr($temp, 1);
  66. $temp = substr($temp, 1);
  67. getString($temp);
  68. $temp = substr($temp, 1);
  69. getString($temp);
  70. $temp = substr($temp, 3);
  71. $array['players'] = ord(getChar($temp));
  72. $array['max_players'] = ord(getChar($temp));
  73. }
  74. } else
  75. $array['status'] = 'off';
  76.  
  77. }
  78. return $array;
  79. if ($array['status']== 'off') continue;
  80.  
  81.  
  82.  
  83. }
  84. function playersInfo($server) {
  85. list($ip,$port) = explode(":", $server);
  86. $array = array();
  87. $fp = @fsockopen('udp://'.$ip, $port);
  88. if($fp) {
  89. stream_set_timeout($fp, 1);
  90. $command = pack("V", -1) . 'W';
  91. fwrite($fp, $command, strlen($command));
  92. $temp = fread($fp, 5);
  93. $lo = (ord($temp[1]) << 8) | ord($temp[0]);
  94. $hi = (ord($temp[3]) << 8) | ord($temp[2]);
  95. $data = "\xFF\xFF\xFF\xFF\x55".pack("V", ($hi << 16) | $lo);
  96. fwrite($fp, $data);
  97. $temp = fread($fp, 4);
  98. $status = socket_get_status($fp);
  99. if($status['unread_bytes']>0) {
  100. echo $status['unread_bytes'];
  101. $temp = fread($fp, $status['unread_bytes']);
  102. while(strlen($temp) > 0) {
  103. $player['name'] = getString($temp);
  104. $temp = substr($temp, 1);
  105. $lo = (ord($temp[1]) << 8) | ord($temp[0]);
  106. $hi = (ord($temp[2]) << 8) | ord($temp[3]);
  107. $player['kills'] = ($hi << 16) | $lo;
  108. $temp = substr($temp, 4);
  109. $f = @unpack("f1float", $temp);
  110. $temp = substr($temp, 4);
  111. $player['time'] = gmdate("H:i:s", (int)$f['float']);
  112. $array[] = $player;
  113. }
  114. usort($array, "sortByKills");
  115. }
  116. }
  117. return $array;
  118. }
  119. /*
  120. function getlistservers(){
  121. $sql = "SELECT adress
  122. FROM amx_servers";
  123. $result = mysql_query($sql);
  124. dbquery("SELECT adress FROM amx_servers");
  125. if (mysql_num_rows($result) == 0) {
  126. echo "No Servers";
  127. exit;
  128. }
  129.  
  130. if (mysql_error()!=='') return mysql_error
  131. $result=array();
  132. while ($row=dbarray(adress)) $result[]=$row;
  133. // или $result[$row['adress']]=$row так красивее
  134.  
  135. return $result
  136. }
  137. */
  138. print_r(serverInfo("ip:port"));
  139. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement