Форум: "Сети";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
ВнизКак перехватить сообщение ICQ (QIP) и ответить на него? Найти похожие ветки
← →
Volf_555 © (2006-03-17 12:59) [0]Мне нужно написать прогу, которая будет перехватывать приходящие сообщения через ICQ (QIP) и отвечать на них.
То есть, моя прога должна уметь делать:
-принять пришедшее сообщение. Условие - это сообщение должно отобразиться/не отобразиться как в ICQ (QIP), так и в моей программе. Настраиваемый параметр
-определить UIN отправителя сообщения
-определить текст сообщения
-проанализировать текст пришедшего сообщения
-отправить результат на UIN отправителя
Как такое осуществить?
← →
Piter © (2006-03-18 01:10) [1]Если QiP поддерживает плагины как Miranda - копай в ту сторону.
Если нет - то внедрение в процесс QiP"а, перехват WinApi функций по работе с сокетами, перехват трафика QiP"а, его анализ.
Нетривиальная задача. Судя по всему - забудь.
← →
GanibalLector © (2006-03-18 11:29) [2]2 Piter
>Если нет - то внедрение в процесс QiP"а, перехват WinApi функций по работе с сокетами
Это ты загнул. Обычный сниффер делается на опред.адрес,порт(на Raw).Исходников полно ;)
← →
Piter © (2006-03-18 15:47) [3]GanibalLector © (18.03.06 11:29) [2]
Обычный сниффер делается на опред.адрес
а что, снифер умеет:
Volf_555 © (17.03.06 12:59)
это сообщение должно отобразиться/не отобразиться
-отправить результат на UIN отправителя
Да?
К тому же, ты хочешь сказать, что снифер пишется легче, чем перехват WinApi? Готовая библиотека аля WinPCap не совсем подойдет по вышеозначенным причинам. Писать свой драйвер? :)
ЧТо касается возможностей WinSock2 по работе RAW - то это во-первых, только для группы администраторов, по-моему, да и поддержка только начиная с win2000 вроде.
← →
GanibalLector © (2006-03-18 16:42) [4]2 Piter
Естественно,твоя правда тут есть ;) Сообщения будут доходить всегда.
>отправить результат на UIN отправителя
А это тут при чем? В задачи снифера это не входит. Да и в общем,я думаю, что не такая сложная задача создать клиента для Аси.
>ы хочешь сказать, что снифер пишется легче, чем перехват WinApi?
Да. Посмотри исходники на http://rouse.front.ru/
> и поддержка только начиная с win2000 вроде
Тоже ты прав. А иначе "Судя по всему - забудь."
← →
Piter © (2006-03-18 17:24) [5]GanibalLector © (18.03.06 16:42) [4]
>отправить результат на UIN отправителя
А это тут при чем? В задачи снифера это не входит
странный ты! Это входит в задачу автора!
Ты ему предложил снифер и сказал, что уже в задачу снифера это не входит, оригинально :)))
← →
GanibalLector © (2006-03-18 19:35) [6]2 Piter
Я предложил использовать RAW для написания небольшого сниффера ВМЕСТО ВНЕДРЕНИЯ! и говорил я не автору,а ТЕБЕ! Т.к. твои идеи из серии "Судя по всему - забудь."
З.Ы. Дальнейший спор считаю бесполезным.
>странный ты!
Знаешь,ты тоже не подарок!
← →
Piter © (2006-03-18 20:55) [7]GanibalLector © (18.03.06 19:35) [6]
Я предложил использовать RAW для написания небольшого сниффера ВМЕСТО ВНЕДРЕНИЯ
дык, это не равноценная замена. Внедрение позволит ПОЛНОСТЬЮ контролировать трафик, в том числе пропускать / не пропускать.
А вот снифер позволит только читать трафик.
← →
Piter © (2006-03-18 20:55) [8]о чем я тебе тут и говорю.
← →
Volf_555 © (2006-03-19 15:00) [9]Спасибо за интерес к моему вопросу!
> GanibalLector © (18.03.06 16:42) [4]
> 2 Piter
> Естественно,твоя правда тут есть ;) Сообщения будут доходить
> всегда.
>
> >отправить результат на UIN отправителя
> А это тут при чем? В задачи снифера это не входит. Да и
> в общем,я думаю, что не такая сложная задача создать клиента
> для Аси.
>
> >ы хочешь сказать, что снифер пишется легче, чем перехват
> WinApi?
> Да. Посмотри исходники на http://rouse.front.ru/
>
> > и поддержка только начиная с win2000 вроде
> Тоже ты прав. А иначе "Судя по всему - забудь."
Спасибо за ссылку! Буду разбираться с исходниками
> Piter © (18.03.06 17:24) [5]
> GanibalLector © (18.03.06 16:42) [4]
> >отправить результат на UIN отправителя
> А это тут при чем? В задачи снифера это не входит
>
> странный ты! Это входит в задачу автора!
>
> Ты ему предложил снифер и сказал, что уже в задачу снифера
> это не входит, оригинально :)))
Да. Это в мою задачу входит. Но я думаю, что не составит труда отправить сообщение на UIN отправителя. На некоторых сайтах есть возможность отправки сообщения на UIN, например на http://www.mobile-portal.kiev.ua/sms.phtml?t=sendicq.
Я тут подумал - может быть проще сделать так:
1) запустить QIP и мою программу, которая будет следить за новыми сообщениями
2) при приходе нового сообщения моя программа перехватывает всплывающее окно сообщения и анализирует - то есть определяет UIN отправителя и текст сообщения
3) проанализировать, изменить текст ответа и нажать на кнопку Отправить
Только вот как определить приход нового сообщения+UIN отправителя+текст сообщения - остаётся загадкой
← →
seeker © (2006-03-20 09:49) [10]2Volf_555
Судя по твоей задаче, без перехвата API не обойтись...
> Только вот как определить приход нового сообщения+UIN отправителя+текст
> сообщения - остаётся загадкой
А тут все просто, нужно только найти заголовок любого flap-пакета, а остальное дело техники.
Единственная проблема, отправка сообщений мимо клиента приведет к сбою, т.к. у каждого пакета свой идентификатор на 1 больше чем у предыдущего.Тобишь отправить пакет и получить на него ответ можно, но отправка пакета самим клиентом(а он не знает что отправлялись пакеты без него) привидет к тому, что сервер разорвет соединение. Но и это можно обойти путем правки во всех последующих пакетах их SEQ.
Так что перехват API тебе в руки.
← →
Volf_555 © (2006-03-20 21:11) [11]
> seeker © (20.03.06 09:49) [10]
> 2Volf_555
> Судя по твоей задаче, без перехвата API не обойтись...
>
> > Только вот как определить приход нового сообщения+UIN
> отправителя+текст
> > сообщения - остаётся загадкой
>
> А тут все просто, нужно только найти заголовок любого flap-
> пакета, а остальное дело техники.
> Единственная проблема, отправка сообщений мимо клиента приведет
> к сбою, т.к. у каждого пакета свой идентификатор на 1 больше
> чем у предыдущего.Тобишь отправить пакет и получить на него
> ответ можно, но отправка пакета самим клиентом(а он не знает
> что отправлялись пакеты без него) привидет к тому, что сервер
> разорвет соединение. Но и это можно обойти путем правки
> во всех последующих пакетах их SEQ.
> Так что перехват API тебе в руки.
Просто :)
Для тебя может быть и да...
Если тут всё просто, то напиши как найти заголовок flap-пакета!
← →
seeker © (2006-03-21 12:43) [12]Как правило все клиенты отправляют пакет целиком, так что можно считать что при перехвате send buf будет указывать на начало пакета а len его длинну.
> Если тут всё просто, то напиши как найти заголовок flap-
> пакета!
первый байт - ord("*")
второй байт - = #0 или > #4
5 и 6 байты это длинна flap-пакета(в сетевом парядке).
считаем что нумерация идет с нулевого байта
if (buf[0] = ord("*")) and ((buf[0] = 0) оr (buf[0] > 4)) then
begin
// заголовок верен
if swap(word((@buf[4])^)) >= len then
begin
// пакет отправляется полностью
end
else
begin
// пакет отправляется не полностью, нужно добавить его в очередь
end;
end;
вот как это сделано в крысе
type
TflapQueue=class(Tobject)
buff:string;
constructor create;
procedure add(s:string);
function error:boolean; // errore di protocollo, и necessario invocare popError per continuare
function errorTill:integer; // fino a questo byte i dati sono considerati errati
function available:boolean; // disponibilitа di un pacchetto
function pop:string; // estrale il pacchetto
function popError:string; // estrae i dati errati dalla coda
function bodySize:integer;
procedure reset;
end; // TflapQueue
...
function word_BEat(p:pointer):word;
begin result:=swap(word(p^)) end;
constructor TflapQueue.create;
begin reset end;
procedure TflapQueue.reset;
begin buff:="" end;
procedure TflapQueue.add(s:string);
begin buff:=buff+s end;
function TflapQueue.error:boolean;
begin
error:=((buff>"") and (buff[1]<>"*"))
or ((length(buff)>1) and ((buff[2]=#0) or (buff[2]>#5)))
end; // error
function TflapQueue.errorTill:integer;
begin
result:=-1;
if buff="" then exit;
result:=1;
while (result<=length(buff)) and
((buff[result]<>"*") or (result<length(buff)) and ((buff[result+1]=#0) or (buff[result+1]>#4))) do
inc(result);
end; // errorTill
function TflapQueue.popError:string;
var
i:integer;
begin
i:=errorTill;
result:=copy(buff,1,i);
delete(buff,1,i);
end; // popError
function TflapQueue.bodySize:integer;
begin result:=word_BEat(@buff[5]) end;
function TflapQueue.available:boolean;
begin
result:=not error
and (length(buff) >= FLAP_HEAD_SIZE) // bodysize exists only if this is true
and (length(buff) >= FLAP_HEAD_SIZE+bodySize)
end; // available
function TflapQueue.pop:string;
begin
if not available then
begin
result:="";
exit;
end;
result:=copy(buff,1,FLAP_HEAD_SIZE+bodysize);
delete(buff,1,FLAP_HEAD_SIZE+bodySize);
end; // pop
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.011 c