среда, 16 марта 2011 г.

Алгоритм изменения Id сетевого клиента.


Как уже нам стало известно, для начало общения необходимо принять от сервера набор из 8 шестнадцатеричных значений (или по-простому, 4 байта), которое является уникальным идентификатором сетевого клиента - Id, затем магическим образом изменив их, нужно отправить этому серверу. Для того чтобы поближе ознакомится с эталоном принимаемого Id и отправляемого, мы уже реализовали сервер и попробовали отправлять заранее известные комбинации значений, а затем сохранять для изучения ответы сетевого клиента. Чтобы максимально упростить задачу, отправим всего 16 сообщений и проследим за их метаморфозами, а при удачном стечении обстоятельств, узнаем какой алгоритм изменения был использован.
Вот эти 16 сообщений отправленные нашим сервером и ответы, которые прислал настоящий клиент:


Улов настоящего охотника за сетевыми пакетами богат. Пора сворачивать сети и начинать разбирать улов. Первое, что бросается в глаза, это то, что мы работать должны не с байтами, а с 16-чными числами, которых получается 8 штук. Из этих 8, как видно изменяются первые 4 и последнее. А 5, 6, 7 не изменяются. Ну что, можно считать, что полдела сделано.
Дальше запишем все изменения, выделив столбец для каждого 16-чногочисла, группировку делаем по 2 строки, первая строка – это поданные на вход числа, вторая строка – это принятые от сетевого клиента числа:



В таком виде ничего внятного сказать нельзя о том, как изменяется Id. Попробуем перемешать всю эту кашу и подать с другим соусом.



Для каждого 16-чного числа запишем, что отправляет клиент (id сервера), что отправляет настоящий клиент (id клиента) и разницу между этими значениями. Соответственно в каждом столбце записаны конкретные значения, которые могут принимать это 16-чные числа.

А вот и вторая половина дела сделана, осталось только все это воплотить в коде.

4 комментария: