Рейтинг темы:
  • 1 Голос(ов) - 5 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
[Шара, исходники, BOOMSTARTER] L2jPane - Удобное управление базой сервера
#41
Aleksey Написал:Вот честное слово, я с 10 года вроде админю, но телнет никогда не включал даже. Вообще было бы здорово послушать гуру на тему телнета. Его используют? Помню байка ходила мол лишняя уязвимость, но в те года все было одной большой уязвимостью.

Aleksey, его можно в принципе безопасно использовать. К примеру на фаерволе можно обозначить доступ к порту на котором телнет крутится только для своих хостов.

Я им как то пользовался когда нужно было выкинуть из игры юзеров и забанить их, но при этом у меня не было игрового клиента. В этом случае вещь очень полезная. Итемы насколько помню в онлайн режиме когда игрок в игре можно выдавать.


По сути, имея с собой мобильник с Java можно такой админкой получить отдачу команд ядру сборки, в точности будто я в игре нахожусь и отдаю эти команды в игровом интерфейсе.
Можно сервак ребутнуть, добавить/отобрать итем, забанить+кикнуть, бан чата дать, ну и так далее. Бывают моменты что срочно что то надо сделать, а под боком кроме телефона нет ничего.

К примере если через Вашу админку забанить акк то игрок все равно в игре остается, но не сможет зайти если оффнется. А при наличии телнета его можно кикнуть+бан одновременно. Очень здорово помогает если нет клиента игрового.
Ответ
#42
Alligat0r Написал:Aleksey, его можно в принципе безопасно использовать. К примеру на фаерволе можно обозначить доступ к порту на котором телнет крутится только для своих хостов.

Я им как то пользовался когда нужно было выкинуть из игры юзеров и забанить их, но при этом у меня не было игрового клиента. В этом случае вещь очень полезная. Итемы насколько помню в онлайн режиме когда игрок в игре можно выдавать.

К примере если через Вашу админку забанить акк то игрок все равно в игре остается, но не сможет зайти если оффнется. А при наличии телнета его можно кикнуть+бан одновременно. Очень здорово помогает если нет клиента игрового.

Не, в плане защиты порта - тут даже ssh туннель подойдет и закрытый телнет извне. Где раздобыть команды для телнета?
L2j Pane v1.7 - админка для вашего L2 сервера
Ответ
#43
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'> &nbsp; Комманда успешно отправлена.</div>\n";
            $echo .= "</fieldset><br>\n";
        } else {
            $echo = "<fieldset><legend>Error</legend>\n";
            $echo .= "<div class='warning'> &nbsp; Ошибка при отправке команды (возможно неверный пароль).</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'> &nbsp; Не задан адрес 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'> &nbsp; Неизвестная комманда</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');"> &raquo;Announce</a> &nbsp;
        <a href="javascript:ChangeOption('divMsg');"> &raquo;ПМ</a> &nbsp;
        <a href="javascript:ChangeOption('divKick');"> &raquo;Kick</a> &nbsp;
        <a href="javascript:ChangeOption('divRestart');"> &raquo;Рестарт сервера</a> &nbsp;
        <a href="javascript:ChangeOption('divShutdown');"> &raquo;Выключение сервера</a> &nbsp;
    </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 );
?>
Ответ
#44
Alligat0r Написал:Aleksey, могу попробовать вспомнить это, но насколько я помню это отдача команд ядру точно такая же будто Вы в игре находитесь и командуете с игрового интерфейса. То есть можете рестарт делать, банить с выкидыванием из игры, добавлять итемы, даже если чар онлайн. Ну вообщем все как будто в игре Вы. Помоему он точно такие же команды просто ядру передает.

Спасибо за идею )
Думаю, было бы неплохо дополнить софтину
Кик чара например очень не помешает
L2j Pane v1.7 - админка для вашего L2 сервера
Ответ
#45
Aleksey, могу Вам посоветовать подумать над клиент-серверной реализацией.

Одна из причин - не каждый админ жаждет держать порт 3306 открытый из вне на сервере и ограничивается обычно доступом с домашнего хоста+хоста сервера где стоит веб-обвязка.
Телнет порт открытым держать если честно как то то же немного стремновато. Это же касается и SSH порта.

А вот если отдельно будет серверная версия этой админки висеть на порту с надежной авторизацией то возможности реализации функционала тут очень велики. Серверная софтина могла ты и по телнету со сборкой общаться по локалхосту и делать запросы в MySQL. Можно так же реализовать при бане/кике отдачу операционной системе к примеру команды iptables -I INPUT -p tcp -s xx.xx.xx.xx -j DROP, где xx.xx.xx.xx - IP облокируемого, можно и так xx.xx.xx.xx/24 по целой подсети, если игрок может быстро сменить IP в случае если провайдер по DHCP выдает. Это очень помогает когда кто то в чате сидит и рекламирует сторонние проекты, Вы его баните а он тут же новый акк регит, а способов обойти бан по железу полно. С заходом в исходники сборки можно даже реализовать отдачу сообщений чата в клиентскую часть админки. То есть у Вас очень большие возможности появятся в плане постоянного наращивания функционала данного продукта. Можно конечно параллельно держать Lite версию, без серверной части.
Ответ
#46
Alligat0r Написал:Aleksey, могу Вам посоветовать подумать над клиент-серверной реализацией.

Одна из причин - не каждый админ жаждет держать порт 3306 открытый из вне на сервере и ограничивается обычно доступом с домашнего хоста+хоста сервера где стоит веб-обвязка.
Телнет порт открытым держать если честно как то то же немного стремновато. Это же касается и SSH порта.

А вот если отдельно будет серверная версия этой админки висеть на порту с надежной авторизацией то возможности реализации функционала тут очень велики. Серверная софтина могла ты и по телнету со сборкой общаться по локалхосту и делать запросы в MySQL. Можно так же реализовать при бане/кике отдачу операционной системе к примеру команды iptables -I INPUT -p tcp -s xx.xx.xx.xx -j DROP, где xx.xx.xx.xx - IP облокируемого, можно и так xx.xx.xx.xx/24 по целой подсети, если игрок может быстро сменить IP в случае если провайдер по DHCP выдает. Это очень помогает когда кто то в чате сидит и рекламирует сторонние проекты, Вы его баните а он тут же новый акк регит, а способов обойти бан по железу полно. С заходом в исходники сборки можно даже реализовать отдачу сообщений чата в клиентскую часть админки. То есть у Вас очень большие возможности появятся в плане постоянного наращивания функционала данного продукта. Можно конечно параллельно держать Lite версию, без серверной части.

В своих целях использую порткнокинг к 22 порту.
Кстати реализовано в программе, но в настойки выносить не стал. Я там раньше описсывал, куда что добавить.
А вообще к 22 порту доступ должен быть всегда у админов имхо. Так что пока над серверно-клиентской версией не задумываюсь даже

Добавлено через 6 минут
Нашел чуть про телнет
Почему его не рекомендуют использовать? Допустим при условии, что порт будет закрыт извне?
http://www.l2jserver.com/forum/viewtopic.php?t=18292
L2j Pane v1.7 - админка для вашего L2 сервера
Ответ
#47
Aleksey Написал:Нашел чуть про телнет
Почему его не рекомендуют использовать? Допустим при условии, что порт будет закрыт извне?
http://www.l2jserver.com/forum/viewtopic.php?t=18292

Если честно больше баек про него ходит чем правды. Ломануть по сути нельзя, можно только пароль подобрать брутефорсом, но опять же если он сложный то нереально. Если даже и получат доступ то рулить смогут только игровой сборкой но не сервером. Есть еще отличие в плане безопасности, телнет использует открытый текстовый протокол и если снифером ловить где то на узлах маршрутизации то можно легко снять пароль, но вряд ли операторы связи будут страдать этой фигней. SSH напротив, использеут шифрование при работе.
Ответ
#48
Alligat0r,
Aleksey, telnet не везде есть и обработка команд никак не связана с админ командами (там свои хандлеры). Если уж и использовать телнет, то только, как бинд на локалхост, а до него делать проброс через SSH-тунель.
А вообще, рекомендую отказаться от этого устаревшего... хм... механизма и посмотреть куда-нибудь в сторону написания референс бука по внешнему АПИ сервера <- любой_софт/обвязка/етц.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#49
n3k0nation Написал:Alligat0r,
Aleksey, telnet не везде есть и обработка команд никак не связана с админ командами (там свои хандлеры). Если уж и использовать телнет, то только, как бинд на локалхост, а до него делать проброс через SSH-тунель.
А вообще, рекомендую отказаться от этого устаревшего... хм... механизма и посмотреть куда-нибудь в сторону написания референс бука по внешнему АПИ сервера <- любой_софт/обвязка/етц.

Покормите полезными ссылочками или хотя бы кратким разъяснением - куда копать?
L2j Pane v1.7 - админка для вашего L2 сервера
Ответ
#50
Aleksey Написал:Покормите полезными ссылочками или хотя бы кратким разъяснением - куда копать?

RPC (remote procedure calling). От рав протокола на сокетах, до JSON RPC (что потребует интеграцию веб-сервера в эмуль). Так же, в джаве есть Corba & RMI, но это по большей части ужОс и пережиток прошлого.
Если опишите протокол, экшены на каждую команду и остальные вещи, которые входят в референс бук, то вполне можно будет реализовать для большинства эмуляторов расширение, которое можно будет легко подключитьSmile
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)