Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Отправка пакетов на сервере (Server queries)

Статус пользователя Orty_Hart
сообщение 26.10.2014, 21:06
Сообщение #1
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

Добрый вечер.
Долго и нудно читаю эту статью, и никак не могу понять почему не могу получить список игроков на одном сервере.

Вообщем так отправляю пакеты:
Код
$fp = @fsockopen("udp://".$ip, $port, $errno, $errstr);

fwrite($fp, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
$buffer = fread($fp, 4096);

fwrite($fp, "\xFF\xFF\xFF\xFF\x55\xFF\xFF\xFF\xFF");
$buffer_2 = fread($fp, 4096);


и по идее, в $buffer_2 должны быть игроки.
На большей части серверах CS 1.6 - работает.
Но на этом сервере
Код
77.22(ноль).182.121:27(ноль)15

не получается получить....
может кто посоветует, как получить список игроков иным способом?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Legenda
сообщение 26.10.2014, 22:13
Сообщение #2


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

попробуй так
fwrite($fp, "\xFF\xFF\xFF\xFF\x55");

быть может старый метод запросов используется на этом сервере
в dproto.cfg есть настройки server_info_type

ищи старый и новый метод запросов, один из них точно будет работать)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 27.10.2014, 19:12
Сообщение #3
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

Legenda,
Спасибо.
Долго и мучительно, вообщем разобрался :)



"Готовое решение, кому нужно:"
Код
$fp = @fsockopen("udp://".$ip, $port, $errno, $errstr);
fwrite($fp, "\xFF\xFF\xFF\xFF\x54Source Engine Query\0");
$buffer = fread($fp, 4096);

fwrite($fp, "\xFF\xFF\xFF\xFF\x55");
$buffer_2 = fread($fp, 4096);

if(Ord($buffer_2[4]) == 0x41)
{
    $buffer_2 = substr($buffer_2, 5, 4);
    fwrite($fp, "\xFF\xFF\xFF\xFF\x55".$buffer_2);
    $buffer_2 = fread($fp, 4096);
}

$buffer_2 = substr($buffer_2, 5);


в результате, в $buffer_2 будут игроки.


Отредактировал: Orty_Hart, - 27.10.2014, 19:13
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 27.10.2014, 19:26
Сообщение #4


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

substr не нужен
просто ты не знаешь что такое магические кавычки)
советую почитать о них
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя onotole
сообщение 27.10.2014, 20:02
Сообщение #5


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Цитата(Legenda @ 27.10.2014, 20:26) *
substr не нужен
просто ты не знаешь что такое магические кавычки)
советую почитать о них

Какая связь между обрезкой строки и автоматическим экранированием кавычек? Это раз.
Второе. Прежде, чем что-то советовать, почитайте, что это такое, для чего было придумано, и как оно вообще работает.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 27.10.2014, 20:15
Сообщение #6


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(onotole @ 27.10.2014, 22:02) *
Какая связь между обрезкой строки и автоматическим экранированием кавычек? Это раз.
Второе. Прежде, чем что-то советовать, почитайте, что это такое, для чего было придумано, и как оно вообще работает.

связь самая прямая)
вот именно, почитай) а потом только говори)
уж тебе стоит знать, что при использовании magic_quotes - кавычками экранируются все входящие данные
из-за этого у многих проблемы возникают
при выводе будет что-то вроде \0\0 \0\0
именно это чел и вырезает)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 27.10.2014, 20:24
Сообщение #7
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

Legenda,
если убрать

Код
$buffer_2 = substr($buffer_2, 5, 4);


будет такой результат:

yyyyA%%D
и я этой функцией убираю yyyy, чтоб отправить на сервер только 0х55A%%D
и результат такой отправки, есть списком игроков...
и зачем тут экранирование - не пойму)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 27.10.2014, 20:27
Сообщение #8


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(Orty_Hart @ 27.10.2014, 22:24) *
Legenda,
если убрать

Код
$buffer_2 = substr($buffer_2, 5, 4);


будет такой результат:

yyyyA%%D
и я этой функцией убираю yyyy, чтоб отправить на сервер только 0х55A%%D
и результат такой отправки, есть списком игроков...
и зачем тут экранирование - не пойму)

ну сори тогда)
значит я не прав,
что-то подумал что ты вырезаешь кавычки)
ночь же)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя onotole
сообщение 27.10.2014, 20:54
Сообщение #9


Иконка группы

Стаж: 13 лет

Сообщений: 1572
Благодарностей: 1119
Полезность: 1550

Меценат Меценат

Цитата(Legenda @ 27.10.2014, 21:15) *
связь самая прямая)
вот именно, почитай) а потом только говори)
уж тебе стоит знать, что при использовании magic_quotes - кавычками экранируются все входящие данные
из-за этого у многих проблемы возникают
при выводе будет что-то вроде \0\0 \0\0
именно это чел и вырезает)

http://ru2.php.net/manual/ru/function.substr.php
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: