| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Как перехватить HTTP - запрос? |
| Автор: Guest 9.12.2005, 17:34 |
| Здравствуйте. Мне нужно написать программу, которая будет постоянно висеть в памяти и регистрировать на какие сайты пользователь заходит (независимо от браузера). Интересует именно как перехватить это событие, когда пользователь загружает страницу, ну и URL этой страницы. |
| Автор: Snowy 9.12.2005, 17:39 |
| Это слишком сложно. Обычно такие вещи делают на уровне прокси сервера. |
| Автор: Guest 9.12.2005, 17:40 | ||
Ну можно же как-то контролировать исходящий траффик? |
| Автор: Snowy 9.12.2005, 17:48 | ||
Траффик да. Но собирать пакеты, вытаскивать из них данные, соединять их, отбрасывая лишнее... Это специализированный сниффер должен быть. Добавлено @ 17:49 Кстати, можешь спросить у гугля или т.п. на тему HTTP снифера. |
| Автор: Teran 9.12.2005, 17:58 |
| Guest когда раскопаеш что-то скинь сюда пожалуйста меня тоже эта тема интересует |
| Автор: Guest 9.12.2005, 19:29 |
| А если определять к каким айпишникам коннектится юзер и по ним получать урлы? |
| Автор: Darhazer 9.12.2005, 19:40 |
| Зачем так сложно. Программа регестрируеть себя как обработчика http ( HKEY_CLASSES_ROOT\HTTP\Sheel\open\command ) записиваеть адрес, а потом запускает браузер на этого адреса ;) |
| Автор: Guest 9.12.2005, 19:45 | ||
А поподробней можно? Лучше если на примере покажешь |
| Автор: Darhazer 9.12.2005, 19:52 | ||
| К стате, можеть быт так не получеться когда браузер уже запущен и пользватель пишет адрес в аддресной строке... ;) Но все таки - эта алтернатива -> копаться в реестре Добавлено @ 19:53
Можно по URL получить IP, но по IP->URL - нет, так как на одном сервере (одном IP) могут быть много сайтов (URL) |
| Автор: Snowy 9.12.2005, 20:34 | ||||
Это вообще не вариант. Запускаем браузер и все. Программа вообще ничего не видит.
Не серъезно. Как полумера пойдет, но результат ниже среднего. Так мы только домен определим. А если человек пошел на тот же narod.ru. Он может читать анекдоты, религиозную страничку или искать проф информацию. Мы этого по IP не определим - там тонны сайтов, а IPшников в сотни раз меньше (а может вообще один). Кроме того, всякого рода банеры тоже создают запросы, а реально мы получим информацию, что пользователь и туда ходил. |
| Автор: Guest 10.12.2005, 16:32 |
| Ну существуют же HTTP-снифферы и там это как-то реализовано ведь? |
| Автор: RA 10.12.2005, 17:40 |
| не хотел говрить но скажу Пища для размышления: у каждого браузера сущесвует журнал где хранится информация о посещаемых, и посещённых сайтах ... Можно перехватывать функции вызова из WinInet но имхо, это только для IE, а раз только для ИЕ, то проще иначе. ЗЫ: Для тех кто собрался писать сниффер http://forum.vingrad.ru/index.php?showtopic=70701 |
| Автор: Teran 27.12.2005, 11:40 |
| На самом деле всё это сделать очень легко и просто Кто заинтересуется могу рассказать подробно |
| Автор: Snowy 27.12.2005, 12:21 | ||||||
Из какого браузера? Из фиревокса или из оперы? А может из нетшкафа? А, если я вообще досовским арахном пользуюсь...
Действительно. И как мы все сразу не догадались, как это просто... Только результата нет...
Ну так расскажи. |
| Автор: Teran 27.12.2005, 12:42 | ||||
| необходимо просто напросто поставить хуки на: функции Send (WSOCK32.DLL) и SendTo (WSOCK32.DLL) Затем в обработчике отлавливать приходящий буфер, а именно http запрос структура у него приблизительно такая (Iexplore):
или такая(Opera):
т.е. просто необходимо витягивать первую строку, проверять на "Содержание GET, OPTIONS, POST, ...... смотри структуру HTTP запросов http://ru.wikipedia.org/wiki/HTTP" и все дела причем можно даже при совпадении какого нибудь Урла закрывать данный открытый сокет ЧЕМ ТЕБЕ НИ СНИФЕР????? (Работает в любой винде) Добавлено @ 12:49 Точно также если перехватывать recv (WSOCK32.DLL) и recvfrom (WSOCK32.DLL) можно фильтровать приходящие пакеты (напрмер я себе фильтрую приходящие ActiveX просто в приходящем пакете ищу совпадение с <object и (</object>) и делаю с ним ... |
| Автор: Teran 27.12.2005, 13:41 |
| Кстате здесь упоминалось про разнообразие браузеров |
| Автор: Teran 27.12.2005, 14:28 |
| И того получился полный джентельменский наборчик: мы знаем имя файла, который лезит в нет, IP адрес и порт по которому законектился сокет и ко всему прочиму URL (причем можно запрещать или пропускать) при необходимости можно еще просматривать что к нам пришло (фильтровать приходящие пакеты) Просто чудеса какие-то! |
| Автор: RA 27.12.2005, 14:29 | ||
Это для IE (что следует из названия функции) причём уверен в Com/ActiveX есть пример. |
| Автор: Teran 27.12.2005, 14:48 |
| Если нужно только для IE то можно просто перехватывать InternetOpenUrlA InternetOpenUrlW InternetCreateUrlA InternetCreateUrlW InternetCombineUrlA InternetCombineUrlW из wininet.dll |
| Автор: Гость_this 28.12.2005, 13:36 | ||
Действительно, чудеса |
| Автор: Guest 29.12.2005, 12:54 | ||
Teran
Одна проблемма, есть еще https... |
| Автор: Guest 30.12.2005, 14:09 | ||
Защел на: https://addons.mozilla.org/extensions/moreinfo.php?id=655 и вот что находится в отправляемом пакете(opera): CONNECT addons.mozilla.org:443 HTTP/1.0 User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.01 [ru] Host: addons.mozilla.org Proxy-Connection: close Connection: close я думаю что если искать на совпадение какой-то URL чтобы затем закрыть сокет, то все равно на какой сайт лезть: хоть http хоть https |
| Автор: Teran 30.12.2005, 14:15 |
| ведь не зависимо что набираеш в URL все равно формируется какойто пакет отправки, который можно прочесть и использовать "под себя" |
| Автор: Guest 3.1.2006, 10:26 | ||
Это если сидишь за прокси... |
| Автор: this 9.1.2006, 18:14 | ||
А не подскажешь как правильно перехватывать эти функции? |
| Автор: djmix777 18.7.2006, 08:13 |
| привет всем! тоже интересно как сделать, у кого есть исходники? помогите чем можете. Спасибо заранее! |
| Автор: RA 18.3.2008, 14:22 |
Прмер с исходником: http://madshi.net/appsniff.rar Необходимы: madshiCodeHook, VirtualTreeView, DelphiFundamentals. |
| Автор: dedal73rus 21.5.2009, 18:19 |
| разобрался с dll в которой пишутся функции перехвата.не пойму упорно что делать с этой длл (как вызывать из проекта) и как из получать буфер из этой длл ,а точнее из функции Send и SendTo. Просьба на статьи ms rem'а не отсылать,не могу понять((помогите люди |
| Автор: RA 24.5.2009, 04:45 | ||
Если ты про Appsniff то: Длл внедряется в процесс интересующего приложения, в котором длл принимает все Send-ы и Receiv-ы на себя а потом возвращает их процессу у которого она их перехватила, а также передаёт их копию твоему приложению. В примере всё есть . |
| Автор: malor 20.8.2009, 18:37 | ||
Кроме древней статьи http://www.sources.ru/cpp/cpp_ie_under_the_hood.shtml есть еще какие-нить руководства по перехвату "вызовов из WinInet" ? |
| Автор: hhhhhhhhhhhh 24.9.2011, 17:05 |
| Подскажите. Вот перехватил я функции send, wsasend, sendto. Проверяю буфер и в GET заголовке нахожу URL который хочу заблокировать. Возвращаю результат INVALID_SOCKET или SOCKET_ERROR. Все нормально, запрос обламывается, но начинает через определенные промежутки времени опять ломится по этому же адресу, видать по таймауту... Тут сказали что можно закрыть сокет, а как это правильно сделать? Как мертво обломить запрос, чтобы не ломился повторно? |