Скрипт мониторинга cs серверов.

Discussion in 'PHP' started by banned, 29 Jan 2007.

  1. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Скрипт написан NeX^oR'om спец. фор ми давно уже, но я купил у него так что мой :fuck:
    Только вот сейчас думаю зачем купил....написал бы сам сейчас :) ыыы
    Code:
    <?php
    
    error_reporting(E_ALL);
    
    define ("SERVLIST", "servers.txt");  // файл со списком server:port
    define ("URL", 'stats.php?server='); // скрипт подробной статистики по конкретному серверу
    define("SERVERSBYPAGE", 10);  // количество серверов на страницу
    
    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\x45\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;
    }
    
    function ReadServers($servlist) {
         $file = @fopen($servlist,"rt");
    
         if ($file) {
           $lines = explode("\n", fread($file, filesize($servlist)));
           foreach ($lines as $v) {
             $elem = explode(":",$v);
             $srv['ip'] = $elem[0];
             $srv['port'] = $elem[1];
             if (GetServerInfo($srv['ip'],$srv['port'])) $servers[] = $srv;
           }
           fclose($file);
           return $servers;
         } else return false;
    
    }
    
    function AddServer($newserver,$servlist) {
         if (!preg_match('/^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}:\d{1,5}$/xs',$_REQUEST['newserver'])) return false;
         $f = fopen($servlist,"a+");
         if (!$f) return false;
    
         fputs($f,"\n".$_REQUEST['newserver']);
         fclose($f);
         return true;
    }
    
    
    if (isset($_REQUEST['newserver'])) {
    
         if (!preg_match('/^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}:\d{1,5}$/xs',$_REQUEST['newserver']))
            echo "Ошибка! Невозможно определить введенный сервер или порт";
         else { list($newserv['ip'],$newserv['port']) = explode(":",$_REQUEST['newserver']);
    
                if (!GetServerInfo($newserv['ip'],$newserv['port'])) echo "Ошибка! Не удалось подключиться к серверу";
    
                elseif (in_array($newserv, ReadServers(SERVLIST))) echo "Сервер уже есть в списке<br />";
                elseif (!AddServer($newserver,SERVLIST)) echo "Ошибка при добавлении сервера <br />";
                else echo "Сервер добавлен в список <br />";
         }
       echo "<br/><a href=".$_SERVER['SCRIPT_NAME'].">Вернуться</a>";
       exit;
    
    }
    
    $servers = array();
    $servers = ReadServers(SERVLIST);
    $countpages = ceil(count($servers)/SERVERSBYPAGE);
    
    if (!isset($_GET['page']) || ((int)$_GET['page'] == 0) || $_GET['page'] < 1) $_GET['page'] = 1;
    {
       for ($i=0; $i < ($_GET['page']-1)*SERVERSBYPAGE; $i++) array_shift($servers);
       while (count($servers) > SERVERSBYPAGE) array_pop($servers);
    
    }
    
    ?>
    
    <table width='50%' cellpadding='3' cellspacing='3' bordercolor='#333333'>
      <tr>
        <td><div align='center'>Сервер:</div></td>
        <td><div align='center'>Название:</div></td>
        <td><div align='center'>Карта:</div></td>
          <td><div align='center'>Игроков:</div></td>
        <td><div align='center'>Статус:</div></td>
      </tr>
    
    <?php
    
    foreach ($servers as $k=>$v) {
    
        $serv = GetServerInfo($v['ip'],$v['port']);
        if ($serv) 
        echo "<tr>
              <td><div align='center'>
              <a href=".URL.$v['ip']." onmouseover=\"return overlib('На сервере сейчас играют:');\" onmouseout=\"return nd();\">".$v['ip'].":".$v['port']."<a></div></td>
              <td><div align='center'>".$serv['name']."</div></td>
              <td><div align='center'>".$serv['map']."</div></td>
              <td><div align='center'>".$serv['current']."/".$serv['max']."</div></td>
              <td height='50'><div align='center'>
              <font color=green><b>Online</b></font>
              </div></td></tr>";
    }
    echo "<br /></table>";
    
    if (count($servers) > SERVERSBYPAGE) {
    echo "<br /><br /><p>Страницы:&nbsp;</p>";
    
     for ($i = 1; $i <= $countpages; $i++);
    {
    
      if ($i == $_GET['page'] ) echo "[".$i."]&nbsp;";
      else
      echo "[<a href=\"".$_SERVER['SCRIPT_NAME']."?page=$i\">$i</a>]&nbsp;";
    
    }
     }
    else echo"Мониторинг all Half-Life mode's";
    echo "<br />
             <p>Добавить сервер:</p>
    
             <form  action=".$_SERVER['SCRIPT_NAME'].">
             <input name=\"newserver\" type=\"text\" value=\"IP:порт\" onfocus=\"if(this.value=='IP:порт')this.value='';\" onblur=\"if(this.value=='')this.value='IP:порт';\">
             <input type=\"submit\" value=\"Добавить\">
             </form>";
    
    
    ?> 
    А вот скрипт на подробную статистику по каждому серверу..например :
    сервер anticheaters.ru Всего 26/28 играют....перечисляются ники....сколько фрагов и т.п. !!!

    Code:
    <?php
    error_reporting(E_ALL);
    error_reporting(0);
    if (!isset($port))
    {
    $port='27015';
    }
    if (!isset($server))
    {
    $server='89.169.79.236';
    }
    $qw=chr(32);
    
    $fp = @fsockopen ("udp://".$server,$port);
    @stream_set_timeout($fp, 3);
    if (!$fp) return false;
    {
      fwrite($fp,"\377\377\377\377players".chr(10));
    //fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10));
        $st=fread($fp,1);
        $r=socket_get_status($fp);
        $r=$r["unread_bytes"];
        $st.=fread($fp,$r);
        fclose($fp);
        $playersn=ord(substr($st,5,1));
        $st=substr($st,6);
    }
    if ($playersn != 0 )
    {
     echo ("\n<meta http-equiv=\"content-type\" content=\"text/html; charset=windows-1251\">
    <title>Кто играет?</title>
    <body>
    <center>
    <table width=\"100\" border=\"0\" cellpadding=\"2\" cellspacing=\"1\" align=\"left\" bgcolor=\"black\">
      <tr>
        <td colspan=\"3\"><center><font color=white>Сейчас на сервере $server : </font></center></td>
      </tr>
      <tr>
        <td bgcolor=\"#ffffff\" width=\"15\">N</td>
        <td bgcolor=\"#ffffff\" width=\"250\">Игрок:</td>
        <td bgcolor=\"#ffffff\">Kills:</td>
      </tr>\n");
    
            for ($i=1;$i<=$playersn;$i++){
                $n=ord(substr($st,0,1));
                $st=substr($st,1);
                $name=substr($st,0,strpos($st,chr(0)));
                $kills=ord(substr($st,strpos($st,chr(0))+1,1));
                if ($kills==255){$kills=-1;}
                if ($kills==254){$kills=-2;}
                if ($kills==253){$kills=-3;}
                if ($kills==252){$kills=-4;}
                $st=substr($st,strpos($st,chr(0)));
                $st=substr($st,9);
                echo("
    
    <tr>
        <td bgcolor=\"#ffffff\" width=\"15\">$n</td>
        <td bgcolor=\"#ffffff\" width=\"250\">$name</td>
        <td bgcolor=\"#ffffff\">$kills</td>
      </tr>\n");
            }
            echo("</table></body>"); 
    }
    else 
    echo "Ошибка в просмотре статистики сервера </html>";
    ?>
     
  2. ice1k

    ice1k Banned

    Joined:
    1 Jan 2007
    Messages:
    462
    Likes Received:
    382
    Reputations:
    490
    Эмм, где-то я это видел... Наверно ты это на Дамаге постил...
    И вообще - ты уверен, что он писал это specially 4 you? - ибо я это ещё очень давно где-то видел =\
     
  3. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    ice1k, да, я постил на дамаге....
    И я 100% уверен что писал он спец.фо ми..
    1 скрипт писал он, второй я гдето взял в инете и переделал...
     
  4. bopoh13

    bopoh13 Elder - Старейшина

    Joined:
    31 Oct 2006
    Messages:
    195
    Likes Received:
    20
    Reputations:
    0
    Уже кто-то постил 2 месяца назад. Ссылку не помню.
    Просил доработать =)