Цитата:
Сообщение от Aleksey
Не, в плане защиты порта - тут даже ssh туннель подойдет и закрытый телнет извне. Где раздобыть команды для телнета?
|
Aleksey, могу попробовать вспомнить это, но насколько я помню это отдача команд ядру точно такая же будто Вы в игре находитесь и командуете с игрового интерфейса. То есть можете рестарт делать, банить с выкидыванием из игры, добавлять итемы, даже если чар онлайн. Ну вообщем все как будто в игре Вы. Помоему он точно такие же команды просто ядру передает.
Вот из стрессвеба файл который рулит телнетом, я пользовался этой опцией в SW и она работала, судя по коду команды такие же как Вы из игры отдаете будучи там админом.
Код:
<?php
if ( !defined("STRESSWEB") )
die( "Access denied..." );
if ( !$controller->isAdmin() ) {
$controller->redirect( "index.php" );
}
$_action = isset( $_REQUEST["action"] ) ? $controller->SafeData( $_REQUEST["action"], 3 ):"";
function Telnet( $sendmsg )
{
global $l2cfg, $sid;
if ( $telnet = @fsockopen($l2cfg["gs"][$sid]["host"], $l2cfg["gs"][$sid]["telnet"]["port"], $errno, $errstr, $l2cfg["gs"][$sid]["telnet"]["timeout"]) ) {
fputs( $telnet, $l2cfg["gs"][$sid]["telnet"]["pass"] );
fputs( $telnet, "\r\n" );
if ( !empty($l2cfg["gs"][$sid]["telnet"]["gmname"]) ) {
fputs( $telnet, $l2cfg["gs"][$sid]["telnet"]["gmname"] );
fputs( $telnet, "\r\n" );
}
fputs( $telnet, $sendmsg );
fputs( $telnet, "\r\nexit\r\n" );
if ( $telnet ) {
fclose( $telnet );
$echo = "<fieldset><legend>OK</legend>\n";
$echo .= "<div class='warning'> Комманда успешно отправлена.</div>\n";
$echo .= "</fieldset><br>\n";
} else {
$echo = "<fieldset><legend>Error</legend>\n";
$echo .= "<div class='warning'> Ошибка при отправке команды (возможно неверный пароль).</div>\n";
$echo .= "</fieldset><br>\n";
}
} else {
$echo = "<fieldset><legend>Error</legend>\n";
$echo .= "<div class='warning'> Невозможно подключиться к серверу через Telnet {$l2cfg["gs"][$sid]["host"]}:{$l2cfg["gs"][$sid]["telnet"]["port"]}</div>";
$echo .= "</fieldset><br>\n";
}
return $echo;
}
$telnet_msg = "";
if ( empty($l2cfg["gs"][$sid]["host"]) ) {
$telnet_msg = "<fieldset><legend>Ошибка</legend>\n";
$telnet_msg .= "<div class='warning'> Не задан адрес telnet сервера</div>";
$telnet_msg .= "</fieldset>\n";
} else {
if ( isset($_action) ) {
if ( $_action == "announce" ) {
$telnet_msg = Telnet( "announce ".$_REQUEST["msg"] );
} elseif ( $_action == "msg" ) {
$telnet_msg = Telnet( "msg ".$_REQUEST["nick"]." ".iconv("UTF8", "UTF-8", $_REQUEST["msg"]) );
} elseif ( $_action == "kick" ) {
$telnet_msg = Telnet( "kick ".$_REQUEST["nick"] );
} elseif ( $_action == "restart" ) {
$telnet_msg = Telnet( "restart ".$_REQUEST["time"] );
} elseif ( $_action == "shutdown" ) {
$telnet_msg = Telnet( "shutdown ".$_REQUEST["time"] );
} elseif ( !empty($_action) ) {
$telnet_msg .= "<fieldset><legend>Error</legend>\n";
$telnet_msg .= "<div class='warning'> Неизвестная комманда</div>\n";
$telnet_msg .= "</fieldset><br>\n";
}
}
}
$select_server = $controller->select( "sid", $gsListTitles , $sid, 'style="width: 100px;" onchange="javascript: document.sid.submit(); return false;"' );
$telnet_content = <<< HTML
<br /><table width="100%" border='0' cellpadding='0' cellspacing='0' style="border: 1px solid #AAA;" class='shadow'>
<tr>
<td bgcolor="#EEEFEF" height="29" style="padding-right:10px; color: #888;" align="right" valign="middle">
<form action="" method="GET" id="sid" name="sid">
<input type="hidden" name="mod" value="telnet">
Сервер: {$select_server}
</form>
</td>
</tr>
</table><br />
<table width="100%" cellpadding='0' cellspacing='0' class='shadow'>
<tr>
<td bgcolor="#DDEFEF" height="29" style="padding-left:10px; color: #888; border: 1px solid #AAA;">
<a href="javascript:ChangeOption('divAnnounce');"> »Announce</a>
<a href="javascript:ChangeOption('divMsg');"> »ПМ</a>
<a href="javascript:ChangeOption('divKick');"> »Kick</a>
<a href="javascript:ChangeOption('divRestart');"> »Рестарт сервера</a>
<a href="javascript:ChangeOption('divShutdown');"> »Выключение сервера</a>
</td>
</tr>
<tr>
<td style="padding:5px;" bgcolor="#FFFFFF">
{$telnet_msg}
<div id="dle_tabView1">
<div id="divAnnounce" style="" >
<form action='{$_url}=telnet&action=announce&sid={$sid}' method='POST'>
<b>Сообщение</b> <input type='text' name='msg'> <br />
<input type='submit' value='Отправить' class='swbutton2 aleft'>
</form>
</div>
<div id="divMsg" style="display:none" >
<form action='{$_url}=telnet&action=msg&sid={$sid}' method='POST'>
<b>Ник игрока</b> <input type='text' name='nick'> <br /><br />
<b>Сообщение</b> <input type='text' name='msg'> <br />
<input type='submit' value='Отправить' class='swbutton2 aleft'>
</form>
</div>
<div id="divKick" style="display:none" >
<form action='{$_url}=telnet&action=kick&sid={$sid}' method='POST'>
<b>Ник игрока</b> <input type='text' name='nick'> <br />
<input type='submit' value='Отправить' class='swbutton2 aleft'>
</form>
</div>
<div id="divRestart" style="display:none" >
<form action='{$_url}=telnet&action=restart&sid={$sid}' method='POST'>
<b>Время до рестарта</b> (сек) <input type='text' name='time' size='16'> <br />
<input type='submit' value='Отправить' class='swbutton2 aleft'>
</form>
</div>
<div id="divShutdown" style="display:none" >
<form action='{$_url}=telnet&action=shutdown&sid={$sid}' method='POST'>
<b>Время до выключения</b> (сек) <input type='text' name='time' size='16'> <br />
<input type='submit' value='Отправить' class='swbutton2 aleft'>
</form>
</div>
</div>
</td>
</tr>
</table>
<script type="text/javascript">
function ChangeOption(selectedOption)
{
document.getElementById('divAnnounce').style.display = "none";
document.getElementById('divMsg').style.display = "none";
document.getElementById('divKick').style.display = "none";
document.getElementById('divRestart').style.display = "none";
document.getElementById('divShutdown').style.display = "none";
if(selectedOption == 'divAnnounce') {document.getElementById('divAnnounce').style.display = "";}
if(selectedOption == 'divMsg') {document.getElementById('divMsg').style.display = "";}
if(selectedOption == 'divKick') {document.getElementById('divKick').style.display = "";}
if(selectedOption == 'divRestart') {document.getElementById('divRestart').style.display = "";}
if(selectedOption == 'divShutdown') {document.getElementById('divShutdown').style.display = "";}
}
</script>
HTML;
$tpl->SetResult( "content", $telnet_content );
?>