Привет, форумчане! Интересуют способы выхода в инет. Мне только известна связька socket -> connect ->send ->recv. Возможно ли установить связь с внешним миром другим набором функций, который не включает в себе вышеописанные? И если есть, то какие возможные варианты существуют? Или кроме как сокетных, более никак нельзя соединится с другим компом в инете?
Можно связаться через TDI, NDIS левелы, если вас неустраивает winsocket. Можно использовать urlmon интерфейс, или WinInet, это так сказать более высокие уровни чем winsocket, но они все равно к нему обращаются. Какова конечная задача у вас? Обход чего либо? Кстати какая OS? В UNIX можно использовать пакетные сокеты. А так же BPF интерфейс.
TDI, NDIS я так понимаю это 0 кольцо. Ось винда. Интересует можно ли в 3 кольце обойти использование socket->conect(bind) в механизме взаимодействия 2-х компьютеров находящихся в интернет? Т.е. не ли каких либо других функций с помощью, которых можно соединить 2 компьютера в сети? Иначе говоря, может ли какое-нибудь приложение передать некоторую информацию другому компьютеру в сети, минуя механизм сокетов, в 3-кольце.
LSP - это не то Эта технология не минует сокетные функции. AFD - не нашел в сети. Что это? afd.sys? Но это драйвер, а интересует только 3-кольцо пока.
т.е. можно со 100% уверенностью сказать, что соединяя 2 компа по сети, нельзя избежать вызовов socket ых функций? За исключением конечно, когда подменяется эта библиотека или дублируется в другой библиотеке, похожий функционал?
с AFD можно напрямую из r3 работать через шлюз NtDeviceIoControlFile, как это и делают сокеты если посмотреть их под отладчиком.
Я вообще сообщение в блог сейчас пишу об этом, но всё никак закончить не получается, хотя осталось совсем немного. Итак, пару слов по теме. Последовательность вызовов будет примерно такая в современных Windows на примере Windows XP: В режиме пользователя сверху вниз: Приложение - Sockets - SPI - AFD. В режиме ядра сверху вниз: AFD - TDI - NDIS - NIC - Сеть. Ты спрашивал про сокеты, так вот получается, что кроме высокоуровневых сокетных вызовов возможностей остаётся только две - LSP и AFD. По поводу LSP вкратце это выглядит так. Встроившись в цепочку и получив адреса нижних SPI-обработчиков, можно реализовать "свои" сокеты, но уровнем пониже, чем Sockets API. Про сам интерфейс читать здесь, и ещё вот этот документ настоятельно рекомендую для ознакомления. Идём далее. Самый нижний в стеке SPI-провайдер (обычно это AFD и есть для основных протоколов) обращается к некой DLL, которая является переходником на уровень ядра. Её имя msafd.dll, но реально это заглушка, а сами SPI-обработчики реализованы в mswsock.dll. Каждый из этих обработчиков с помощью NtDeviceIoControlFile() связывается со своим ядерным "сервером", реализованым в afd.sys. Далее afd.sys действует по сути как обычный TDI-клиент. Что здесь интересно, что если раскопать IOCTL-интерфейс, которым пользуется AFD, то с помощью него можно напедалить опять же свои "сокеты". Возможно, в каких-то троянах это и реализовано уже, не знаю. Интерфейсы эти все можно найти в исходниках Windows NT 4.0, возможно, сейчас что-то и поменялось уже, но вряд ли сильно. Такие дела.