Скрыть объявление

Добро пожаловать на наш форум, уважаемые друзья! Регистрируйтесь и переходите в группу "Местный" для того чтоб иметь все привилегии на форуме, удачи вам:)

Решенный вопрос 1.2.6 Работа с пакетами

Тема в разделе "[PW] Решенные вопросы", создана пользователем Самвел, 9 сен 2019.

  1. Самвел
    Оффлайн

    Самвел Новый участник Пользователь

    Регистрация:
    28 июл 2019
    Сообщения:
    16
    Симпатии:
    3
    • Все файлы до 100Mb и изображения, загружайте исключительно на наш форум!
    Привет. В первую очередь хочу поблагодарить всех, кто с терпением относится к подобным темам. Мой вопрос такой. Нужно понять, что такое пакеты в pw, как их отправлять, чем ловить и что с ними делать. А также знать, какую инфу они в себе несут. Буду писать подробно, как нуб.

    Есть такой ресурс с пакетами авторизуйтесь

    Есть пакет запрашивающий и есть ответный, как я понял.

    Есть у меня такой пример вывода ника перса: (авторизуйтесь )

    include("packet_class.php");
    $GetRoleBase = new WritePacket();
    $GetRoleBase -> WriteUInt32(-1); // always
    $GetRoleBase -> WriteUInt32(1024); // userid
    $GetRoleBase -> Pack(0xBC5); // opcode

    if (!$GetRoleBase -> Send("localhost", 29400)) // send to gamedbd
    return;

    $GetRoleBase_Re = new ReadPacket($GetRoleBase); // reading packet from stream
    $packetinfo = $GetRoleBase_Re -> ReadPacketInfo(); // read opcode and length
    $GetRoleBase_Re -> ReadUInt32(); // always
    $GetRoleBase_Re -> ReadUInt32(); // retcode
    $GetRoleBase_Re -> ReadUByte(); // version
    $GetRoleBase_Re -> ReadUInt32(); // id
    echo $GetRoleBase_Re -> ReadUString(); // show rolename

    Я так понимаю php-скрипт c классами не трогаем? Он универсальный?
    Все манипуляции проводим тут, при передаче и приеме, верно? В зависимости от опкода пакета?

    И так едем на наш сайт и берем пакет "GetRoleBaseRes" и видим:

    Здесь у нас запрашивающий пакет:
    1.png

    Здесь ответный
    2.png
    Если перейти по ссылке GRoleBase мы увидим структуру этого ответного пакета, так?
    3.png
    Уже понятнее, айди, имя, раса, пол и т.д. Нужно, допустим вывести пол и расу(gender и race). Как это сделать применительно текущего кода php в начале темы?

    Его необходимо переписывать согласно этой структуре, так?

    Если перейти по ссылке Octets там следующее:
    4.png

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

    ------
    П.С. и еще не понятно почему в php коде эти 2 одинаковые строки:
    $GetRoleBase_Re -> ReadUInt32(); // always
    $GetRoleBase_Re -> ReadUInt32(); // retcode

    Одной не достаточно? Но если убрать одну все ломается.
     
    Последнее редактирование модератором: 10 сен 2019
  2. lapki
    Оффлайн

    lapki V.I.P пользователь V.I.P Пользователь

    Регистрация:
    4 май 2019
    Сообщения:
    8
    Симпатии:
    2
    чтобы получить данные читай дальше блоки
    $GetRoleBase_Re -> ReadUInt32(); // always
    $GetRoleBase_Re -> ReadUInt32(); // код возврата
    $GetRoleBase_Re -> ReadUByte(); // версия(?)
    $GetRoleBase_Re -> ReadUInt32(); // ид
    $GetRoleBase_Re -> ReadUString(); // имя
    Дальше по структуре
    $GetRoleBase_Re -> ReadUInt32(); // раса int
    $GetRoleBase_Re -> ReadUInt32(); // cls int
    $GetRoleBase_Re -> ReadByte(); // пол byte
    $GetRoleBase_Re -> ReadUString(); //(?) кастом дата (?) string
    $GetRoleBase_Re -> ReadUString(); // (?)конфиг дата(?) string(array (?))
    $GetRoleBase_Re -> ReadUInt32(); // (?)кастомная маркировка (?) string (array(?))
    $GetRoleBase_Re -> ReadByte(); // статус byte
    $GetRoleBase_Re -> ReadUInt32(); // время удаления int
    ну и так далее. Я это не разбирал, но по коду вроде так должно работать, каждый раз ты считываешь часть переменной с заранее известной длиной и получается нужный сдвиг по проверке.
     
  3. Самвел
    Оффлайн

    Самвел Новый участник Пользователь

    Регистрация:
    28 июл 2019
    Сообщения:
    16
    Симпатии:
    3
     
  4. Самвел
    Оффлайн

    Самвел Новый участник Пользователь

    Регистрация:
    28 июл 2019
    Сообщения:
    16
    Симпатии:
    3
    Теперь все стало понятно. Т.е. чтобы получить значение конкретного блока, например пол, нужно прочитать блоки до него.
    Т.е. я не могу сразу написать $gender = $GetRoleBase_Re -> ReadUInt32();

    Правильно будет:
    $GetRoleBase_Re -> ReadUInt32();
    $GetRoleBase_Re -> ReadUInt32();
    $gender = $GetRoleBase_Re -> ReadUByte();

    Верно? Я проверил, думаю так и есть.

    Спасибо, все оказалось просто.
     
Похожие темы
  1. hjslw

    Решенный вопрос Любая версия IDA - работа с переменными

    Ответов:
    9
    Просмотров:
    1.590
  2. Andrey

    [PW] Программирование Работа с пакетами

    Ответов:
    1
    Просмотров:
    2.747
  3. jineien
    Ответов:
    0
    Просмотров:
    440
  4. PationRoute
    Ответов:
    4
    Просмотров:
    159
Загрузка...