Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
7 / 7 / 2
Регистрация: 20.01.2011
Сообщений: 73
1

Хуки винсоковских функций

07.03.2014, 17:09. Показов 899. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

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

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2014, 17:09
Ответы с готовыми решениями:

Хуки
Доброго времени суток. Господа, объясните мне темному и недалекому как использовать хуки. Вроде бы...

Хуки
Есть приложение, которые собирает все что нажимается на клаве. Сниффается все отлично, есть вывод в...

Хуки
Всем привет. Есть задача следующего рода Написать хуки для SVN. Pre-commit: проверяет формат...

Хуки
Добрый день! Не могу найти нормальной инфы про хуки. Совершенно ничего, только громоздкие примеры...

10
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
07.03.2014, 20:10 2
Лучший ответ Сообщение было отмечено WinstonCherchil как решение

Решение

Цитата Сообщение от WinstonCherchil Посмотреть сообщение
Являются ли хуки винсоковских функций единственным способом получить возможность редактировать трафик сторонних приложений на лету?
Нет, конечно !
Я бы сказал, что хуки являются одним из примитивнейших решений
этой задачи, и решением далеко не самым лучшим.

Обычно для таких вещей пишут всякие фильтры типа LSP, TDI, WFP или
NDIS (Intermediate/Lightweight). В любом случае задача не из простых.
Мягко говоря.
1
7 / 7 / 2
Регистрация: 20.01.2011
Сообщений: 73
08.03.2014, 16:06  [ТС] 3
Большое спасибо. Погуглил, ЛСП выглядет интересной. А конечным пользователям надо будет устанавливать что-нибудь?

Добавлено через 11 минут
WFP тоже заинтересовал. Тот же вопрос и про него.

Ориентируюсь на Win-7 и старше. (Ну может быть еще Свиста.)

Добавлено через 1 час 23 минуты
Всё, большое спасибо, Убежденный. Остановлюсь на WFP. Прямо то что нужно. И справка хорошая, и примеры есть и гуглится хорошо. Вы мне очень много времени сэкономили =)
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
08.03.2014, 23:18 4
Цитата Сообщение от WinstonCherchil Посмотреть сообщение
Погуглил, ЛСП выглядет интересной.
LSP хороша в первую очередь тем, что программируется целиком в режиме
пользователя, и если вы более-менее знакомы с разными моделями сокетного
ввода-вывода в Windows, ничего особо нового осваивать не придется.
Достаточно раскопать где-нибудь парочку мануалов и повкуривать несколько
вечеров исходники стандартного примера из Windiws SDK.

С другой стороны, у LSP есть несколько недостатков, из-за которых он редко
применяется в продуктах коммерческого уровня.

Цитата Сообщение от WinstonCherchil Посмотреть сообщение
Остановлюсь на WFP. Прямо то что нужно. И справка хорошая, и примеры есть и гуглится хорошо. Вы мне очень много времени сэкономили =)
Не хотелось бы разочаровывать, но из того объема времени и сил, который Вам
придется вбухать в такую непростую тему, как модификация трафика на лету,
эта экономия - копейки...
1
7 / 7 / 2
Регистрация: 20.01.2011
Сообщений: 73
09.03.2014, 16:05  [ТС] 5
Цитата Сообщение от Убежденный Посмотреть сообщение
Не хотелось бы разочаровывать, но из того объема времени и сил, который Вам
придется вбухать в такую непростую тему, как модификация трафика на лету,
эта экономия - копейки...
Учитывая то, что моя цель не протокол TCP/IP, а протокол самих приложений, думаю мне не придется менять заголовки пакетов, и прочие низкоуровневые кошмары. По большому счету все что требуется от программы это менять информацию отправленную клиентом к серверу (или наоборот), выкидывать некоторые сообщения и посылать собственные, от лица клиента или сервера.

Например если пользователь пытается реализовать свой собственный эмулятор сервера, то ему каким-то образом придется подключать валидный клиент к нему. При этом клиент может не поддерживать всякие прокси и постоянно будет терять с ним соединение из-за ошибок самого протокола в дебаг версии эмулятора сервера. Собственно эту проблему я пытаюсь решить.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
09.03.2014, 18:06 6
Цитата Сообщение от WinstonCherchil Посмотреть сообщение
Учитывая то, что моя цель не протокол TCP/IP, а протокол самих приложений, думаю мне не придется менять заголовки пакетов, и прочие низкоуровневые кошмары. По большому счету все что требуется от программы это менять информацию отправленную клиентом к серверу (или наоборот), выкидывать некоторые сообщения и посылать собственные, от лица клиента или сервера.
В Windows прикладные протоколы можно фильтровать только на уровне
TCP/IP или ниже. Перехватывать сразу "готовый" HTTP или FTP не выйдет.
На TCP/IP действительно не нужно будет возиться с заголовками IP-пакетов
или сбором из них потока данных, но не в этом дело. Там и без этого масса
других "заморочек", которые сильно все усложняют. Можно на примере
фильтрации HTTP рассмотреть, там простая на вид задача - вырезать
некоторое содержимое с веб-страниц - выливается в разработку целого
конвейера обработчиков, с задержкой запросов-ответов, правкой заголовков,
поддержкой gzip/zlib, кодировок и всяких специфических вещей типа
100-Continue, chunked encoding и т.д.
1
7 / 7 / 2
Регистрация: 20.01.2011
Сообщений: 73
09.03.2014, 19:30  [ТС] 7
Предназначение программы, которую я пишу - создание автоматических тестов других программ. Например, тот же эмулятор сервера. Что бы исправить в нем какие-то ошибки или добавить функционал, очевидно, его надо остановить и пересобрать (если пишется на С++). Соответственно все клиенты которые были к нему подключены потеряют сессию с ним. Что бы после запуска опробывать новый функционал или проверить исправлена ли ошибка, может понадобиться подключение тех же клиентов, пройти этапы авторизации, открытие окошек с добавлеными/исправлеными модулями. Затем уже тестировщик, а то и сам програмист уже в этом окошке будет тыкать мышкой, что бы посмотреть как его детище работает. И что бы тестировщикам не приходилось каждый раз тратить время на прохождение исправных этапов работы программы, моя программа будет делать это за них, со свойсвенной компьютеру скоростью. Т.е. кликать мышкой по кнопкам, вводить логин и пароль, путешествовать по менюшкам и т.п.

Модуль моей программы, связанный с перехватом трафика нужен для визуализации этого трафика в первую очередь. Во вторую для того что бы программа могла реагировать на сообщения TCP, вводом мышкой и клавиатурой в тестируемое ПО. В третью (если кто-то из комьюнити написал соответствующие расширения для моей проги) уже для редактирования этого трафика, уничтожения или создания сообщений. Скорее всего это будет использоваться для создания илюзии валидности клиента или сервера, при написании своих клиентов или серверов.

С тойже целью в програму планируется добавить возможность чтения памяти процесса, перехват сообщений виндоус, ну и какой-нибудь функционал для реагирования на окружение тестируемого ПО. (Объемы дисков или ОЗУ, для очищения кешей или перезапуска ПО, работа других программ, время/дата, фаза Луны)

В своей программе я пытаюсь создать тепличные условия для разработчиков и тестировщиков. Предоставить высокоуровневый API для расширений, удобные инструменты для создания фильтров трафика, автоматического опознования приложений (может кто-то уже занимался похожей задачей), ну и инструменты для группового тестирования ПО.

Таким образом заранее знать какое ПО будут тестировать моей программой невозможно (хотя я догадываюсь кому она приглянется в первую очередь). Соответственно нет никакой возможности реализовывать какие-то конкретные прикладные протоколы. Хотя для заманухи придется сделать пару родных расширений, хотя бы с целью проверки и тестирования АПИ.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
09.03.2014, 21:08 8
Лучший ответ Сообщение было отмечено WinstonCherchil как решение

Решение

По поводу первых двух абзацев.
По-моему, как раз тот самый случай, когда выбраны неверные средства.
Вам здесь не нужен перехватчик трафика со всякими "примочками", позволяющими
изменять контент на лету. Не нужен в первую очередь потому, что на более-менее
качественную реализацию этой задачи могут уйти месяцы и даже годы. Это я
считаю по себе, так как приходилось заниматься такими вещами по работе, хотя
вовсе не исключаю возможности, что кто-то более талантливый написал бы
аналогичный проект раза в два или три быстрее. Но это все равно долго...

Здесь вполне будет достаточно прокси-сервера и какого-нибудь редиректора в
сетевом стеке. Т.е. редиректор хватает исходящие коннекты и незаметно для
приложения перенаправляет их на 127.0.0.1, а там висит прокси-сервер,
который выполняет нужную обработку запросов. Вот и вся система.
Приложение продолжает "думать", что установило коннект с оригинальным
сервером, а на самом деле оно "разговаривает" с прокси. Написать такое в
разы проще, а эффект в контексте задачи, которую Вы описываете, будет тот же.

Сам прокси можно (и нужно) сделать целиком в user mode, лучше на базе
готовых компонентов, возможно на каком-нибудь .NET/Java или вообще на скриптах.
Получится в итоге просто, надежно и расширяемо.
1
7 / 7 / 2
Регистрация: 20.01.2011
Сообщений: 73
09.03.2014, 23:01  [ТС] 9
Цитата Сообщение от Убежденный Посмотреть сообщение
редиректор хватает исходящие коннекты и незаметно для
приложения перенаправляет их на 127.0.0.1,
Да это именно то что мне и нужно.

Для этого редиректора ВФП подойдет? Или эта задача решается более простыми методами? Прокси я откинул, потому что, насколько мне известно, это отдельный протокол, и сами приложения должны уметь с ними работать, в противном случае придется много извращаться с теми же редиректорами, в которых реализован этот протокол. (Я правильно все понимаю?) Ну а то что сетевой модуль будет во многом напоминать проси - это правда.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
09.03.2014, 23:40 10
Цитата Сообщение от WinstonCherchil Посмотреть сообщение
Для этого редиректора ВФП подойдет?
Подойдет. Редирект в WFP появился в Windows 7, на Vista тоже возможен,
только чуть посложнее.

Прокси я откинул, потому что, насколько мне известно, это отдельный протокол, и сами приложения должны уметь с ними работать
Здесь редирект и прокси прозрачные, приложения о них "не подозревают".
По такому же, кстати, принципу, работают всякие коммерческие спам-фильтры,
программы родительского контроля, фаерволы...
1
7 / 7 / 2
Регистрация: 20.01.2011
Сообщений: 73
10.03.2014, 00:02  [ТС] 11
Спасибо за исчерпывающие ответы. Чуствую скоро вернусь с глупыми вопросами про WFP =)
0
10.03.2014, 00:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2014, 00:02
Помогаю со студенческими работами здесь

Хуки Длл
Надо подсчитать время активности калькулятора Вешаю на калькулятор свою дллку с хуками. хук CBT...

И снова эти хуки
Здравствуйте форумчане. Знакомлюсь с хуками и возникла такая вот проблема. В приведенной программе...

Перехват клавиш ( хуки )
И так я уже написал программу ( которая отлавливает нажатия клавиш и передает их в текстбокс...

Глобальные хуки и разрядность
Реализовал у себя в приложении хук на перемещение мыши. В итоге, при перемещении мыши к правой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru