Guest User

Send Console Command PHP

a guest
Jan 10th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.68 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4. * Return a byte and split it out of the string
  5. *  - unsigned char
  6. *
  7. * @param string    $string String
  8. */
  9.  
  10. function getByte(&$string) {
  11.     $data = substr($string, 0, 1);
  12.    
  13.     $string = substr($string, 1);
  14.    
  15.     $data = unpack('Cvalue', $data);
  16.    
  17.     return $data['value'];
  18. }
  19.  
  20. /**
  21. * Return an unsigned short and split it out of the string
  22. *  - unsigned short (16 bit, big endian byte order)
  23. *
  24. * @param string    $string String
  25. */
  26.  
  27. function getShortUnsigned(&$string) {
  28.     $data = substr($string, 0, 2);
  29.    
  30.     $string = substr($string, 2);
  31.    
  32.     $data = unpack('nvalue', $data);
  33.    
  34.     return $data['value'];
  35. }
  36.  
  37. /**
  38. * Return a signed short and split it out of the string
  39. *  - signed short (16 bit, machine byte order)
  40. *
  41. * @param string    $string String
  42. */
  43.  
  44. function getShortSigned(&$string) {
  45.     $data = substr($string, 0, 2);
  46.    
  47.     $string = substr($string, 2);
  48.    
  49.     $data = unpack('svalue', $data);
  50.    
  51.     return $data['value'];
  52. }
  53.  
  54. /**
  55. * Return a long and split it out of the string
  56. *  - unsigned long (32 bit, little endian byte order)
  57. *
  58. * @param string    $string String
  59. */
  60.  
  61. function getLong(&$string) {
  62.     $data = substr($string, 0, 4);
  63.    
  64.     $string = substr($string, 4);
  65.    
  66.     $data = unpack('Vvalue', $data);
  67.    
  68.     return $data['value'];
  69. }
  70.  
  71. /**
  72. * Return a float and split it out of the string
  73. *
  74. * @param string    $string String
  75. */
  76.  
  77. function getFloat(&$string) {
  78.     $data = substr($string, 0, 4);
  79.    
  80.     $string = substr($string, 4);
  81.    
  82.     $array = unpack("fvalue", $data);
  83.    
  84.     return $array['value'];
  85. }
  86.  
  87. /**
  88. * Return a string and split it out of the string
  89. *
  90. * @param string    $string String
  91. */
  92.  
  93. function getString(&$string) {
  94.     $data = "";
  95.    
  96.     $byte = substr($string, 0, 1);
  97.    
  98.     $string = substr($string, 1);
  99.    
  100.     while (ord($byte) != "0") {
  101.         $data .= $byte;
  102.         $byte = substr($string, 0, 1);
  103.         $string = substr($string, 1);
  104.     }
  105.    
  106.     return $data;
  107. }
  108. // Constant
  109. define('PACKET_SIZE', '1400');
  110. define('SERVERQUERY_INFO', "\xFF\xFF\xFF\xFFTSource Engine Query");
  111. define ('REPLY_INFO', "\x49");
  112. define('SERVERQUERY_GETCHALLENGE', "\xFF\xFF\xFF\xFF\x57");
  113. define ('REPLY_GETCHALLENGE', "\x41");
  114. define('SERVERDATA_AUTH', 3);
  115. define ('SERVERDATA_EXECCOMMAND', 2);
  116.  
  117. // Ip address and port
  118. $_ip = '123.234.012.234' ; // server ip
  119. $_port = '27015'; // server port
  120. $_password = 'MyP@ssw0rd!' ; // your rcon password
  121. $s2 = '';
  122. $command = 'map tc_hydro'; // the rcon command! Put the command you want here
  123. $requestId = 1;
  124.  
  125. // open connection with server
  126. $socket = fsockopen ('tcp://'.$_ip, $_port, $errno, $errstr, 30);
  127.  
  128. // Send auth packet
  129.  
  130. // Construct packet
  131. $data = pack("VV", $requestId, SERVERDATA_AUTH).$_password.chr(0).$s2.chr(0);
  132.  
  133. // Prefix the packet by its size
  134. $data = pack("V",strlen($data)).$data;
  135.  
  136. // Send packet
  137. fwrite ($socket, $data, strlen($data));
  138. $requestId++ ;
  139.  
  140. // Check if auth is successful
  141. $junk = fread ($socket, PACKET_SIZE);
  142.  
  143. $string = fread ($socket, PACKET_SIZE);
  144. $size = getLong($string);
  145. $id = getLong ($string);
  146.  
  147. if($id == -1) {
  148.     // Error
  149.     die('Auth failed: bad password !');
  150. }
  151.  
  152. // Sending the command and getting the answer
  153. $data = pack("VV", $requestId, SERVERDATA_EXECCOMMAND).$command.chr(0).$s2.chr(0);
  154.  
  155. // Prefix the packet by its size
  156. $data = pack("V", strlen ($data)).$data;
  157.  
  158. // Send packet
  159. fwrite ($socket, $data, strlen($data));
  160. $requestId++;
  161.  
  162. // Read response
  163. $i = 0;
  164. $text = '';
  165.  
  166. while($string = fread($socket, 4)) {
  167.     $info[$i]['size'] = getLong($string);
  168.     $string = fread($socket, $info[$i]['size']);
  169.     $info[$i]['id'] = getLong ($string);
  170.     $info[$i]['type'] = getLong ($string);
  171.     $info[$i]['s1'] = getString ($string);
  172.     $info[$i]['s2'] = getString ($string);
  173.     $text .= $info[$i]['s1'];
  174.     $i++;
  175. }
  176. ?>
Advertisement
Add Comment
Please, Sign In to add comment