PDA

Просмотр полной версии : Обработака пакетов


Pocuk
24.11.2011, 20:02
Хочу создать новый скрипт, но столкнулся с одной интересной проблемой, у меня есть пакет (неважно какой и откуда) из которого мне надо считать информацию - проблема в том что пакет имеет не статическую длинну другой информации. Звучит бредово, но постараюсь пояснить на примере:
пакет имеет вид такой:
шапка(ст) инфа_которою_надо_читать(ст) 34 00 ненужная_инфа(не_ст) инфа_которою_надо_читать(ст) 34 00 ненужная_инфа(не_ст) .....
где:
(ст) - стабильная длинна (наперед можем узнать)
(не_ст) - не стабильная длинна (наперед не можем узнать)

мне надо отталкиваясь от 34 00 прочитать несколько байт (например 4 байта), только не после, а перед етим 34 00.

Breadfan
24.11.2011, 20:04
ты бы хоть примеры разных вариаций привел. Но раз уж - он - "неважно какой" - сомневаюс что помогут.

Pocuk
24.11.2011, 20:14
да я только спростить все хотел, хотите живой пример - пожалуйста
http://zalil.ru/32126250
http://zalil.ru/32126252

Breadfan
24.11.2011, 20:22
а логом пх - слабо?

Pocuk
24.11.2011, 20:28
вы хотите узнать что я делаю? не проще прямо спросить?)

Breadfan
24.11.2011, 20:33
так я изначально и спрашивал про лог пакетов, то. И спрашивать - не проще. Нафига оно мне - если даже клиента аиона у меня нет? Вот если б лог - то намного проще будет.

Pocuk
24.11.2011, 20:44
если вам интересна расшифровка, то в л2пх она есть но она неверна (для моего сервера например)... и светить всем логом както не особо хочеться мало ли что найдет тот кому надо мой айди))

Breadfan
24.11.2011, 21:06
ну на нет и суда нет.

Pocuk
25.11.2011, 03:55
а что вы хотите найти в логе?

Добавлено через 6 часов 41 минуту
вроде придумал как обойти ето дело, просто сделал перебор всего хлама в пакете, но оно почемуто не совсем работает:

Var
i, lvl_1, lvl_2, ID : Integer;
Procedure Init;
begin
lvl_1:=100000;
lvl_2:=100600;
end;

Procedure Kill; //проверочная процедура.
begin
buf:=HStr('AA AA AA AA');
SendToServer;
pck:='';
end;

begin
if FromServer and (pck[1]=#$ХХ) then
begin
for i:=1 to 500 do
ID:=ReadD(i);
begin
if (ID>=lvl_1) and (ID<=lvl_2) then
begin
Kill;
end;
end;
end;
end.

по идее должно перебрать все содержимое пакета ХХ (брать по 4 байта), длинна пакета ХХ может быть разной (потому беру с запасом for i:=1 to 500), я знаю точно что значение ID (тоесть в пакете есть 4 байта которие = значению между lvl_1 и lvl_2) попадет между lvl_1 и lvl_2 после етого должна выполниться процедура Kill но она не работает. Если поставить только if (ID>=lvl_1) then или if (ID<=lvl_2) then то все работает на ура. В чем причина? Что мешает? да и еще таких ID может быть несколько, но думаю ето не важно.

АПД: все заработало.. я с числами напорол.
------------------------------------------------------------------------
Пишу новый скрипт и возникают новые проблемы с обработкой пакетов:
как преобразовать String в Integer ??
вот на таком примере:
если послать в чате сообщение пакет имеет вид B9 57 76 00 2F 00 2F 00 31 00 31 00 30 00 30 00 30 00 30 00 30 00 32 00 37 00 35 00 00 00 (в чате //1100000275) мне нужна ета часть 31 00 30 00 30 00 30 00 30 00 30 00 32 00 37 00 35 00 00 00 только прочитать как число 100000275(а не как String), потому что потом хочу ее использовать в другом пакете (а там уже надо ее числом представлять). Начало скрипта:
if FromClient and (ReadC(1)=$B9) then
begin
if (ReadS(5)='//1') then Pyx1:= "надо както преобразовать" ReadS(11);
АПД2:
нашол рабочий пример, уже применяю.

Pocuk
08.12.2011, 02:00
вопрос по перехвату: может ли л2пх перехватить пакет, использовать его и не дать пакету прийти к получателю (сервер\клиент)? если возможно такое то какой командой?:confused:

xkor
08.12.2011, 10:15
Pocuk, как понимать "использовать его"?)

J-Fobos
08.12.2011, 12:26
pck:='';