Помогите со скриптом, мониторинг |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
|
Помогите со скриптом, мониторинг |
m1ku
|
2.12.2013, 6:19
Сообщение
|
|
|
|
|
|
|
kazakh777
|
2.12.2013, 8:51
Сообщение
|
![]() |
|
|
|
|
Droby
|
3.12.2013, 16:26
Сообщение
|
|
|
|
|
|
|
Droby
|
3.12.2013, 16:41
Сообщение
|
|
|
|
|
|
|
Droby
|
3.12.2013, 17:03
Сообщение
|
|
|
как решить?
|
|
|
|
counterstrikec4
|
3.12.2013, 17:42
Сообщение
|
|
|
http://screenshot.su/show.php?img=249ea60b...d44ed3a5f70.jpg ОШИБКА
init.php в студию по пути со скрина |
|
|
|
Droby
|
3.12.2013, 18:13
Сообщение
|
|
|
http://screenshot.su/show.php?img=249ea60b...d44ed3a5f70.jpg ОШИБКА init.php в студию по пути со скрина http://screenshot.su/show.php?img=bf4b78b2...f6f35cfc6b4.jpg Скрытый текст <?php class ServerMon { private static $timeout = 1; private static $servers; private static $imDir; private static $csDir; private static $cssDir; public static function run() { global $tpl, $js_array, $member_id, $metatags, $config; self::$imDir = '/engine/modules/ServerMon/images'; self::$csDir = '/engine/modules/ServerMon/maps/cs'; self::$cssDir = '/engine/modules/ServerMon/maps/css'; self::$servers = @unserialize(file_get_contents(ENGINE_DIR . '/modules/ServerMon/data/servers.php')); if(isset($_POST['getPlayers']) && isset($_POST['server']) && !empty($_POST['server'])){ @header( "Content-type: text/html; charset=utf-8" ); echo '<div id="ServerMonPlayers" title="' . iconv("CP1251", "UTF-8", "Список игроков на сервере ") . htmlentities($_POST['server']) . '">'; echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; $players = self::getPlayers($_POST['server']); if(!is_array($players)) $players = array(); echo '<table width="100%" border="1">'; echo iconv("CP1251", "UTF-8", '<tr><td> №</td><td> Ник</td><td> Килов:</td><td> На сервере:</td></tr>'); foreach($players as $num => $player){ echo '<tr> <td> ' . $num . '</td> <td> ' . htmlspecialchars($player['name'], ENT_NOQUOTES, "UTF-8") . '</td> <td> ' . $player['score'] . '</td> <td> ' . $player['time'] . '</td> </tr>'; } echo '</table></div>'; } elseif(isset($_POST['getSettings']) && isset($_POST['server']) && !empty($_POST['server'])){ @header( "Content-type: text/html; charset=utf-8" ); echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; echo '<div id="ServerMonSettings" title="' . iconv("CP1251", "UTF-8", "Настройки сервера ") . htmlentities($_POST['server']) . '">'; $settings = self::getSettings($_POST['server']); if(!is_array($settings)) $settings = array(); $num = 1; echo '<table width="100%" border="1">'; echo iconv("CP1251", "UTF-8", '<tr><td> №</td><td> Название</td><td> Значение:</td></tr>'); foreach($settings as $setting => $value){ echo '<tr> <td> ' . $num . '</td> <td> ' . htmlspecialchars($setting, ENT_NOQUOTES, "UTF-8") . '</td> <td> ' . htmlspecialchars($value, ENT_NOQUOTES, "UTF-8") . '</td> </tr>'; $num++; } echo '</table></div>'; } elseif(isset($_GET['iframe']) && isset($_GET['server']) && !empty($_GET['server'])){ if(!(bool)preg_match('/[A-Za-z0-9.-_]:[0-9]/', $_GET['server'])){ die('Сервер имеет неверный формат!'); } $serv = explode(':', $_GET['server']); $server = self::getInfo($_GET['server']); if(!$server){ $server['ip'] = $serv[0]; $server['port'] = $serv[1]; $server['offline'] = true; } $monTpl = new dle_template; $monTpl->dir = ENGINE_DIR . '/modules/ServerMon'; $monTpl->load_template('iframe.tpl'); if($server['offline']){ $monTpl->set_block("'\[offline\](.*?)\[/offline\]'si", "\\1"); $monTpl->set_block("'\[online\](.*?)\[/online\]'si", ""); $monTpl->set('{ip}', $server['ip']); $monTpl->set('{port}', $server['port']); $monTpl->set('{image}', self::$imDir . '/offline.png'); $monTpl->compile($server['ip'] . ':' . $server['port']); } else { $monTpl->set_block("'\[offline\](.*?)\[/offline\]'si", ""); $monTpl->set_block("'\[online\](.*?)\[/online\]'si", "\\1"); $image = ($server['game'] == 'cs') ? self::$csDir . DIRECTORY_SEPARATOR . $server['mapname'] . '.jpg' : self::$cssDir . DIRECTORY_SEPARATOR . $server['mapname'] . '.jpg' ; $image = file_exists( ROOT_DIR . $image ) ? $image : self::$imDir . '/noimage.png' ; $monTpl->set('{game}', $server['game']); $monTpl->set('{mapname}', $server['mapname']); $monTpl->set('{image}', $image); $monTpl->set('{hostname}', $server['hostname']); $monTpl->set('{players}', $server['players']); $monTpl->set('{maxplayers}', $server['maxplayers']); $monTpl->set('{ip}', $server['ip']); $monTpl->set('{port}', $server['port']); $monTpl->set('{os}', self::$imDir . '/' . $server['server_os'] . '.png'); $monTpl->compile($server['ip'] . ':' . $server['port']); } echo '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />'; echo $monTpl->result[$server['ip'] . ':' . $server['port']]; die(); } else { $monTpl = new dle_template; $monTpl->dir = ENGINE_DIR . '/modules/ServerMon'; self::$servers = is_array(self::$servers) ? self::$servers : array(); foreach(self::$servers as $server) { $serv = explode(':', $server); $server = self::getInfo($server); if(!$server){ $server['ip'] = $serv[0]; $server['port'] = $serv[1]; $server['offline'] = true; } if(file_exists($monTpl->dir . DIRECTORY_SEPARATOR . $server['ip'] . ':' . $server['port'] . '.tpl')) $monTpl->load_template($server['ip'] . ':' . $server['port'] . '.tpl'); else $monTpl->load_template('block.tpl'); if($server['offline']){ $monTpl->set_block("'\[offline\](.*?)\[/offline\]'si", "\\1"); $monTpl->set_block("'\[online\](.*?)\[/online\]'si", ""); $monTpl->set('{ip}', $server['ip']); $monTpl->set('{port}', $server['port']); $monTpl->set('{image}', self::$imDir . '/offline.png'); $monTpl->compile($server['ip'] . ':' . $server['port']); } else { $monTpl->set_block("'\[offline\](.*?)\[/offline\]'si", ""); $monTpl->set_block("'\[online\](.*?)\[/online\]'si", "\\1"); $image = ($server['game'] == 'cs') ? self::$csDir . DIRECTORY_SEPARATOR . $server['mapname'] . '.jpg' : self::$cssDir . DIRECTORY_SEPARATOR . $server['mapname'] . '.jpg' ; $image = file_exists( ROOT_DIR . $image ) ? $image : self::$imDir . '/noimage.png' ; $monTpl->set('{game}', $server['game']); $monTpl->set('{mapname}', $server['mapname']); $monTpl->set('{image}', $image); $monTpl->set('{hostname}', $server['hostname']); $monTpl->set('{players}', $server['players']); $monTpl->set('{maxplayers}', $server['maxplayers']); $monTpl->set('{ip}', $server['ip']); $monTpl->set('{port}', $server['port']); $monTpl->set('{os}', self::$imDir . '/' . $server['server_os'] . '.png'); $monTpl->compile($server['ip'] . ':' . $server['port']); } $tpl->set('{' . $server['ip'] . ':' . $server['port'] . '}', $monTpl->result[$server['ip'] . ':' . $server['port']]); } if($config['version_id'] < 9.0) { $js_array[] = "engine/modules/ServerMon/js/jq.js"; $metatags .= PHP_EOL . '<link rel="stylesheet" type="text/css" href="/engine/modules/ServerMon/css/jq.css" />'; } $js_array[] = "engine/modules/ServerMon/js/ServerMon.js"; if($member_id['user_group'] == 1) $js_array[] = "engine/modules/ServerMon/js/admin.js"; } } private static function getServer($server) { return explode(':', $server); } private static function getInfo($server) { $data = array(); $server = self::getServer($server); $ip = $server[0]; $port = intval($server[1]); $fp = @fsockopen("udp://$ip", $port, $errno, $errstr, self::$timeout); if (!$fp) { return false; } stream_set_timeout($fp, self::$timeout); stream_set_blocking($fp, true); $challenge = "\xFF\xFF\xFF\xFFTSource Engine Query\x00"; fwrite($fp, $challenge); $buffer = fread($fp, 4096); if (!$buffer) { fclose($fp); return false; } $buffer = trim(substr($buffer, 4)); fclose($fp); if (!trim($buffer)) { return false; } $tmp = explode("\x00", $buffer); $place = strlen($tmp[0] . $tmp[1] . $tmp[2] . $tmp[3] . $tmp[4]) + 5; $version = ord($buffer[$place + 2]); // Network Version if ($version == 47 || $version == 48) { $data['game'] = 'cs'; $data['mapname'] = self::toShow($tmp[2]); $data['hostname'] = self::toShow($tmp[1]); } else { $data['game'] = 'css'; $data['mapname'] = self::toShow($tmp[1]); $data['hostname'] = self::toShow($tmp[0]); } $data['players'] = ord($buffer[$place]); $data['maxplayers'] = ord($buffer[$place + 1]); $data['ip'] = self::toShow($ip); $data['port'] = $port; $data['server_os'] = $buffer[$place + 4]; // W indows or L inux #$data['server_secure'] = ord($tmp[14]); // VAC return $data; } private static function getPlayers($server) { $server = self::getServer($server); $ip = $server[0]; $port = $server[1]; $fp = fsockopen("udp://$ip", $port, $errno, $errstr, self::$timeout); if (!$fp) { return false; } stream_set_timeout($fp, self::$timeout); stream_set_blocking($fp, true); $challenge_code = "\xFF\xFF\xFF\xFF\x55\x00\x00\x00\x00"; fwrite($fp, $challenge_code); $buffer = fread($fp, 4096); if (!trim($buffer)) { fclose($fp); return false; } $challenge_code = substr($buffer, 5, 4); $challenge = "\xFF\xFF\xFF\xFFU" . $challenge_code; fwrite($fp, $challenge); $buffer = fread($fp, 4096); if (!$buffer) { fclose($fp); return false; } $buffer = trim(substr($buffer, 4)); fclose($fp); if (!trim($buffer)) { return false; } $player = array(); $player_number = 0; $position = 2; do { $player_number++; $player[$player_number]['name'] = null; if (!isset($buffer[$position])) { return 'Сервер пуст } $player[$player_number]['id'] = ord($buffer[$position]); $position++; while ($buffer[$position] != "\x00" && $position < strlen($buffer)) { $player[$player_number]['name'] .= $buffer[$position]; $position++; } $player[$player_number]['score'] = (ord($buffer[$position + 1])) + (ord($buffer[$position + 2]) * 256) + (ord($buffer[$position + 3]) * 65536) + (ord($buffer[$position + 4]) * 16777216); if ($player[$player_number]['score'] > 2147483648) $player[$player_number]['score'] -= 4294967296; $time = substr($buffer, $position + 5, 4); if (strlen($time) < 4) { return false; } list(, $time) = unpack("f", $time); $time = mktime(0, 0, $time); $player[$player_number]['time'] = date("H:i:s", $time); $position += 9; } while ($position < strlen($buffer)); return $player; } private static function getSettings($server) { $server = self::getServer($server); $ip = $server[0]; $port = $server[1]; $fp = fsockopen("udp://$ip", $port, $errno, $errstr, self::$timeout); if (!$fp) { return false; } stream_set_timeout($fp, self::$timeout); stream_set_blocking($fp, true); $challenge_code = "\xFF\xFF\xFF\xFF\x56\x00\x00\x00\x00"; fwrite($fp, $challenge_code); $buffer = fread($fp, 4096); if (!trim($buffer)) { fclose($fp); return false; } $challenge_code = substr($buffer, 5, 4); $challenge = "\xFF\xFF\xFF\xFFV" . $challenge_code; fwrite($fp, $challenge); $buffer = fread($fp, 4096); if (!$buffer) { fclose($fp); return false; } $second_packet = fread($fp, 4096); if (strlen($second_packet) > 0) { $reverse_check = dechex(ord($buffer[8])); if ($reverse_check[0] == "1") { $tmp = $buffer; $buffer = $second_packet; $second_packet = $tmp; } $buffer = substr($buffer, 13); $second_packet = substr($second_packet, 9); $buffer = trim($buffer . $second_packet); } else $buffer = trim(substr($buffer, 4)); $setting = array(); $tmp = substr($buffer, 2); $rawdata = explode("\x00", $tmp); for ($i = 1; $i < count($rawdata); $i += 2) { $rawdata[$i] = strtolower($rawdata[$i]); @$setting[$rawdata[$i]] = $rawdata[$i + 1]; } return $setting; } private static function toShow($string){ return htmlentities(iconv("UTF-8", "CP1251//IGNORE", $string), ENT_NOQUOTES, "CP1251"); } } ServerMon::run(); ?>
Отредактировал: Droby, - 3.12.2013, 18:16
|
|
|
|
counterstrikec4
|
3.12.2013, 18:22
Сообщение
|
|
|
ладно дабы не пилить твой мозг, и не терять моё время попробуй:
Этот модуль(Не реклама): http://www.hotstrike.kiev.ua/oformlenie-i-...ya-dle-dle.html
Отредактировал: counterstrikec4, - 3.12.2013, 19:22
|
|
|
|
![]() ![]() |