Тема: Counter Strike
Показать сообщение отдельно

  #3  
Старый 04.12.2008, 21:54
eLWAux
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме:
5111568

Репутация: 2399


Отправить сообщение для eLWAux с помощью ICQ
По умолчанию

(а вдруг ти перл знаеш?))

сорс для парсинга сервера, может тебе поможет..:
Код:
use IO::Socket;

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

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

 sub readFile {
 	open myFILE, "<$_[0]" or die $!;
 	while (<myFILE>) { chomp; $res.=$_; }
 	return $res;
 	close myFILE;
	}

 sub saveFile {
	open(myFILE,">$_[0]") || die "error: $!";
	print myFILE $_[1];
	close(myFILE);
	} 

 sub p { print '>'.$_[0]."<\n" }

 sub parce_info_1 {
	 my $x = $_[0];

	 $x =~ /\xFF\xFF\xFF\xFFm$host.$port\x00(\D+)/;
	 $Host_Name = $1.substr($',0,(index $',"\x00"));

	 $x = substr($x, 8+length($host.$port.$Host_Name),999);
	 $Map_Name = substr($x,0,(index $x,"\x00"));

	 $x = substr($x, length($Map_Name)+1, 999);
	 $Game_Dir = substr($x,0,(index $x,"\x00"));

	 $x = substr($x, length($Game_Dir)+1, 999);
	 $Game_Desc = substr($x,0,(index $x,"\x00"));
	
	 $x = substr($x, length($Game_Desc)+1, 999);
	 $Now_Players = hex(unpack('h',substr($x,0,1)));
	 $Max_Players = hex(unpack('H2',substr($x,1,1))); #???
	 $Protocol = hex(unpack('H2',substr($x,2,1)));
	 $S_type = substr($x,3,1);
		if ($S_type eq 'l') {$S_type='listen'}
		elsif ($S_type eq 'd') {$S_type='dedicated'}
	 $S_OS = substr($x,4,1);
		if ($S_OS eq 'l') {$S_OS='linux'}
		elsif ($S_OS eq 'w') {$S_OS='windows'}
	 $Passw = hex(unpack('H2',substr($x,5,1)));
		if ($Passw==0) {$Passw='no'} else {$Passw='yes'}
	 $Modded = hex(unpack('H2',substr($x,6,1)));
		if ($Modded==0) {$Modded='no'} else {$Modded='yes'}

	 $x = substr($x,7,999);
	 $Mod_url = substr($x,0,(index $x,"\x00"));

	 $x = substr($x,length($Mod_url)+1,999);
	 $Mod_dwn = substr($x,0,(index $x,"\x00"));

	 $x = substr($x,length($Mod_dwn)+1,999);

	 $x = substr($x,length($x)-2,1);
		if ($x==0) {$Secure = 'no'} else {$Secure = 'yes'}
	 
	 p('Secure         : '.$Secure      );
	 p('Mod_dwn        : '.$Mod_dwn     );
	 p('Mod_url        : '.$Mod_url     );
	 p('Modded         : '.$Modded      );
	 p('Passw          : '.$Passw       );
	 p('S_OS           : '.$S_OS        );
	 p('S_type         : '.$S_type      );
	 p('Protocol       : '.$Protocol    );
	 p('NowPlayers     : '.$Now_Players );
	 p('MaxPlayers     : '.$Max_Players );
	 p('HostName       : '.$Host_Name   );
	 p('MapName        : '.$Map_Name    );
	 p('GameDirectory  : '.$Game_Dir    );
	 p('GameDescription: '.$Game_Desc   );
	}
##########################################################################
##########################################################################
##########################################################################
 
 system('cls');

 $host = '85.214.34.55';
 $port = '27018';

 print '[i] '.$host.':'.$port."\n";

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

 $cmd="\xFF\xFF\xFF\xFF"."TSource Engine Query\x00";
 syswrite $sock, $cmd;
 sysread $sock,$x,65535; 
 #saveFile('f1.txt',$x);
 parce_info_1($x);


 $cmd="\xFF\xFF\xFF\xFF"."ping\x00";
 syswrite $sock, $cmd;
 sysread $sock,$x,65535; 
 #saveFile('ping.txt',$x);


 $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;
	}
 $x=~/A00000000 (\d{10})\x20/;
 $Cookie = $1;
 p('Cookie         : '.$Cookie);
 #saveFile('f2.txt',$x);

 close $sock; 

##########################################################################
##########################################################################
##########################################################################
кстате, на форуме я уже поднимал похожий вопрос:
https://forum.antichat.ru/thread93517.html

и там мне дали линки:
http://dev.int64.org/docs/gamestat-protocols/halflife.html
http://developer.valvesoftware.com/wiki/Server_Queries
http://developer.valvesoftware.com/wiki/Special:Search?search=protocol&go=Go
http://dump.ru/file/1249347 php class для работи с cs протоколом

вот что я сам нашел: http://www.securitylab.ru/analytics/216301.php лучшее!

и.. у меня возникли проблеми с отправкой пакетов "players" и "inforstring".. х3.. может єто с протокол связано..

разбирайся)

Последний раз редактировалось eLWAux; 04.12.2008 в 22:11.. Причина: сорс на перле)
 
Ответить с цитированием