![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Писк игровых серверов.Оптравка пакетов. [D7, WinXP]
XfroSt © (2006-12-07 20:06:00)Доброе время суток!
извиняюсь но это сообщене со скрин шотами можно посмореть тут: http://forum.sources.ru/index.php?showtopic=164045
Решил написать программу для поиска игровых серверов. Я понимаю что таких тем в форумах скопилось много, но меня интересуют конкретные вопросы. Кто разбирается в UDP и снифферах прошу помоч и ответить. Мне надо "зацепиться" за технологию определния.
Итак.
что я делаю.
1. Прошу запустить человека игровой сервер в локалке.
2. Включаю сниффер (предварительно определив какие порты использует игра через НетВью к примеру, в данном примере используется порт 8889 на прием и передачу)
3. Запускаю у себя клиент игры
переключаюсь в сниффер и вижу, что с меня уходит широковещательных пакет.
Как видно из скиншота пакет длинной 13 байт и его содержание : 'Ãâ.=÷*
XfroSt (2006-12-28 02:50:00) [1]2 arefart ©
Вот пример кода.
1. Читаю память в массив символов.
2. Можно просто убрать все символы строки #0, но я их заменяю.
Коряво но мне хватает, я перевожу для наглядности символы #0 в '#0'... но вариантов масса.
var
chbCL,chbSR : array[0..1024,0..1024] of char;
begin
// расшифровываем данные
FillMemory(@chbCL[PakLV.Items.Count][0],1024,0);
RemPort := ABinding.PeerPort;
lenCl[PakLV.Items.Count] :=AData.Read(chbCl[PakLV.Items.Count],1024);
// собираем строки
for i := 0 to lenCl[PakLV.Items.Count] do
if chbCL[PakLV.Items.Count][i] = #0 then
begin
s := s+'#0';
end
else
s := s+chbCL[PakLV.Items.Count][i];
with pakLV do
begin
ListItem := Items.Add;
Listitem.Caption := RemHost;
Listitem.SubItems.Add(IntToStr(RemPort));
Listitem.SubItems.Add('UDP');
Listitem.SubItems.Add(IntToStr(lenCl[PakLV.Items.Count-1]));
Listitem.SubItems.Add(s);
end;
end
arefart (2006-12-26 20:44:00) [2]Можеш написать как решил проблему? Мне тоже интересно, у меня похожая ситуация.
XfroSt (2006-12-22 20:52:00) [3]Все спасибо вопрос решен!
XfroSt (2006-12-08 18:24:00) [4]мда... в отладчике сморю при приеме идет конец строки после команд типа так ('ÿ', 'ÿ', 'ÿ', 'ÿ', 'I', #7, 'C', 'S', 'S', 'o', 'u', 'r', 'c', 'e', #0, 'd', 'e', '_', 'd', 'u', 's', 't', '3', #0, 'c', 's', 't', 'r', 'i', 'k', 'e', #0, 'C', 'o', 'u', 'n', 't', 'e', 'r', '-', 'S', 't', 'r', 'i', 'k', 'e', ':', ' ', 'S', 'o', 'u', 'r', 'c', 'e', #0, 'ð', #0, #1, ' ', #0, 'l', 'w', #0, #0, '1', '.', '0', '.', '0', '.', '2', '8', #0, и т.д... нули...
а можно как нибуть снять в Listitem.SubItems.Add(chb); все символы, что бы потом можно было отредактировать ? или просто поменять символ конца строки на другой ?
Орион (2006-12-08 16:46:00) [5]> Как получить остальное ?
что ты дальше делаешь с chb? Что-то вроде Memo1.Lines.Text:=string(chb)?
У тебя там символ с кодом #0 встречается - конец строки.
XfroSt (2006-12-08 16:18:00) [6]С отправкой разобрался, а вот с приемом...
Такая проблема, использую компонент TIdUDPServer
отсылаю им широковещательный запрос. в ответ приходит ответ.
читаю его так :
procedure TMF.udpserverUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
remhost : String;
chb : array[0..1024] of char;
remport,
Len : integer;
ListItem : TListItem ;
begin
FillMemory(@chb[0],1024,0);
RemHost := ABinding.PeerIP;
RemPort := ABinding.PeerPort;
Len:=AData.Read(chb,1024);
end;
но вот в чем проблема сниффепром вижу что пришел пакет размером Length: 0x0051 (81);
содержание пакета :
0x0000 00 16 17 B5 46 3E 00 13-D4 BE BC A7 08 00 45 00 ...µF>..O??§..E.
0x0010 00 65 73 EC 00 00 80 11-44 AD C0 A8 00 2F C0 A8 .esi..€.DA?./A?
0x0020 00 6F 69 87 69 87 00 51-F0 73 FF FF FF FF 49 07 .oi‡i‡.Q? syyyyI.
0x0030 53 61 6E 63 68 6F 00 63-73 5F 6D 61 6E 73 69 6F Sancho.cs_mansio
0x0040 6E 00 63 73 74 72 69 6B-65 00 43 6F 75 6E 74 65 n.cstrike.Counte
0x0050 72 2D 53 74 72 69 6B 65-3A 20 53 6F 75 72 63 65 r-Strike: Source
0x0060 00 F0 00 01 11 00 6C 77-00 00 31 2E 30 2E 30 2E .?....lw..1.0.0.
0x0070 32 38 00 28.
len показывает размер 71
а в chbприходит только yyyyI\x7Sancho
пробовал увеличивать размер буфера udpserverне помогает!
причем отладчим смотрю что chbне заполнена полностью тока начало дальше нули.
Как получить остальное ?