суббота, 5 марта 2011 г.

Разбираем процесс сетевого общения в деталях. Эпизод 1.


В прошлый раз мы умели начать разговор с сервером, причем сервер нам даже ответил. Настала пора вплотную заняться изучением содержимого ответа и вообще попробовать побольше разузнать о том, что посылают клиент и сервер друг другу. Что для этого понадобится?
Хороший текстовый редактор. Стандартный блокнот не подойдет. Notepad++ то, что нам нужно. Качаем http://notepad-plus-plus.org/download .
Табличный процессор. Обычно это Microsoft Excel.
Установили? Тогда продолжим.
Поскольку нам придется постоянно переключаться между клиентом игры и окном захвата трафика, то лучше установить запуск игры в оконном режиме. Для этого открываем папку, в которой находится игра и находим файл «config.cfg» или «godlypc.cfg», если запускаем игру с максимальными настройками. Открываем с помощью блокнота или NPP (Notepad++). Находим строку «FullScreen = 1» и изменяем на 0. Результатом должно стать «FullScreen = 0». Теперь закрываем текстовый файл, предварительно не забыв сохранить. Вот теперь мы готовы исследовать сообщения сервера и клиента.

Создаем простой Excel файл. Первая колонка будет содержать время, вторая строку, которая будет  содержимым первого переданного сетевого пакета за сеанс игры.

Эпизод 1.
Запускаем сервер. Запускаем перехватчик трафика. Запускаем игру, теперь уже в оконном режиме. Что нас интересует? Прежде всего, с чего начинается взаимодействие. То есть процесс выглядит следующим образом. Записываем в первую колонку текущее время, вместе с секундами (их можно увидеть два раза щелкнув на табло времени в системном трее). В нашей запущенной игре (клиенте) выбираем «Подключиться», дожидаемся, когда все этапы пройдут успешно и появится танк на поле боя, стреляем, отключаемся. Открываем окно с захваченным трафиком.
В окне появилось много строк, но что конкретно мы ищем? Мы ищем первое сообщение, которое посылается по сети. Находим место, с которого начинается общение.


Копируем его в Excel (выделив текст, нажимаем правой кнопкой и «Copy as Hex»). В результате будем иметь что-то вроде:

И так хотя бы раз десять.

Теперь все ясно. Общение всегда начинается клиентом и всегда словами «EFEF EFEF». Оно и понятно, ведь сервер не сможет узнать о существовании страждущего поиграть, пока тот сам не намекнет об этом и поздоровается. Мы уже разобрались, как это реализовать.

Эпизод 2.
Теперь черед разобраться с тем, а что отвечает нам сервер? Для этого ищем, какими были вторые сообщения в сеансах связи. Проделываем тот же трюк как в эпизоде 1, только теперь ищем 2-е сообщения а затем копируем содержимое сообщения в 3-ю колонку. Например, вот так:


Видно, что в сообщении сервера повторяется «CFCFCFCF», а вот что идет дальше? И почему все время изменяется? Пока предположений нет. Что делать? Давайте дальше двигаться. Посмотрим, что посылает клиент, когда увидит в сообщении «CFCFCFCF» + еще что-то.

Эпизод 3.
Ну что, уже не так весело? В окне NPA теперь ищем третьи сообщения в сеансах связи между клиентом и сервером.


И что мы видим? В ответе постоянно «CACACACA» + еще что-то. Но это что-то отличается от того, что приходит от сервера.

В голову приходит пока одно, попробовать схему:
Пришло в сообщении «CFCFCFCF» + х.
Отправить «CACACACA» + х.

11 комментариев:

  1. Похоже на диалог умственно отсталых, если перенести все это на людей)

    ОтветитьУдалить
  2. Just_amazing хех, верно побмечено
    Спасибо, не помешает знать

    ОтветитьУдалить
  3. Вашу бы энергию на пользу опен сорсу.

    ОтветитьУдалить
  4. Заинтересовался. Жду продолжения!

    ОтветитьУдалить
  5. Как всегда очень полезная инструкция. Спасибо.

    ОтветитьУдалить
  6. А можно за одно выложить уроки работы в Excel? И в Галактике тоже.

    ОтветитьУдалить