PDA

Просмотр полной версии : cs server monitoring


eLWAux
09.01.2009, 01:29
мониторинг КС сервера
version 0.2

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

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

perl source:
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
Полезная весч ... но можно и этим (http://www.gametracker.com/) например ;)

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

m0Hze
09.01.2009, 02:03
а на 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
http://i055.radikal.ru/0901/9f/955250616467.jpg
Как я понимаю он определяет количесво мест на сервере ?,там 20мест...
Скрипт под 47 протокол, в 48 другая структура.
Вот наваял на 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($fp, 2);
if($fp)
{
fwrite($fp,"\xFF\xFF\xFF\xFFTSource Engine Query\x00\r");
$temp = fread($fp, 5);
$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, спасибо, ТС розобрался), и щас себе подправит скрипт.. ;)

eLWAux
09.01.2009, 16:02
UP

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

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

rushter
09.01.2009, 21:19
Как вариант поставить Active perl зайти в cmd указать там путь к скрипту и набрать perl script.pl.
cd c:\scripts
perl script.pl

eLWAux
09.01.2009, 21:36
качаеш перл: http://www.perl.org/get.html
или activeperl: http://www.activestate.com/activeperl/?psbx=1
инстал..

и сохраняеш мой скрипт как: cs_server.pl
и запускаеш