Всем спасибо за советы
Здравствуйте, okman, Вы писали:
А если очень хочется проверять именно по полю "Host: ", и, если это "неугодный" домен, возвращать "страницу-заглушку" с сообщением restricted, единственное решение — писать NDIS-драйвер протокола?
Пока после длительного обдумывания и экспериментов остановился (в freebsd) на перехвате ip-пакета с GET-запросом, и последующей реинжекцией этого пакета далее по назначению, если сайт разрешен, или "проглатыванием" TCP-пакета и инжекцией пакета с ложным ACK и PSH прямо браузеру с текстом "взрослый сайт".
Но в BSD это элементарно делается с помощью ipfw и divert-правила (он позволяет перенаправить любой "сырой" ip-пакет в специальный порт предварительно binded сокета сторонним приложением. Дальше я могу выполнить "sendto()" над этим сокетом для реинжекции сырых пакетов — прямо в браузер, или "в Интернет") — хотя и в ядре это делается очень просто с помощью IP-level NKE filter.
А для Windows так и не придумал ничего проще чем копаться в NDIS-фильтрах
O>Относительно несложное решение (для Windows) заключается в написании TDI-фильтра,
O>перехватывающего исходящие соединения на 80 порт (TDI_CONNECT) и проверки IP пункта
O>назначения по базе "черных" адресов. Неугодные адреса элементарно перекидываются на
O>127.0.0.1:спецпорт, где работает простенький HTTP-сервер, возвращающий страницу-заглушку.
O>Поскольку на одном IP может находиться несколько сайтов, логично к этой проверке добавить
O>мониторинг заголовка Host в исходящих запросах — это, кстати, можно делать уже за пределами
O>режима ядра.
O>С LSP связываться не советовал бы.
O>Во-первых, приличный объем стартового кода (порядка нескольких тысяч строк для простого прототипа).
O>Во-вторых, слабая документация и почти полное отсутствие вменяемых исходников, которые можно
O>просто взять и скомпилировать.
O>В-третьих, упоминания об этой технологии в MSDN весьма скудные и, как правило, снабжены тавро "deprecated".
O>Более того, я неоднократно слышал упреки в том, что LSP реализована кривовато и может "откидывать
O>коленца" на ровном месте. Лучше обратиться к более актуальным и перспективным вещам — WFP, например.
Здравствуйте, Аноним, Вы писали:
А>И нужна точка старта, с которой я бы мог начать копаться в документации
А>Мне нужно распознать, что приложение, которое ломиться в сеть — браузер, и не позволить этому браузеру перейти по ссылке, если ее доменное имя находится в черном списке. Собственно, на фильтрации DNS запросов я и застрял.
А>Подскажите, как лучше такое сделать?
Будь проще — сделай прокси-сервер.
Если хочется сложного, то есть готовый драйвер для прозрачного проксирования.
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Аноним, Вы писали:
А>>И нужна точка старта, с которой я бы мог начать копаться в документации
А>>Мне нужно распознать, что приложение, которое ломиться в сеть — браузер, и не позволить этому браузеру перейти по ссылке, если ее доменное имя находится в черном списке. Собственно, на фильтрации DNS запросов я и застрял.
А>>Подскажите, как лучше такое сделать?
C>Будь проще — сделай прокси-сервер.
C>Если хочется сложного, то есть готовый драйвер для прозрачного проксирования.
Что за драйвер ? Мне тоже интересно.
Если не затруднит, поподробнее...
Здравствуйте, okman, Вы писали:
C>>Если хочется сложного, то есть готовый драйвер для прозрачного проксирования.
O>Что за драйвер ? Мне тоже интересно.
O>Если не затруднит, поподробнее...
Что-то типа:
http://markus.revti.com/2009/01/squid-transparent-proxy-server-on-windows-server-2003/