PageRenderTime 33ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/rcon.php

https://github.com/omgneeq/DayZAdmin
PHP | 121 lines | 98 code | 17 blank | 6 comment | 9 complexity | 0512d402269fdfceb127aaf53e71aeda MD5 | raw file
  1. <?
  2. if (isset($_SESSION['user_id']))
  3. {
  4. function strToHex($string)
  5. {
  6. $hex='';
  7. for ($i=0; $i < strlen($string); $i++)
  8. {
  9. $hex .= dechex(ord($string[$i]));
  10. }
  11. return $hex;
  12. }
  13. function hexToStr($hex)
  14. {
  15. $string='';
  16. for ($i=0; $i < strlen($hex)-1; $i+=2)
  17. {
  18. $string .= chr(hexdec($hex[$i].$hex[$i+1]));
  19. }
  20. return $string;
  21. }
  22. function computeUnsignedCRC32($str){
  23. sscanf(crc32($str), "%u", $var);
  24. $var = dechex($var + 0);
  25. return $var;
  26. }
  27. function dec_to_hex($dec)
  28. {
  29. $sign = ""; // suppress errors
  30. $h = null;
  31. if( $dec < 0){ $sign = "-"; $dec = abs($dec); }
  32. $hex = Array( 0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5,
  33. 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 'a',
  34. 11 => 'b', 12 => 'c', 13 => 'd', 14 => 'e',
  35. 15 => 'f' );
  36. do
  37. {
  38. $h = $hex[($dec%16)] . $h;
  39. $dec /= 16;
  40. }
  41. while( $dec >= 1 );
  42. return $sign . $h;
  43. }
  44. function get_checksum($cs)
  45. {
  46. $var = computeUnsignedCRC32($cs);
  47. //echo "crchex: ".$var."<br/>";
  48. $x = ('0x');
  49. $a = substr($var, 0, 2);
  50. $a = $x.$a;
  51. $b = substr($var, 2, 2);
  52. $b = $x.$b;
  53. $c = substr($var, 4, 2);
  54. $c = $x.$c;
  55. $d = substr($var, 6, 2);
  56. $d = $x.$d;
  57. return chr($d).chr($c).chr($b).chr($a);
  58. }
  59. function rcon($serverip,$serverport,$rconpassword,$cmd){
  60. $passhead = chr(0xFF).chr(0x00);
  61. $head = chr(0x42).chr(0x45);
  62. $pass = $passhead.$rconpassword;
  63. $answer = "";
  64. $checksum = get_checksum($pass);
  65. $loginmsg = $head.$checksum.$pass;
  66. $rcon = fsockopen("udp://".$serverip, $serverport, $errno, $errstr, 1);
  67. stream_set_timeout($rcon, 1);
  68. if (!$rcon) {
  69. echo "ERROR: $errno - $errstr<br />\n";
  70. } else {
  71. fwrite($rcon, $loginmsg);
  72. $res = fread($rcon, 16);
  73. $cmdhead = chr(0xFF).chr(0x01).chr(0x00);
  74. //$cmd = "Players";
  75. $cmd = $cmdhead.$cmd;
  76. $checksum = get_checksum($cmd);
  77. $cmdmsg = $head.$checksum.$cmd;
  78. $hlen = strlen($head.$checksum.chr(0xFF).chr(0x01));
  79. fwrite($rcon, $cmdmsg);
  80. $answer = fread($rcon, 102400);
  81. if ( strToHex(substr($answer, 9, 1)) == "0"){
  82. $count = strToHex(substr($answer, 10, 1));
  83. //echo $count."<br/>";
  84. for ($i = 0; $i < $count-1; $i++){
  85. $answer .= fread($rcon, 102400);
  86. }
  87. }
  88. //echo strToHex(substr($answer, 0, 16))."<br/>";
  89. //echo strToHex($answer)."<br/>";
  90. //echo $answer."<br/>";
  91. $cmd = "Exit";
  92. $cmd = $cmdhead.$cmd;
  93. $checksum = get_checksum($cmd);
  94. $cmdmsg = $head.$checksum.$cmd;
  95. fwrite($rcon, $cmdmsg);
  96. }
  97. return $answer;
  98. }
  99. }
  100. else
  101. {
  102. header('Location: index.php');
  103. }
  104. ?>