PDA

Просмотр полной версии : Помогите отловить коннект


Хламчег
13.10.2014, 15:29
Добрый день! у меня такая проблема, в пакетнике соединения без имени только надпись [Proxy]#464 и число, коннект соединения. А я запускаю несколько скриптов, и надо отловить соединение и чтоб только ему слался готовый измененый пакет. В переменной ConnectName ничего нет, пробовал выводить её содержимое в сообщении от чара, пусто. В переменной ConnectID значение 464, но один неприятный момент алгоритм начинает выполняться независимо от того какое значение коннекта, хоть 0 ставь туда. И на форуме читал что этот ИД всегда меняется если у тебя несколько персов.
У кого есть какие предложения по решению этой проблемы, или есть какойнибудь скрипт который вернёт имя чара в соединениях пакетхака. Или есть какие нибудь предложения по этой проблеме. мне надо так. Заранее подготовленые скрипты с пакетами, точнее 2 скрипта. И 3 перса. От первого перса идет пакет Социал Акшион, и сразу два скрипта срабатывают на этот пакет и каждый шлет заранее готовый пакет на сервер. Делается это для дюпа, и надо добиться почти идеальной отправки двух пакетов одновременно, с точностью до мсек. Так как если слать одним скриптом сначала одному персу а потом другому то все равно один пакет раньше другого будет послан и дюп не прокатит;) Жду помощи от вас дорогие друзья

Добавлено через 1 час 29 минут
Добавлю что важно то как слать определенному окну пакет а не во все окна чтоб скрипт слал готовый пакет

kpa9pt
13.10.2014, 23:08
Добрый день! у меня такая проблема, в пакетнике соединения без имени только надпись [Proxy]#464 и число, коннект соединения. А я запускаю несколько скриптов, и надо отловить соединение и чтоб только ему слался готовый измененый пакет. В переменной ConnectName ничего нет, пробовал выводить её содержимое в сообщении от чара, пусто. В переменной ConnectID значение 464, но один неприятный момент алгоритм начинает выполняться независимо от того какое значение коннекта, хоть 0 ставь туда. И на форуме читал что этот ИД всегда меняется если у тебя несколько персов.
У кого есть какие предложения по решению этой проблемы, или есть какойнибудь скрипт который вернёт имя чара в соединениях пакетхака. Или есть какие нибудь предложения по этой проблеме. мне надо так. Заранее подготовленые скрипты с пакетами, точнее 2 скрипта. И 3 перса. От первого перса идет пакет Социал Акшион, и сразу два скрипта срабатывают на этот пакет и каждый шлет заранее готовый пакет на сервер. Делается это для дюпа, и надо добиться почти идеальной отправки двух пакетов одновременно, с точностью до мсек. Так как если слать одним скриптом сначала одному персу а потом другому то все равно один пакет раньше другого будет послан и дюп не прокатит;) Жду помощи от вас дорогие друзья

Добавлено через 1 час 29 минут
Добавлю что важно то как слать определенному окну пакет а не во все окна чтоб скрипт слал готовый пакет

Я могу ошибаться, но скрипты выполняються сверху вниз по списку и первый сработает сначала один и потом второй, разница во времени будет, одновременно ты отправить с точностью до мс не сможешь:)
Могу ошибаться конечно

Хламчег
15.10.2014, 14:56
Я могу ошибаться, но скрипты выполняються сверху вниз по списку и первый сработает сначала один и потом второй, разница во времени будет, одновременно ты отправить с точностью до мс не сможешь:)
Могу ошибаться конечно

Ну в случае когда отправлял из одного скрипта двум персам по очередности разница была 0.1 мсек. а когда из двух разных скриптов то около 0.008 мсек, что хватало для дюпа. Но проблема не в этом. Как мне слать пакеты в разные окна.
Если отправить просто SendtoServer то отправляется нормально , а вот SendtoServerEX с указанием имени соединения не работает потомучто вместо имени соединения как я уже сказал стоит [Proxy]#464 , есть зацепка это ConnectID но как отправлять использовав этот ConnectID в данном примере коннект ид 464. Отправлять так SendtoserverEx(464) не получается и так тоже SendtoserverEx([Proxy]#464). Ничего не выходит. Что делать????:(

Добавлено через 1 минуту
В случае когда не указывается имя соединения просто SendtoServer два скрипта шлют пакеты в каждое окно. А мне надо чтоб каждый скрипт знал своё окно.

kpa9pt
15.10.2014, 18:15
Ну в случае когда отправлял из одного скрипта двум персам по очередности разница была 0.1 мсек. а когда из двух разных скриптов то около 0.008 мсек, что хватало для дюпа. Но проблема не в этом. Как мне слать пакеты в разные окна.
Если отправить просто SendtoServer то отправляется нормально , а вот SendtoServerEX с указанием имени соединения не работает потомучто вместо имени соединения как я уже сказал стоит [Proxy]#464 , есть зацепка это ConnectID но как отправлять использовав этот ConnectID в данном примере коннект ид 464. Отправлять так SendtoserverEx(464) не получается и так тоже SendtoserverEx([Proxy]#464). Ничего не выходит. Что делать????:(

Добавлено через 1 минуту
В случае когда не указывается имя соединения просто SendtoServer два скрипта шлют пакеты в каждое окно. А мне надо чтоб каждый скрипт знал своё окно.

http://l2ph.coderx.ru/arhive/l2ph_help/

function ConnectNameByID(id:integer):string
получает имя соединения по его идентификатору

Хламчег
15.10.2014, 22:12
Покажи пожалуйста на небольшом примере как делать так чтобы скрипт работал только с соединением с ид 464 например. Как использовать эту функцию? и её надо вписывать в отрезке кода где выполняется кусок при включении скрипта? покажи на примере фрагментов где используется эта функция, и там где уже отсылаем готовый пакет на соединение. И еще я встречался с такой проблемой. к примеру

begin
if fromServer and ConnectId=464 and (Pck[1]=#$1B)
then

В этому случае независимо какой ConnectID условие выполняется и скрипт начинает своё дело. Это косяк пакетхака или чё я не пойму. еслиб это срабатывало то я бы сразу написал 2 скрипта и в каждый работал бы только с тем соединением которое указано в условии. тоесть условие выполнено ИД совпадает с тем что в скрипте и пошла работа скрипта и в соседние окна не шлёт пакеты, каждый со своим соединением пашет.

kpa9pt
15.10.2014, 22:55
Покажи пожалуйста на небольшом примере как делать так чтобы скрипт работал только с соединением с ид 464 например. Как использовать эту функцию? и её надо вписывать в отрезке кода где выполняется кусок при включении скрипта? покажи на примере фрагментов где используется эта функция, и там где уже отсылаем готовый пакет на соединение. И еще я встречался с такой проблемой. к примеру

begin
if fromServer and ConnectId=464 and (Pck[1]=#$1B)
then

В этому случае независимо какой ConnectID условие выполняется и скрипт начинает своё дело. Это косяк пакетхака или чё я не пойму. еслиб это срабатывало то я бы сразу написал 2 скрипта и в каждый работал бы только с тем соединением которое указано в условии. тоесть условие выполнено ИД совпадает с тем что в скрипте и пошла работа скрипта и в соседние окна не шлёт пакеты, каждый со своим соединением пашет.

Ну ты говоришь у тебя нету Connectname есть только ID=464 так вот и отправляй SendToServerEx(ConnectNameByID(464));

Хламчег
16.10.2014, 12:52
Щас попробую

Хламчег
17.10.2014, 22:09
Короче теперь такая борода выходит , на примере этого скрипта показываю
begin
if FromClient and (ConnectName=(ConnectNameByID(456))) and (pck[1]=#$56) then
begin
pck:='';
buf:=#$49;
Writes('HELLO');
Writed(0);
SendtoserverEx(ConnectNameByID(456));
end;
end.

В весиях пакетхака l2phx.3.5.33.166 и l2phx.3.5.34.176 скрипт шлёт в окно пакет независимо от того какое число указывать, хоть 456 хоть 1 хоть 0. Если в начале (ConnectName=(ConnectNameByID(456))) тут указывать любое число он ловит соединение и шлёт на него пакет. Если тут указывать SendtoserverEx(ConnectNameByID(456)); то же самое. Короче что хочешь пиши всё равно работает. Это что касается этих версий пакетхака.
Что касается версии l2phx.3.5.33.171. Тут вообще наоборот. Всё прекрасно и перехватывает строго нужный коннект и шлёт строго на него. если не тот коннект скрипт не отсылает пакет на него. Но вот самый большой косяк, if FromClient and (pck[1]=#$56) then сделал вот так, и никакой реакции, вообще не работает, этот пакетхак не рабочий. Никакой реакции на пакеты, вот такой простой пример

begin
if FromClient and (pck[1]=#$56) then
begin
pck:='';
buf:=#$49;
Writes('HELLO');
Writed(0);
SendtoServer;
end;
end.

FromServer Тоже не дает никакого эффекта.

Добавлено через 3 минуты
Я вспомнил что раньше уже встречался с этой проблемой ,
Хламчег, http://coderx.ru/showthread.php?t=8537 . Но всё равно интересно почему некорректно работают функции ConnectNameByID. И как это исправить.

kpa9pt
18.10.2014, 06:33
begin
if FromClient and (pck[1]=#$56) then
begin
pck:='';
buf:=#$49;
Writes('HELLO');
Writed(0);
SendtoServer;
end;
end.


Не правда, такой код работает отдельно, видимо ты нагородил ерунды, и до него дело не доходит просто;)

SeregaZ
18.10.2014, 07:52
вставлю свои нубские 5 копеек на случай если команды такой действительно нет в синтаксисе... сразу скажу не проверял, но в теории будет работать:
1. заходим в папку с ладвой, копируем л2.ехе два раза.
2. одну копию называем что-то типа L2.VASYA.EXE или VASYA.L2.EXE - я забыл в каком варианте ладва запускается, а в каком нет... кароче или тот или тот :)
3. вторую копию L2.FEDYA.EXE или FEDYA.L2.EXE
4. запускаем две копии л2пх.
5. в одной копии ставим галку работать как прокси сервер и указываем порт... эм... какой там порт? 7788?
6. в другой копии ставим галку работать как прокси сервер и порт скажем 7789
7. запускаем проксифиер и создаем там правила перехвата для ехе файла федя - адрес 127.0.0.1 порт 7788, для ехе файла васи - 127.0.0.1 и порт 7789
8. после запускаем одну копию ладвы и вторую и логинимся каждый на своего персонажа.

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

п.с.: рекомендации для мазохистов, любящих сложности. я все-таки думаю что какая-то команда для такого "proxy" случая есть... пинайте атцов-основателей, чтоб они дали творческого пинка в ответ в нужном направлении :)

Antharas
18.10.2014, 12:22
SeregaZ, слушай ты сейчас развлекаешься чем то?) может пописать или помочь хочешь?)

Хламчег
18.10.2014, 19:36
Не правда, такой код работает отдельно, видимо ты нагородил ерунды, и до него дело не доходит просто;)
отдельно да я не спорю. но если я два таких скрипта одновременно запущу то каждый скрипт будет слать пакеты в каждое окно или же в то окно от которого пришел изначальный пакет
Мне надо так. 3 чара один стоит не рыпается.
двое стоят и под каждым чаром лежит итем к примеру.
Первый чар например пишет в чат чтонибудь.
Два скрипта настроены так что в первом скрипте Лежит готовый пакет на подбор итема чаром 2, а второй скрипт разумеется с готовым пакетом на подбор итема чаром 3, итемы у каждого свои.
Скрипты одновременно срабатывают на сообщение от первого чара, и каждый скрипт шлет готовый пакет на подбор итема своему окну. И чары одновременно поднимают итемы с пола.
Если слать пакеты функцией SendtoServer; без указания имени чара окна которому шлется пакет, то насколько я знаю пакеты от скрипта скорее всего пошлются в первое окно.
Напоминаю тем кто не знает в чем проблема. Проблема в том что нет имени соединения только [Proxy]#464 , есть только айди соединения но по нему вышеупомянутые функции не пашут ни хрена. Пашут но некорректно.
Надо чтобы окно знало куда слать пакеты, обязательное условие в скрипте чтоб было указано какому окну слать пакет.

Добавлено через 4 минуты
вставлю свои нубские 5 копеек на случай если команды такой действительно нет в синтаксисе... сразу скажу не проверял, но в теории будет работать:
1. заходим в папку с ладвой, копируем л2.ехе два раза.
2. одну копию называем что-то типа L2.VASYA.EXE или VASYA.L2.EXE - я забыл в каком варианте ладва запускается, а в каком нет... кароче или тот или тот :)
3. вторую копию L2.FEDYA.EXE или FEDYA.L2.EXE
4. запускаем две копии л2пх.
5. в одной копии ставим галку работать как прокси сервер и указываем порт... эм... какой там порт? 7788?
6. в другой копии ставим галку работать как прокси сервер и порт скажем 7789
7. запускаем проксифиер и создаем там правила перехвата для ехе файла федя - адрес 127.0.0.1 порт 7788, для ехе файла васи - 127.0.0.1 и порт 7789
8. после запускаем одну копию ладвы и вторую и логинимся каждый на своего персонажа.

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

п.с.: рекомендации для мазохистов, любящих сложности. я все-таки думаю что какая-то команда для такого "proxy" случая есть... пинайте атцов-основателей, чтоб они дали творческого пинка в ответ в нужном направлении :)
Твой метод можно использовать но там не будет синхронизации как ты сказал. С таким же успехом можно и на двух компах запустить окна. Но всё же они с каким то но значительным интервалом будут слать пакеты, что не будет удовлетворять потребности дюпа)

supernewbie
19.10.2014, 16:18
Хламчег, попробуй выяснить почему у соединений нет имени

Хламчег
20.10.2014, 13:27
Хламчег, попробуй выяснить почему у соединений нет имени

так как пакетник писался на заказ и начинает ловить траффик с геймсервера, траффик логина не показывается. И он перехватывает траффик на порту 7788, а траффик в свою очередь перехватывается с клиента Хуком в клиент, другими словами до того как клиент л2 шифрует траффик, тоесть до того как он пойдет в интернет. еще не защифрованный траффик клиента ловит. а клиент как слал так и шлёт траффик по соединению. тоесть там нет обхода шифрации, нет Нюксор файла. Может быть можно какой нибудт скрипт написать который имя задает по имени чара в пакете CharSelected , имя чара в пакетах есть. сервер Руофф

supernewbie
20.10.2014, 17:54
Хламчег, procedure SetName(Name:string)
задает имя для текущего соединения
действует для текущего обрабатываемого соединения либо, для явно установленного с помошью UseForConnectName имени соединения или установленного с помошью UseForConnectID идентификатора соединения.

Хламчег
21.10.2014, 22:44
Я делал так. В начале скрипта в куске который срабатывает при включении скрипта писал SetName(asd11); и соединение не переименовывалось, и проверял переменную ConnectName она так же как и была пустой так и осталась

Добавлено через 40 минут
Интересует вот это UseForConnectName , это что функция или процедура? и с чем их вообще есть? я если честно по этим делам чуть тормоз. подскажите плизз кому не тяжело. Можно ли этим как бы в полуручном режиме сменить название соединения. Всякие ритуалы с ConnectID и остальное не помогает так как ConnectID прыгает с одного окна на другое, тоесть это переменная для двух окон одна получается, сейчас она 464 а на какую то секунду две будет 455 например и опять станет 464, вот такую бороду заметил когда выводил эту переменную в сообщении от перса в игровой чат(((.

Писал в скайп Хкору, он ушел на покой( и помогать не стал, так как занят, ну его можно понять, у него времени нету. Если тут найдется чел кто мне поможет буду очень благодарен пишите в скайп giran1234 или сюда

Добавлено через 21 час 35 минут
Так же сегодня пробовал менять память процесса через артмани. Получилось такое что я нашел в памяти ячейку с названием подключения. Ставил на работу скрипт отправлял успешно в нужное окно, менял айди через Артмани, и получилось что не отправляло, тоесть название успешно сменилось. Потом менял в скрипте в функции SendToServerEx(); название соединения на то которое менял и успешно отправлялось. Но беда в том что в памяти я не смог найти определенную ячейку памяти в которой хранится название соединения. Так как память всегда бегает. И это очень тяжело так как не найти ячейку если она пуста.
Потом наткнулся на то что у меня пакет CharSelectedInfo кривой, в нем неправильно отображается ник персонажа, и некоторые данные. Если у кого есть Готовый пакет на Хроники Ertheia то скиньте пожалуста, очень надо. Самому долго придется править его. Для начала я пробовал, получилось что ник отображается правильно но всё же соединение не получает имя, после выбора чара. Беда

Хламчег
25.10.2014, 11:57
Решил свою проблему таким образом. Использовал setname();
Делал так. запускал пакетник. писал скрипт

if fromclient and (pck[1]=#$56) then
SetName('123');
begin
Buf:=#$49;
WriteS(ConnectName);
writed(0);
sendtoserver;
end;
end.

Скрипт делал такое. Когда запускалось действие СоциалАкшион, то скрипт изменял имя соединение с никакого на 123, и сразу же писал в чат 123.
После этой манипуляции соединение получало название 123, и можно было уже писать скрипты с условием and ConnectName=('123') и SendToserverEx('123');

Дальше переименовывал в скрипте 123 на любое другое имя и запускал, под другое окно. Как оба коннекта были проименованы запускал скрипты под них и всё прекрасно работало.

kpa9pt
25.10.2014, 20:24
Решил свою проблему таким образом. Использовал setname();
Делал так. запускал пакетник. писал скрипт

if fromclient and (pck[1]=#$56) then
SetName('123');
begin
Buf:=#$49;
WriteS(ConnectName);
writed(0);
sendtoserver;
end;
end.

Скрипт делал такое. Когда запускалось действие СоциалАкшион, то скрипт изменял имя соединение с никакого на 123, и сразу же писал в чат 123.
После этой манипуляции соединение получало название 123, и можно было уже писать скрипты с условием and ConnectName=('123') и SendToserverEx('123');

Дальше переименовывал в скрипте 123 на любое другое имя и запускал, под другое окно. Как оба коннекта были проименованы запускал скрипты под них и всё прекрасно работало.

Логичный вопрос))
Дюп то заработал?))

Хламчег
26.10.2014, 00:11
Логичный вопрос))
Дюп то заработал?))

К сожалению дюп не заработал(( Но не будем отчаиваться, дюпы они везде есть только их искать надо:p

SeregaZ
28.10.2014, 10:14
ааааа! читоры! на костёррррр! :)