Здравствуйте, уважаемые форумчане! Пришел к Вам с непростым вопросом. Интересует простой скрипт для проверки сервера, уже есть функция, публиковавшаяся уважаемыми людьми на этом форуме, но она не всегда работает и глючит: PHP: function GetServerInfo($server,$port) { $fp = @fsockopen("udp://".$server, $port); if (!$fp) return false; @fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x 45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00 ".chr(10)); $start=time(); socket_set_timeout($fp,1); $st=fread($fp,1); $r=socket_get_status($fp); $r=$r["unread_bytes"]; if ($r == 0) { @fclose($fp); return false;} $st.=fread($fp,$r); @fclose($fp); $st=substr($st,5); $address=SubStr($st,0,StrPos($st,chr(0))); $address=str_replace(chr(0),"|",$address); $st=SubStr($st,StrPos($st,chr(0))+1); $name=SubStr($st,0,StrPos($st,chr(0))); $st=SubStr($st,StrPos($st,chr(0))+1); $map=SubStr($st,0,StrPos($st,chr(0))); $st=SubStr($st,StrPos($st,chr(0))+1); $st=SubStr($st,StrPos($st,chr(0))+1); $st=SubStr($st,StrPos($st,chr(0))+1); $current=ord(SubStr($st,0,1)); $max=ord(SubStr($st,1,1)); if ($map == "") return false; $result['map'] = $map; $result['name']= $name; $result['current'] = $current; $result['max'] = $max; return $result; } Обращаюсь к Вам, как к профессионалам, с просьбой. Меня, если чесно, интересует мониторинг не CS, а Team Fortress 2. Но если по CS еще можно найти хоть какую-то информацию, то по TF2 это бессмысленно. То есть фактически все функции подобного вида посылают UDP запрос. А далее, нужно написать лишь парсер, который правильно будет обрабатывать ответ. Но проблема в том, что я с этим не сталкивался, поэтому и прошу Вас помочь. Рад буду увидеть любую информацию по этому поводу. Заранее спасибо всем за ответы.
Благодарю, сейчас буду смотреть. Прямо сейчас работаю над одним скриптом, собственно говоря больное одно место, где идет обработка полученного ответа. Причем приходит оно в плохом состоянии. PHP: $st.=fread($fp,$r); $st=substr($st,5); $server_name =SubStr($st,0,StrPos($st,chr(0))); $server_name =str_replace(chr(0),"|",$address); $st=SubStr($st,StrPos($st,chr(0))+1); $name=SubStr($st,0,StrPos($st,chr(0))); $st=SubStr($st,StrPos($st,chr(0))+1); $map=SubStr($st,0,StrPos($st,chr(0))); $st=SubStr($st,StrPos($st,chr(0))+1); $st=SubStr($st,StrPos($st,chr(0))+1); $st=SubStr($st,StrPos($st,chr(0))+1); $current=ord(SubStr($st,0,1)); $max=ord(SubStr($st,1,1)); Для проверки твоего скрипта под CS можно попробовать следующие сервера Team Fortress 2: 217.19.212.4:27017 89.222.192.208:27027 89.113.76.181:27015 Там просто, как специально, ответ другой и все портится.
Снифай Team Fortress и сокетами отправляй пакеты/получай ответы Хотя в инете где-то полюбому есть скрипты..попробуй поищи...
То есть ответ от сервера идет такой: Если обработать PHP: str_replace(chr(0),"|",$st) , то получается вот такой вид: То есть уже имя сервера и карту я вырезаю спокойно. Осталось только научиться вырезать сколько играет онлайн, и сколько всего мест. Кстати, вывод игроков(кто играет онлайне) идет отлично с КС`совского скрипта. Насчет скриптов - в том-то и дело, что я довольно много времени потратил, но не нашел. Есть только для CS.
Посмотрел твои сервера в своей стате.. Все отлично показывает кроме кол-ва и статы игроков на сервере...
Количество онлайн/всего мест. Для меня важно это. А статистика игроков - сколько фрагов, у меня показывает отлично. Я тебе на Icq написал, может сможешь выйти, если не трудно, чтобы мы тут чат не устраивали?