Кто нибудь знает как составить UDP пакет, что запросить у сервера counter strike информацию типа карты, количества игроков, пинг и т.д. Снифферами UDP пользоваться пока не научился.
Ну так научись - иначе как ты хочешь запросы составлять? Качай любой сниффер, читай доку, снифай запросы. А как будут конкретно вопросы по работоспособности кода - пиши.
Да пробовал я. Но там какие то каракули, особенно в wireshark. Нету что то похожево на HTTP Analyzer, только для UDP? Там на PHP, а я его не знаю. Хотелось бы просто пример UPD пакета. Как вот здесь например: Code: GET / HTTP/1.1[CRLF] Host: google.com[CRLF] Connection: close[CRLF] User-Agent: Web-sniffer/1.0.44 (+http://web-sniffer.net/)[CRLF] Accept-Encoding: gzip[CRLF] Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8[CRLF] Accept-Language: en-US,en;q=0.8,nb;q=0.6[CRLF] Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF] Cache-Control: no-cache[CRLF] [CRLF]
И какой пример ты ждешь? UDP не стандартизирует формат пользовательских данных, там может пересылаться что угодно в любом формате. Тем более сервер отдает данные в сжатом виде, если верить сорцу на пхп. Так что кроме каракулей в пакетах ты ничего и не увидишь.
GET and POST )) Они в протоколе HTTP. Ничего подобного в запросе к cs серверу нету. Как написали выше, здесь запросы идут в бинарном формате. В PHP скрипте можно посмотреть, как формируются пакеты. Если тебя интересует описание формата, смотри ту самую тему на хакере, там давали ссылку.
В гугле забанили ? PHP: procedure TForm1.btnInfoClick(Sender: TObject); var tempS:string[255]; Reply,count,maxCount:string; listReply:TStringList; i:Integer; begin Memo1.Lines.Clear; UdpSocket1.BlockMode:=bmNonBlocking;//неблокирующий режим UdpSocket1.RemoteHost:=edtIp.Text; UdpSocket1.RemotePort:=edtPort.Text; listReply:=TStringList.Create; try UdpSocket1.Open; UdpSocket1.Sendln('яяяяTSource Engine Query',' '); UdpSocket1.ReceiveBuf(tempS,255); UdpSocket1.WaitForData(1000);//сколько ждать данные Reply:=Reply+tempS; UdpSocket1.ReceiveBuf(tempS,255); Reply:=Reply+tempS; UdpSocket1.ReceiveBuf(tempS,255); Reply:=Reply+tempS; if Reply='' then begin Memo1.Lines.Add('Сервер недоступен!!!'); UdpSocket1.Close; Exit; end; Delete(Reply,1,4); for I := 0 to Length(Reply)-1 do begin if Reply=#0 then Reply:=#13; //#6 end; // Reply:=StringReplace(Reply,#6,#13#10,[rfReplaceAll,rfIgnoreCase]); listReply.text:=Reply; Memo1.Lines.Add('IP адрес сервера: '+listReply.Strings[0]); Memo1.Lines.Add('Название сервера: '+listReply.Strings[1]); Memo1.Lines.Add('Текущая карта: '+listReply.Strings[2]); Memo1.Lines.Add('Директория игры: '+listReply.Strings[3]); Memo1.Lines.Add('Описание: '+listReply.Strings[4]); tempS:=listReply.Strings[5];//hex count:=Copy(tempS,1,1);//Кол-во игроков на сервере maxCount:=Copy(tempS,2,1);//Максимальное кол-во игроков Memo1.Lines.Add('Кол-во игроков на сервере: '+IntToStr(HexToInt(count))); Memo1.Lines.Add('Максимальное кол-во игроков: '+IntToStr(HexToInt(maxCount))); finally listReply.Free; end; end; Данные все были в "нормальном" виде кроме значений кол-ва игроков которые были в hex для того, чтобы их перевести в integer использовал: function HexToInt(s: string): integer; label gte; var tempt: string; i: integer; begin tempt := ''; if s = '' then begin HexToInt := 0; goto gte; end; for i := 1 to Length(s) do begin tempt := tempt + IntToHex(Ord(s), 2); end; HexToInt := StrToInt('$' + tempt); gte: end;
DYUMON, лучше бы ты ссылку на код скинул, а не копировал сюда. Видимо не все скопировалось. Но в Гугле легко находиться.
Все заработало Оказывается нужно было всего лишь отправить "'яяяяTSource Engine Query'" DYUMON,Chrome~ спасибо за код!