Собственно, итог такой - я не стал заниматься разработкой, но я выложу в этой теме всю информацию которую удалось получить за всё это время (4 дня) из различных источников для других разработчиков.
Возможно когда-то кто-то захочет написать сервер и эта статья ему облегчит разработку.
1. Как работает сервер PB
Нужно понимать, что есть Сервер Авторизации (Далее СА) а есть Игровые Сервера (Далее ИС).
Сервер авторизации это тот сервер, адрес которого вы задаёте в конфиге ПБ.
При запуске ПБ устанавливает Socket с сервером авторизации, первый пакет отправить должен сервер авторизации(Далее СА). Затем клиент отправляет следующий пакет, и так происходит АВТОРИЗАЦИЯ и ПОЛУЧЕНИЯ СПИСКА ИС (Список ИС это сервера, в руофе они называются "Общий сервер" или "Сервер клановых боёв", это те сервера, которые вы видите при входе в ПБ). И так, после проверки логина/пароля получаем список серверов, информацию о вашем аккаунте (Список друзей, внешний вид, оружие и т.д.). На этом основные операции с СА завершены.
Далее клиент должен выбрать ИС и установить сокет именно с ИС, при входе на ИС сокет с СО разрывается. Но после разрыва работа с ОС не закончена:
Каждую минуту клиент устанавливает новый сокет с СА, передаёт ему покетом логин/пароль (+ Стандартный заголовок и ID пакета, о них ниже), затем сокет закрывается и действия повторяются через 1 минуту - Это есть информирование СА клиентом о том, что клиент ещё в игре и всё хорошо. Так же при закрытии ПБ клиент устанавливает сокет с СА и сообщает ему что "ПБ Закрыт", после чего закрывает сокет и ПБ.
Структура пакетов PB:
Любой пакет это лишь набор байтов, допустим нам от клиента пришёл такой пакет:
2 0 15 10 47 51
Его размер - 6 байт. Это пакет о котором я писал выше - который отправляется каждую минуту клиентом на СА. Разбираем пакет:
Первые 2 байта это РАЗМЕР ОСНОВНОЙ ЧАСТИ ПАКЕТА.
Вторые 2 байта это ID ПАКЕТА - ID пакета сообщает клиенту или серверу чего от него вообще хотят, т.е. ID пакета для подтверждения того что клиент ещё
работает это "15 10". Всё что идёт дальше - это ОСНОВНАЯ ЧАСТЬ ПАКЕТА. Т.е. "47 51" - основная часть пакета, всего 2 байта.
Подитожим:
"2 0 "- Первые 2 байта это Размер основной части пакета (Т.е. в нашем случае это 2 байта, всё правильно)
"15 10 " - Вторые 2 байта это ID пакета
"47 51" - всё что после первых 4-х байтов это основная часть пакета (Размер основной части пакета есть в первых двух байтах пакета).
С помощью таких пакетов общается сервер и клиент, структура всегда одинаковая : "РазмерОсновнойЧасти IDпакета основная часть"
Исходя из ID пакета сервер или клиент решает что ему вообще делать после этого пакета, или этот пакет является ответом на его запрос и т.д., думаю это понятно.
ИС(Игровой сервер):
После входа на ИС клиент опять устанавливает сокет, но уже не с сервером авторизации а с игровым сервером, и далее общается с ним - получает информацию о персе, получает список серверов или комнат на сервере, создаёт свои комнаты, юзает магазин и т.д. Покеты ИС ничем не отличаются от пакетов СА, так что вы сами в них будете разбираться (Ибо я разобрался только с пакетами СА, а в ИС даже не начинал копаться, но структура пакетов там таже - я это гарантирую).
Чуть не забыл, сервер авторизации работает на порту 39190, на счёт игровых серверов я не знаю - скорее всего клиенту передаётся значение IP/PORT и по ним клиент заходит на ИС, хотя возможно я ошибаюсь - это уже ваша работа.
+ Не совсем разобрался с кодировкой, с одной стороны кажется что ASCII а с другой что используются просто числовые значения байт, видимо в пакетах это смешано и парсится сервером/клиентом, т.е. например ник читается через ASCII, а список сервером просто числовым значением байта, и если считать весь массив байтов через ASCII то получится джигурда, так что нужно будет долго бегать с бубном и колдовать над каждым пакетом чтобы понять что значит каждый байт, в чём я вам и желаю удачи, а сам займусь чем-то более интересным.
Итог:
Я убил 4 дня на изучение пакетного уровня PB, структуры серверной части, да и вообще.
От + не откажусь.
Вы тут не говорите..так)... А вот тема *****! Т.к. такой проэкт существует и я в нем участвую!)[Ссылки могут видеть только зарегистрированные пользователи. ]
Хм. пакеты не одинаковые, вернее их структура.
От сервера к клиенту одно, от клиента к серверу - другое.
например размер от Клиента к серверу всего 1 байт а не 2.
а от Сервера к клиенту не 1 байт а 2.
Стандартное шифрование легкое..
Остается найти тока смещение.. как, не скажу...
Если писать для РуОФфа то вам не понадобимтся ширование, так как это все делает Фрост (Но так как фрост не сконектится с иновой он будет в ОФФ и шифрованить ниче не будет), и то только от клиента к Игровому серверу. Сервер авторитизации полностью открыт.
Дерзайти
P.S
[Ссылки могут видеть только зарегистрированные пользователи. ]
________________
Felixx [PBDev.RU]
Последний раз редактировалось Felixx3452; 07.07.2012 в 18:55.
Остается найти тока смещение.. как, не скажу...
Если писать для РуОФфа то вам не понадобимтся ширование, так как это все делает Фрост (Но так как фрост не сконектится с иновой он будет в ОФФ и шифрованить ниче не будет), и то только от клиента к Игровому серверу. Сервер авторитизации полностью открыт.
Дерзайти
те если запустить "поинбленк.ехе логин пароль" пакеты будут лететь не шифрованные, или нужно убрать фрост с клиента игры?
те если запустить "поинбленк.ехе логин пароль" пакеты будут лететь не шифрованные, или нужно убрать фрост с клиента игры?
Запусти прокси сервер на локалхосте по порту 39190, в конфиге PB укажи 127.0.0.1, включи запись логов и будет тебе счастье - увидишь что пакеты при включенном фросте что при выключенном ничем не отличаются (По крайней мере для логин сервера, дальше я не полез)
Добавлено через 2 минуты
Цитата:
Сообщение от Boomber™(2)
Fojest, не понимаю зачем ты убил время для этой темы?
если некоторые начнут делать,они тупо забросят это,и лишь некоторые будут идти до конца..Не вижу смысла в теме кому надо тот прогуглит,а тут...
Чтобы подтолкнуть кого-то на создание паблик-сервера и хоть чуть чуть ему помочь. Неужели не понятно?)
Добавлено через 4 минуты
Цитата:
Сообщение от mr.alex772
Вы тут не говорите..так)... А вот тема *****! Т.к. такой проэкт существует и я в нем участвую!)[Ссылки могут видеть только зарегистрированные пользователи. ]
Может быть хватит его пиарить? Ух как злятся админы pbdev на меня, а почему не понятно.. Может быть потому-что до этого об даже конфиг редактировать никто не мог, а тут такой фейл.
Последний раз редактировалось Fojest; 07.07.2012 в 20:18.
Причина: Добавлено сообщение
те если запустить "поинбленк.ехе логин пароль" пакеты будут лететь не шифрованные, или нужно убрать фрост с клиента игры?
Именно так. Фрост скажет ошибку, и не запустится.
И шифрованить не будет ничего.
Цитата:
Сообщение от Fojest
Запусти прокси сервер на локалхосте по порту 39190, в конфиге PB укажи 127.0.0.1, включи запись логов и будет тебе счастье - увидишь что пакеты при включенном фросте что при выключенном ничем не отличаются (По крайней мере для логин сервера, дальше я не полез)
Бррр. Бред такой. Читай что я выше писал.
Было написано:
"Сервер авторитизации полностью открыт."
________________
Felixx [PBDev.RU]
Последний раз редактировалось Felixx3452; 07.07.2012 в 21:14.
Ещо бывает пакеты, в data которых содержится несколько пакетов.. Такие пакеты ходят как от клиента, так и от сервера... плюс есть нестандартные.... например пишут что в пакете 10 байт, а насамом деле приходит 20 байт.. или наобоот пишут 20 байт а приходит 10 байт, причем в первом случае там нету второго пакета.. иногда там даже не просто нули а какие то данные.
Пример:
Забыл, если использовать как код сервера для руофф клиента что прочитать можно не 2 раза по 1 байту, а сразу 2 байта, ибо второй байт всегда 0, данный код использую для американского клиента, но пока не отлажено, пока небыло времени поймать мультипакет от клиента, чтобы разобраться есть там вообще второй байт или нету, ИМХО это байт от защиты... но так как он уже был может там будет 0 или вообще его небудет.
Добавлено через 12 часов 59 минут
И так, поймал мульти пакетик (data.size=396) от клиента, посылается Гейм Серверу...
Далее по идеи должен быть снова размер следущего пакета какой то неясный пока что ключ, и далее опкод и стока байтов скока скажет размер... исходя из примера пакета от ГЕйм сервера к Клиенту...
Смотрим
pos: 138|| C: 152 - Предпологаемый размер
pos: 139|| C: 143 - Что то от защиты
pos: 140|| H: 54259 - ОПКОД??? некатит чото
Попробуем по другому, не будем читать байт от защиты...
pos: 138|| C: 152 - размер
pos: 139|| H: 62351 - Опкод??? нет не он...
Вот какие странности бывают вобщем
Пытался разбить и расшифровывать байты по отдельности - та же история
Есть мысли?)
Кстати, кому нужно, то shift для BitRotate сдесь равен 3
Вобщем пришлось делать разграничения по тому, какой сервер запущен. АУТХ или ГЕЙМ...
Мультипакеты как было замечено посылаются клиентом, только к АУТХ серверу.. а к гейму всегда по одному пакету. Поэтому пакет к ГС составляется по всему буфферу а не по тому что написано в первом байте, и если что то осталось составляется второй пакет, как делается это к АутхСерверу..
Больше варианта никакого не нашол вобщем.
Добавлено через 22 часа 20 минут
Чо не ужели никому больше это не интересно? Fojest Для кого тогда делать опен сурс проект то?))))
Всем по барабану, все ждут готовое.... када где нить, когда нить появится все рабочее на халяву, и потом вазмут код и будут доделывать... как было с L2,Aion,Tera и тд и тп... Обидно.
________________
Felixx [PBDev.RU]
Последний раз редактировалось Felixx3452; 15.07.2012 в 21:42.
Причина: Добавлено сообщение