Сейчас на форуме: vasilevradislav, tyns777, zombi-vadim (+3 невидимых) |
![]() |
eXeL@B —› Программирование —› Сокеты |
Посл.ответ | Сообщение |
|
Создано: 30 января 2008 02:58 · Поправил: smex · Личное сообщение · #1 Доброго времени суток уважаемые форумчане. Вот уже 2 ночи а я все не могу догнать кой чего... Если быть кратким то сразу вопрос - сокеты это относительно низкоуровневый интерфейс для работы с сетью (т.е. все высокоуровневые проги работают так или иначе через сокеты) либо сокеты это просто однин из интерфейсов для работы с сетью? Т.е. к примеру по аналогии с функцией API ZwQueryDirectoryFile - эту функцию как "ядро" использует множество других функций, так ли дело обстоит с сокетами. Заранее благодарю всех всех всех ). ![]() |
|
Создано: 30 января 2008 05:00 · Личное сообщение · #2 smex, socket это стандартный API для работы с сетью на windows. Концепция была влята с unix систем где socket можно открыть и локальный (не TCP) и разговаривать с другой прогой запущенной на том же компе. Интерфейс winsock 1.1 это копия Berkeley sockets реализованая на windows. Внизу, в ядре, есть модуль tcpip.sys который реализовывает IP, TCP, ARP, и т.д. Ещё ниже живёт NDIS который связывает драйвера сетевых карт с протоколами. Короче, socket это абстрактный API, где можно выбирать протоколы en.wikipedia.org/wiki/Berkeley_sockets ![]() |
|
Создано: 30 января 2008 05:14 · Поправил: smex · Личное сообщение · #3 Собственно что хотел узнать,s0larian наверно не много недопонял,или я как обычно криво объясняю что надо. Так вот К примеру есть приложение на прямую не используещее сокеты ( к примеру через MFC), так вот это предложение если отправит данные то они могут пройти мимо сокетов или сокеты это ступенька лесницы, которую так или иначе используют все приложения. PS: Или попробую еще немного перефразировать - смогу ли я ловить попытки прог вылести в инет перехватывая функции для работы с сокетами? PS2: Выкрутасы типа драйвера и тд не в счет, нада не давать инет простеньким прогам - браузер, почта, торрнет и так далее в этом духе. ![]() |
|
Создано: 30 января 2008 10:23 · Поправил: s0larian · Личное сообщение · #4 |
|
Создано: 30 января 2008 10:37 · Личное сообщение · #5 |
|
Создано: 30 января 2008 11:00 · Личное сообщение · #6 "Браузер, почта, торрнет и так далее в этом духе" эти приложения точно юзают сокеты. Только вот перехват всех функций это очень большая работа, которая может привести к нестабильности системы. К тому же как собрались перехватывать? Для произвольного процесса тоже работенка еще та, тут лоадером не отделаешься. К томуже ws2_32.dll библиотека обертка пользовательского режима, которая использует "настоящие" API режима ядра через DeviceIOControl. Т.е. некоторые приложения вроде снифферов могут напрямую обращаться к объектам ядра. Если я правильно помню в винде есть API Layered Service Provider/Service Provider Interface (LSP/SPI) , позволяющие получать подробную информацию о состоянии стеков, установленных соединениях, активности процессов и воздействовать на них, модифицировать трафик. В MSDN есть раздел под названием Winsock SPI Functions посвященный этим API. ![]() |
|
Создано: 31 января 2008 02:11 · Поправил: smex · Личное сообщение · #7 Насчет ws2_32.dll всем большое спасибо - не знал. Но главное что енто возможно, а API передающие управление в драйвер ведь тоже можно перехватить... Пошел читать MSDN. PS: Насчет способа перехвата - думаю на библиотеку хук поставить чтобы во все оконные приложения загружалась. Способ уже мной проверенный, глюков не вызывал. ![]() |
|
Создано: 31 января 2008 04:09 · Личное сообщение · #8 |
|
Создано: 01 февраля 2008 08:11 · Поправил: smex · Личное сообщение · #9 Ого, все не так просто как мне кажется. А если перехватывать не экспорт в длл, а внедряться в каждую прогу и перехватывать нужные функции. Согласен это извращение, но как я понимаю другого выхода у меня нет... Или может кто подскажет что, направит куда нибудь (только не на три буквы), нужен простенький Ring3 фаерволл. PS: Блин смудил, хотел поблагодарить всех а потом тему закрыть.. Промазал мимо кнопки. Короч свиду меня вы направили в нужном направлении, всем большое спасибо за помощь, ссылки и поддержку. ))) ![]() |
|
Создано: 01 февраля 2008 10:01 · Поправил: s0larian · Личное сообщение · #10 smex, ты не догоняешь главного - с winsock2 можно сокету "присвоить" event handle и сказать что ты именно так ты хочешь узнавать когда приходят данные. Потом следует WaitForSingleObject(). Что ты будешь перехватывать в таком случае? ![]() Firewall делается в ядре, на уровне NDIS (пакекты), то есть под tcpip.sys. Другой вариант - TDI filter, но тут потоки данных, не пакеты. Иногда оба подхода сразу... ![]() |
|
Создано: 01 февраля 2008 10:47 · Личное сообщение · #11 |
|
Создано: 01 февраля 2008 16:29 · Личное сообщение · #12 Для юзермода это самый низкоуровневый документированный вариант работы с сетью. В общей сложности структура такова: 1. (опционально wsock32.dll как переходник к ws2_32) 2. ws2_32.dll - WIN SOCKETS - обычный интерфейс 3. ws2help.dll - win sock helper - вспомогательные функции. на этом заканчивается юзермодная часть, ws2help вызывает NtDeviceIoControlFile для взаимодействия с кернел частью сокетов - драйвером AFD.SYS (Auxillary Function Driver) А он уже с NDIS общается и прочей ерундой ![]() |
![]() |
eXeL@B —› Программирование —› Сокеты |
Эта тема закрыта. Ответы больше не принимаются. |