мониторинг КС сервера 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); } ########################################################################## ########################################################################## ##########################################################################
Странный пакет он отправляет на запрос инфы сервера, давно снифил отправлял такое: \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 Попробуй этим заменить $cmd="\xFF\xFF\xFF\xFF"."TSource Engine Query\x00";
Скрипт под 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($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); ?>
качаеш перл: http://www.perl.org/get.html или activeperl: http://www.activestate.com/activeperl/?psbx=1 инстал.. и сохраняеш мой скрипт как: cs_server.pl и запускаеш