Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   cs server monitoring (https://forum.antichat.xyz/showthread.php?t=100269)

eLWAux 09.01.2009 01:29

cs server monitoring
 
мониторинг КС сервера
version 0.2

language: perl
$host = хост
$port = порт

[+] добавил: проверка на LAC защиту

perl source:
PHP код:

use IO::Socket;

system('cls');
##########################################################################
#####] (c)oDeD 6y eLWAux [################################################
##########################################################################

##########################################################################
##########################################################################
##########################################################################

 
sub parce_info_2 {
      
my $x $_[0];
      
$x =~ /\xFF\xFF\xFF\xFF\x6D(.*)/;
      
$x = $1;
     
my @l=split(/\x00/,$x);
     print 
' Server Address   = '.@l[0]."\n";
     print 
' Host Name        = '.$l[1]."\n";
     print 
' Map Name         = '.$l[2]."\n";
     print 
' Game Directory   = '.$l[3]."\n";
     print 
' Game Description = '.$l[4]."\n";    
     print 
' Player Count     = '.hex(unpack('H2',substr($l[5],0,1)))."\n";
     print 
' Max Players      = '.hex(unpack('H2',substr($l[5],1,1)))."\n";
     print 
' Protocol Version = '.hex(unpack('H2',substr($l[5],2,1)))."\n";
     print 
' Server Type      = '.substr($l[5],3,1)."\n";
     print 
' Server OS        = '.substr($l[5],4,1)."\n";
     print 
' Modded           = '.hex(unpack('H2',substr($l[6],0,1)))."\n";
     print 
' Mod Website      = '.substr($l[6],1,length($l[6]))."\n";
 }
 
##########################################################################
##########################################################################
##########################################################################
 
 
while (1==1){
 
 
system('cls');
 print 
"\n";

 print 
" ==-=-=-=-=-=-=-==-=-==-=-==-=-= \n";
 
$host 'game.arbital.ru';
 
$port '27018';

 print 
' = '.$host.':'.$port." = \n";



 
#=-====-==-=-
 #= CONNECT =-
 #=-=-==-===-=-=======-==-=-=-=-=--=-=
 
 
my $sock = new IO::Socket::INET(
        
PeerAddr=>$host,
        
PeerPort=>$port,
        
Proto=>'udp') || die "[-] No Server!";

 
$cmd="\xFF\xFF\xFF\xFFTSource Engine Query\x00";
 
syswrite $sock$cmd;
 
sysread $sock,$x,65535
 
parce_info_2($x);
 
 
 
#=-===-=-
 #= LAC =-
 #=-=-==-===-=-=======-==-=-=-=-=--=-=
 
 
$cmd="\x66\x66\x66\x66\x66\x66\x66\x66\xFF";
 
syswrite $sock$cmd;
 
sysread $sock,$x,65535
 if (
$x =~/true/) {
     print 
" [+] LAC protected!\n";
     } 
 
 
 
#=-====-==
 #= PING =-
 #=-=-==-===-=-=======-==-=-=-=-=--=-=
 
 
$cmd="\xFF\xFF\xFF\xFF"."ping\x00";
 
syswrite $sock$cmd;
 
sysread $sock,$x,65535
 
$x =~ /\xFF\xFF\xFF\xFF(.*)\x00/;
 
$ping hex(unpack('H2',$1));
 print 
' Ping             = '.$ping."\n";


 
#=-====-==-=-
 #= CONNECT =-
 #=-=-==-===-=-=======-==-=-=-=-=--=-=
 
 
$cmd="\xFF\xFF\xFF\xFF"."getchallenge\x00";
 
syswrite $sock$cmd;
 
sysread $sock,$x,65535;
 if (
$x =~ /SERVERISFULL/) {
    print 
"[-] Server is full!\n";
    exit;
    }
 
elsif ($x =~ /BADPASSWORD/) {
    print 
"[-] Bad password!\n";
    exit;
    }
    
 
#=-====-===-==-=
 #= GET COOKIE =-
 #=-=-==-===-=-=======-==-=-=-=-=--=-=
 
 
$x=~/A00000000 (\d{10})\x20/;
 
$Cookie = $1;
 print 
' ==-=-= You Can Connect! =-===-='."\n";
 print 
' Cookie           = '.$Cookie."\n";

 
close $sock;
 print 
" ==-=-=-=-=-=-=-==-=-==-=-==-=-= \n";
 
sleep(5);
 }

##########################################################################
##########################################################################
########################################################################## 


geforse 09.01.2009 01:38

Полезная весч ... но можно и этим например ;)

eLWAux 09.01.2009 01:58

а на gametracker.com ти где сорси увидел?)))
плюс мои на perl (что гарантирует бистроту рототи) =P

m0Hze 09.01.2009 02:03

Цитата:

Сообщение от eLWAux
а на gametracker.com ти где сорси увидел?)))
плюс мои на perl (что гарантирует бистроту рототи) =P

В сорцах столько же ошибок? :D (Стеб)
А если серьезно,то много аналогов на php,yj на perl я не видел,воткну на сайт,потестирую.Спсибо.

rushter 09.01.2009 02:10

http://i055.radikal.ru/0901/9f/955250616467.jpg
Как я понимаю он определяет количесво мест на сервере ?,там 20мест...

Jer1cho 09.01.2009 02:17

Странный пакет он отправляет на запрос инфы сервера, давно снифил отправлял такое:

\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


Попробуй этим заменить $cmd="\xFF\xFF\xFF\xFF"."TSource Engine Query\x00";

oRb 09.01.2009 13:51

Цитата:

Сообщение от rushter
http://i055.radikal.ru/0901/9f/955250616467.jpg
Как я понимаю он определяет количесво мест на сервере ?,там 20мест...

Скрипт под 47 протокол, в 48 другая структура.
Вот наваял на php, держит оба протокола. Думаю ТС разберется и у себя подправит на перле.
PHP код:

<?
$server
['ip'] = "game.arbital.ru";$server['port'] = 27018;
//$server['ip'] = "csdm.ru";$server['port'] = 27015;
$fp fsockopen('udp://'.$server['ip'], $server['port']);
stream_set_timeout($fp2);
if(
$fp)
{
    
fwrite($fp,"\xFF\xFF\xFF\xFFTSource Engine Query\x00\r");
    
$temp fread($fp5);
    
$status socket_get_status($fp);
    if(
$status['unread_bytes']<1)
        continue;
    
$temp fread($fp$status['unread_bytes']);
    
$array = array();
    
$pos 0;
    while(
$pos !== false)
    {
        
$pos2 strpos($temp"\0"$pos+1);
        
$array[] = substr($temp$pos+1$pos2-$pos)."\n";
        
$pos $pos2;
    }
    if(
trim($array[2]) == 'cstrike')
    {
        
$server['players']    = ord($array[5][0]);
        
$server['maxplayers']    = ord($array[5][1]);
        
$server['name']    = trim($array[0]);
        
$server['map']    = trim($array[1]);
    }
    else
    {
        
$server['players']    = ord($array[5][0]);
        
$server['maxplayers']    = ord($array[5][1]);
        
$server['name']    = trim($array[1]);
        
$server['map']    = trim($array[2]);
    }
}
print_r($server);
?>


eLWAux 09.01.2009 14:39

Цитата:

Сообщение от oRb
Думаю ТС разберется и у себя подправит на перле.

oRb, спасибо, ТС розобрался), и щас себе подправит скрипт.. ;)

eLWAux 09.01.2009 16:02

UP

[i] обновил скрипт
[+] добавил проверку на LAC защиту

MaTpOc 09.01.2009 21:14

А куда ложить этот скрипт чтоб он заработал а то я совсес в этом деле новичек(?


Время: 20:35