PDA

Просмотр полной версии : Counter Strike


ronald
04.12.2008, 20:43
Народ, интересует как реализовать механизм подключения к серверу Counter-strike 1.6, из результатов снифера, понял, что там передаются специальные пакеты, а как это реализовать :confused: . Может кто подскажет?

De-visible
04.12.2008, 21:36
передать такие же пакеты.

eLWAux
04.12.2008, 21:54
(а вдруг ти перл знаеш?))

сорс для парсинга сервера, может тебе поможет..:
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, 23:27
через Delphi тебе надо сделать подключения через socket'и и отправлять некоторые пакети на серв.. ищи доки.. вот несколько:
http://www.example-code.com/delphi/socket.asp
http://forum.telenet.ru/index.php?showtopic=64203&st=0&p=1053520&#entry1053520
вот ирка: http://forum.sources.ru/index.php?showtopic=53816
http://faqs.org.ru/progr/pascal/delphi_internet2.htm
поищи на delphisources.ru примери..

описания пакетов тут: http://dev.int64.org/docs/gamestat-protocols/halflife.html

cylaaaan
04.12.2008, 23:35
скажи плз каким ты снифером пользовался?
я вот тоже хочу проследить действия с инетом опр. программы,а не знаю чем, попадаются только LAN сниферы ((

vikseriq
05.12.2008, 00:02
Wireshark, Iris

ronald
06.12.2008, 19:03
EtherDetect, ток у меня демка на 30 дней, аднако ломается простой переставкой системного времени

th13fnano
08.12.2008, 20:04
MultiSniffer - сниферитт все tcp пакеты - есть еще на фикипедии опенсорс сниффер погугли

vvs777
28.12.2008, 22:28
как реализовать механизм подключения к серверу Counter-strike 1.6
с помощью всего вышеописанного можно только подключиться.
Описания же, как отправить мессагу (для рекламы по сервакам), как передаются пинги, координаты итп нигде нет. + можно заметить что длина пакетов непостоянна.
Я над этим делом уже достаточно долго работаю.

ComradeBot тому пример.

A_V
03.01.2009, 18:21
Может я конечно бред говорю, но не проще заходить через саму КС?
ПРосто реализовать, что бы прога вбивала в консоль игры по очереди "Connect XXXXXXXXXXXX", где ХХХ - ИП, которые будет браться из Текстового файлика( ну к примеру пока так пусть будет), затем тайм аут на секунд 30, затем через консоль "say YYYYYYYYYYYYY", где игрик - реклама...

Вот принципе и все, дело за малым...

Chrome~
04.01.2009, 13:12
Может я конечно бред говорю, но не проще заходить через саму КС?
ПРосто реализовать, что бы прога вбивала в консоль игры по очереди "Connect XXXXXXXXXXXX", где ХХХ - ИП, которые будет браться из Текстового файлика( ну к примеру пока так пусть будет), затем тайм аут на секунд 30, затем через консоль "say YYYYYYYYYYYYY", где игрик - реклама...

Вот принципе и все, дело за малым...
Так делать не эффективно. Намного лучше написать программу, которая будет протокол использовать. Твой вариант подойдет в том случае, если написать нужно быстро. Но тогда все работать будет намного медленней.

x59
05.01.2009, 20:25
с помощью всего вышеописанного можно только подключиться.
Описания же, как отправить мессагу (для рекламы по сервакам), как передаются пинги, координаты итп нигде нет. + можно заметить что длина пакетов непостоянна.
Я над этим делом уже достаточно долго работаю.

ComradeBot тому пример.

на valve.developer написано что весь траф жмется Bzip2, так ли это?