Сейчас на форуме: vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Сокеты
Посл.ответ Сообщение

Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 30 января 2008 02:58 · Поправил: smex
· Личное сообщение · #1

Доброго времени суток уважаемые форумчане.
Вот уже 2 ночи а я все не могу догнать кой чего...
Если быть кратким то сразу вопрос - сокеты это относительно низкоуровневый интерфейс для работы с сетью (т.е. все высокоуровневые проги работают так или иначе через сокеты) либо сокеты это просто однин из интерфейсов для работы с сетью?

Т.е. к примеру по аналогии с функцией API ZwQueryDirectoryFile - эту функцию как "ядро" использует множество других функций, так ли дело обстоит с сокетами. Заранее благодарю всех всех всех ).




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 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



Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 30 января 2008 05:14 · Поправил: smex
· Личное сообщение · #3

Собственно что хотел узнать,s0larian наверно не много недопонял,или я как обычно криво объясняю что надо. Так вот
К примеру есть приложение на прямую не используещее сокеты ( к примеру через MFC), так вот это предложение если отправит данные то они могут пройти мимо сокетов или сокеты это ступенька лесницы, которую так или иначе используют все приложения.
PS: Или попробую еще немного перефразировать - смогу ли я ловить попытки прог вылести в инет перехватывая функции для работы с сокетами?
PS2: Выкрутасы типа драйвера и тд не в счет, нада не давать инет простеньким прогам - браузер, почта, торрнет и так далее в этом духе.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 30 января 2008 10:23 · Поправил: s0larian
· Личное сообщение · #4

Эта, из user mode самый стандартный подход это socket API, но дело не в этом. Сложность будет в winsock 2 - overlaped send/receive, т.к. это цепляется на IO completion ports. То есть это не простой blocking call как WriteFile.



Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 30 января 2008 10:37
· Личное сообщение · #5

smex пишет:
К примеру есть приложение на прямую не используещее сокеты ( к примеру через MFC)

MFC тоже использует сокеты - см. исходники, там все есть



Ранг: 10.2 (новичок)
Активность: 0=0
Статус: Участник

Создано: 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.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 31 января 2008 02:11 · Поправил: smex
· Личное сообщение · #7

Насчет ws2_32.dll всем большое спасибо - не знал.
Но главное что енто возможно, а API передающие управление в драйвер ведь тоже можно перехватить... Пошел читать MSDN.
PS: Насчет способа перехвата - думаю на библиотеку хук поставить чтобы во все оконные приложения загружалась. Способ уже мной проверенный, глюков не вызывал.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 31 января 2008 04:09
· Личное сообщение · #8

smex, я ж уже отписал, дело не в том что б перехватить export dll, а в том что б узнать когда именно данные приходят в апликуху.



Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 01 февраля 2008 08:11 · Поправил: smex
· Личное сообщение · #9

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

PS: Блин смудил, хотел поблагодарить всех а потом тему закрыть.. Промазал мимо кнопки. Короч свиду меня вы направили в нужном направлении, всем большое спасибо за помощь, ссылки и поддержку. )))




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 01 февраля 2008 10:01 · Поправил: s0larian
· Личное сообщение · #10

smex, ты не догоняешь главного - с winsock2 можно сокету "присвоить" event handle и сказать что ты именно так ты хочешь узнавать когда приходят данные. Потом следует WaitForSingleObject(). Что ты будешь перехватывать в таком случае?

Firewall делается в ядре, на уровне NDIS (пакекты), то есть под tcpip.sys. Другой вариант - TDI filter, но тут потоки данных, не пакеты. Иногда оба подхода сразу...



Ранг: 10.2 (новичок)
Активность: 0=0
Статус: Участник

Создано: 01 февраля 2008 10:47
· Личное сообщение · #11

www.microsoft.com/msj/0599/LayeredService/LayeredService.aspx



Ранг: 14.0 (новичок)
Активность: 0=0
Статус: Участник

Создано: 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 —› Программирование —› Сокеты
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати