Php скрипт мониторинга

Discussion in 'PHP' started by WebManN, 23 Jan 2008.

  1. WebManN

    WebManN New Member

    Joined:
    23 Jan 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, уважаемые форумчане!

    Пришел к Вам с непростым вопросом.

    Интересует простой скрипт для проверки сервера, уже есть функция, публиковавшаяся уважаемыми людьми на этом форуме, но она не всегда работает и глючит:
    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 запрос. А далее, нужно написать лишь парсер, который правильно будет обрабатывать ответ. Но проблема в том, что я с этим не сталкивался, поэтому и прошу Вас помочь.

    Рад буду увидеть любую информацию по этому поводу.

    Заранее спасибо всем за ответы.
     
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    /threadedpost557250.html#post557250
     
  3. WebManN

    WebManN New Member

    Joined:
    23 Jan 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Благодарю, сейчас буду смотреть.

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

    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

    Там просто, как специально, ответ другой и все портится.
     
  4. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Снифай Team Fortress и сокетами отправляй пакеты/получай ответы
    Хотя в инете где-то полюбому есть скрипты..попробуй поищи...
     
  5. WebManN

    WebManN New Member

    Joined:
    23 Jan 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    То есть ответ от сервера идет такой:
    Если обработать
    PHP:
    str_replace(chr(0),"|",$st)
    , то получается вот такой вид:

    То есть уже имя сервера и карту я вырезаю спокойно.

    Осталось только научиться вырезать сколько играет онлайн, и сколько всего мест.

    Кстати, вывод игроков(кто играет онлайне) идет отлично с КС`совского скрипта.

    Насчет скриптов - в том-то и дело, что я довольно много времени потратил, но не нашел. Есть только для CS.
     
  6. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Посмотрел твои сервера в своей стате..
    Все отлично показывает кроме кол-ва и статы игроков на сервере...
     
  7. WebManN

    WebManN New Member

    Joined:
    23 Jan 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Количество онлайн/всего мест.
    Для меня важно это.

    А статистика игроков - сколько фрагов, у меня показывает отлично.

    Я тебе на Icq написал, может сможешь выйти, если не трудно, чтобы мы тут чат не устраивали?
     
  8. WebManN

    WebManN New Member

    Joined:
    23 Jan 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Все, разобрался.

    tf-monitor.net.ru - вот, что получилось.
     
  9. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Если разобрался, покажи нам