Socket - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 16.08.2012, 19:38   #1
Пользователь

Автор темы (Топик Стартер) Socket

Всем доброго времени!

Пожалуйста знатоки подскажите.

Порт 2106 закрыт.
После запуска Login server'a он его открывает.

Я никак не могу понять, "Игровой клиент", он отправляет данные на открытый сокет Login-server'a ?

Или, что там происходит, мне очень хочется это знать.
Пожалуйста объясните...

Как там происходит взаимодействие клиент с login-server'om.
И для чего еще один порт 9014?



И еще пожалуйста, кто-нибудь скажите где в коде происходит обработка кнопки "Войти"?



Прошу помогите пожалуйста! Будьте так сказачна любезны
norton вне форума Ответить с цитированием
Непрочитано 16.08.2012, 19:48   #2
Аватар для linliss
Герой

По умолчанию Re: Socket

реакция на кнопку пойти - обрабатывается в логине, пакет - RequestAuthLogin
порт 9014 используется для связи login<->server
linliss вне форума Ответить с цитированием
Непрочитано 16.08.2012, 20:15   #3
Пользователь

Автор темы (Топик Стартер) Re: Socket

Цитата:
Сообщение от linliss Посмотреть сообщение
реакция на кнопку пойти - обрабатывается в логине, пакет - RequestAuthLogin
порт 9014 используется для связи login<->server
Спасибо, но там оторвано еще куда, то видимо...

Само нажатие ивента так и не увидел, или там не так?)

Объясните как, вообще запутался.

Там столько кода и файлов, это же вообще жесть.

Взял чисто случайно сборку с исходами l2jfrozen.


Кто писал сервер себя не жалел видимо...
А других темболее.


У меня главная проблема, это вот эта, все остальное нет проблем.
Разобрался.

А вот с этими соединениями никак не могу понять.


Прошу можешь поподробнее объяснить!?
norton вне форума Ответить с цитированием
Непрочитано 16.08.2012, 20:42   #4
Аватар для Gubble
Пользователь

По умолчанию Re: Socket

Объяснить могу попробовать йа. Значится, сетевой обмен "клиент-сервер" выглядит примерно следующим образом (в общих чертах, конечно)...

Со стороны клиента: Посылка какого-либо запроса - это почти всегда реакция на какое либо действие пользователя. В общем случае, при нажатии на что-либо, клиент формирует пакет, привязанный к этому "что-либо", заполняя его поля значениями в определенном порядке (это, например, имя аккаунта и хеш от пароля для реквестАутЛогин), шифрует и кидает "на шину". Естественно, при таком раскладе, никаких эвентов нажатий (боже мой, делфи, что ли?) вы не найдете, поскольку исходников клиентской части у вас банально нет.

Зато у вас имеются исходники серверной части. И вот тут уже всё несколько более прозрачно.
Обычно джава-сервера используют "либу" mmocore, которая предоставляет набор базовых сетевых функций, в каком-то роде "заточенных" под многопользовательскую платформу... Затем к этой либе аттачится криптомодуль, который по получении пакета расшифровывает содержимое и отправляет на обработку.
Дальше происходит совсем уж примитивная вещь - большой такой, допустим, оператор выбора по значению первого байта полезной нагрузки пакета... Благодаря этому первому байту, происходит осознание того, что делать со всеми остальными байтами, и какая у них смысловая нагрузка.
Соответственно, когда мы понимаем, какой пакет к нам пришел, мы дергаем соответствующую функцию-обработчик, которая (как правило) и обеспечивает нам реакцию на событие - то есть отсылку данных клиенту. Клиент в свою очередь делает нечто похожее. И так далее.

И поскольку у вас есть исходники, реакцию на событие со стороны сервера можно модифицировать... А можно не модифицировать, и оставить "как есть", до обретения просветления в этой области.

Помимо этого, сервер может отправлять клиенту данные не благодаря запросам от оного, но благодаря реализованным алгоритмам... (такие вещи, как запуск анимации заклинания, например, другими персонажами).

Надеюсь, изложил более-менее понятно, хотя старался как можно короче, и поэтому многое (например, как именно происходит идентификация клиента) я просто опустил "для ясности"
__________________
Если бы в Java работал GC, большинство программ удаляли бы сами себя при первом же запуске
Gubble вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 16.08.2012, 20:58   #5
Пользователь

Автор темы (Топик Стартер) Re: Socket

В том, то все и дело, я не пойму, что там куда отправляется и где, что принимается...

Вообще не врубэйшен.
Можешь помочь разобраться!?

Ну пробую представить:

Я жму вход, что там формируется, пакет?

Мне бы понять бы как вот это устроенно, все все вопросы бы сразу отпали...

У меня в этом только сложность, я не пойму как там устроенна связь, а очень нужно...

Помогите! Кто, чем сможет, может быть детально информация есть?!

Я не прошу за меня все писать коды и т.д., мне нужно, чтобы я хотябы понял что писать.

Конкретно хочу понять как работает.

Мне только это и нужно....

Большое спасибо, что помогаете.

Прошу постарайтесь разжевать и если можно показать, примером, будет вообще супер.

Благодарю, за все, очень сильно помогаете.
norton вне форума Ответить с цитированием
Непрочитано 16.08.2012, 21:40   #6

По умолчанию Re: Socket

После нажатия кнопки войти - клиент устанавливает соединение с логин сервером. После того, как соединение установлено - начинается обмен пакетами.
Первый пакет отсылает логин сервер, Это пакет LoginInit(0x00), в котором отсылается открытый RSA ключ, blowFish ключ, и так называемый идентификатор сессии(sessionId).
Клиент в ответ на этот пакет присылает пакет AuthGameGuard, в котором возвращает sessionId.
Если он совпадает с отосланым, сервер отсылает пакет GGAuth, в ответ на который клиент присылает RequestAuthLogin, который содержит в себе логин и пароль игрока, зашифрованные с помощью отосланного ранее открытого RSA ключа.

Ещё раз кратко:
(C)lient: -> (L)oginserver: Запрос на подключение
Логин сервер устанавливает соединение...
L -> C: LoginInit
C -> L: AuthGameGuard
L -> C: GGAuth
C -> L: RequestAuthLogin
Camelion вне форума Отправить сообщение для Camelion с помощью ICQ Ответить с цитированием
Сказали спасибо:
Непрочитано 16.08.2012, 21:42   #7
Аватар для Gubble
Пользователь

По умолчанию Re: Socket

Ох-хо... Обычно, если люди хотят понять, как работает "вообще сеть", я рекомендую какой-нить ваершарк. Сниффер такой.

А в случае с линеечкой, думаю, более чем идеально подойдет l2ph. Его можно скачать, поставить, запустить, и с его помощью наглядно собственными глазами увидеть, "пошчупать", что, куда, когда и даже "зачем" посылается.

А читать курс о сетях, сетевых протоколах, конкретном протоколе конкретной игры и разработке софта с реалиацией оного протокола, а также о языках программирования высокого уровня вообще, джаве в частности и ОО-подходе к разработке у меня банально нет ни времени, ни желания, уж не обессудьте.
__________________
Если бы в Java работал GC, большинство программ удаляли бы сами себя при первом же запуске
Gubble вне форума Ответить с цитированием
Непрочитано 16.08.2012, 22:00   #8
Пользователь

Автор темы (Топик Стартер) Re: Socket

Цитата:
Сообщение от Camelion Посмотреть сообщение
После нажатия кнопки войти - клиент устанавливает соединение с логин сервером. После того, как соединение установлено - начинается обмен пакетами.
Первый пакет отсылает логин сервер, Это пакет LoginInit(0x00), в котором отсылается открытый RSA ключ, blowFish ключ, и так называемый идентификатор сессии(sessionId).
Клиент в ответ на этот пакет присылает пакет AuthGameGuard, в котором возвращает sessionId.
Если он совпадает с отосланым, сервер отсылает пакет GGAuth, в ответ на который клиент присылает RequestAuthLogin, который содержит в себе логин и пароль игрока, зашифрованные с помощью отосланного ранее открытого RSA ключа.

Ещё раз кратко:
(C)lient: -> (L)oginserver: Запрос на подключение
Логин сервер устанавливает соединение...
L -> C: LoginInit
C -> L: AuthGameGuard
L -> C: GGAuth
C -> L: RequestAuthLogin

О как уже начинаю, понимать!

Большущее, спасибо...



Gubble, я все конечно понимаю, но если нет желания, то конечно я не настаиваю.

Думаю, возможно найдутся, те, у кого будет хоть, немного желания...

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


Camelion, Большое спасибо за подсказку....

LoginInit... А вот его я что-то не увидел, GGAuth такой класс имеется.

RSA - откуда берется? blowFish, а это?)
norton вне форума Ответить с цитированием
Непрочитано 16.08.2012, 22:06   #9

По умолчанию Re: Socket

Попробуйте вместо LoginInit поискать просто Init.
RSA и BlowFish ключи генерируются в нужные моменты. У меня этим занимается вот такой класс:
PHP код:
public final class KeyGenerator {

    
/**
     * Генерирует RSA ключи
     */
    
public static ScrambledKeyPair generateScrambledKeyPair() {
        
KeyPairGenerator keygen;
        try {
            
keygen KeyPairGenerator.getInstance("RSA");
            
RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(1024RSAKeyGenParameterSpec.F4);
            
keygen.initialize(spec);
        } catch (
NoSuchAlgorithmException InvalidAlgorithmParameterException e) {
            
e.printStackTrace();
            return 
null;
        }
        return new 
ScrambledKeyPair(keygen.generateKeyPair());
    }

    
/**
     * Генерирует Blowfish ключ
     *
     * @return blowFish ключ
     */
    
public static byte[] generateBlowfishKey() {
        
byte[] key = new byte[16];
        for (
int i 0key.lengthi++) {
            
key[i] = (byte) (Rnd.get(255) + 1);
        }
        return 
key;
    }

Camelion вне форума Отправить сообщение для Camelion с помощью ICQ Ответить с цитированием
Непрочитано 16.08.2012, 23:08   #10
Пользователь

Автор темы (Топик Стартер) Re: Socket

Camelion, ну хоть теперь уже становится более наглядно и понятно...
Спасибо, что помогаешь...


Там такой ужас, что вообще =)
Разветвлений там просто даталова много...

Понапичкано, там наверное можно сидеть, щелкать, щелкать, щелкать и конца не увидешь...
Куда столько...

Init класс нашел:


Что-то там все так запутанно, что просто дурдом какой-то.
Толи, специально, толи, что не пойму, куда столько классов и методов.


Есть по легче сборка с открытыми исходами?

Еще так пишут пахабно...

Вот, что то тут тоже видимо.

PHP код:
private LoginController() throws GeneralSecurityException
    
{
        
Util.printSection("LoginController");

        
_hackProtection = new FastMap<InetAddressFailedLoginAttempt>();

        
_keyPairs = new ScrambledKeyPair[10];
        
KeyPairGenerator keygen null;

        
keygen KeyPairGenerator.getInstance("RSA");
        
RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(1024RSAKeyGenParameterSpec.F4);
        
keygen.initialize(spec);

        
//generate the initial set of keys
        
for(int i 010i++)
        {
            
_keyPairs[i] = new ScrambledKeyPair(keygen.generateKeyPair());
        }

        
_log.info("Cached 10 KeyPairs for RSA communication");

        
testCipher((RSAPrivateKey_keyPairs[0]._pair.getPrivate());

        
// Store keys for blowfish communication
        
generateBlowFishKeys();

        
spec null;
        
keygen null;
        new 
ConnectionChecker().start();
    } 
Запутанно все...





Серьезно, есть ли полегче сборки?
norton вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Socket FM1 [STIGMATED] Курилка / Yak floor 11 17.10.2011 17:42


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 18:37. Часовой пояс GMT +3.

Вверх