Как построить своего рода брандмауэр - PullRequest
2 голосов
/ 27 января 2009

На самом деле то, что я пытаюсь построить, похоже на брандмауэр. Он должен быть в состоянии узнать все запросы, поступающие с моей машины. Он должен быть в состоянии остановить выбранные. Я не уверен, как начать с этого. У меня VS 2008/2005 с фреймворком 2.0. Пожалуйста, дайте мне знать, есть ли какой-то конкретный класс, с которого я могу начать, и есть ли образцы, которые я могу получить.

Ответы [ 4 ]

4 голосов
/ 27 января 2009

Межсетевые экраны действительно должны быть реализованы достаточно низко в сетевом стеке; Я настоятельно рекомендую NDIS. Эта статья может представлять интерес.

3 голосов
/ 27 января 2009

Примерно так может помочь вам начать: http://www.mentalis.org/soft/projects/pmon/

Этот проект C # позволяет администраторам Windows NT перехватывать IP-пакеты, отправленные через один из сетевых интерфейсов на компьютере. Это может быть очень удобно для отладки сетевого программного обеспечения или для мониторинга сетевой активности ненадежных приложений.

2 голосов
/ 18 марта 2009

Как сказал Мэтт, это действительно должен быть NDIS.

Обязательно уделите много времени разработке драйвера, я бы порекомендовал от 6 до 12 месяцев, чтобы перейти к стадии альфа-релиза. Имея дело с NDIS, я могу заверить вас, что это боль, как никто другой.

Если вы планируете выпустить свой продукт для широкой публики, вам нужно выложить несколько штук в Microsoft, чтобы получить одобренный драйвер (WHQL), в противном случае ваши пользователи получат несколько неприятных диалогов при установке ( софт "критически небезопасен" разнообразен). Процесс одобрения медленный и больше не доступен для Windows 2000, скорее всего, скоро выйдет для XP. 64-битное утверждение - отдельная оплата.

Вы заблокированы использованием C, но любая крошечная ошибка усиливается в виде синего экрана (например, нулевая ссылка или небольшое переполнение буфера). Вы не можете создавать потоки, ваш API на 100% отличается от обычного API пользовательского режима, и на самом деле попытка установить связь с пользовательским режимом означает работу с IRP-системой с покалыванием по кругу.

Сам NDIS перегружен плохим способом в стиле MFC. Вы ограничены подмножеством API ядра (что делает некоторые вещи очень сложными, например доступ к реестру). Невыполнение этого требования приводит к немедленной дисквалификации WHQL (нет, вы не получите свои деньги обратно!).

Каждая строка кода должна быть тщательно проверена, чтобы убедиться, что она работает правильно для уровня IRQL, на котором работает (в основном это определяет, может ли ваш код быть прерван другими процессами). Вызов функции API на неправильном уровне приводит к появлению синего экрана. Кроме того, создание структуры в стеке размером более 500 - 1000 байт приводит к переполнению стека (конечно, синий экран). Это само по себе может привести к забавным сеансам отладки, когда у вас есть стек вызовов длиной 15 строк с несколькими небольшими выделениями в каждой функции.

Несмотря на все это, и несмотря на то, что NDIS прошел 6 ревизий, это действительно стоит сделать, если вы хотите испытать. Награда - это программный продукт, который будет хорошо продаваться, потому что не многие другие смеют запутываться в подобных вещах. Одним из важных требований является знание ассемблера (для отладки). Чтение о работе ядра Windows также очень полезно (не только NDIS).

0 голосов
/ 24 марта 2009

Несколько лет назад мне нужно было узнать о пропускной способности сети, используемой всеми приложениями в системе Windows.

Не имея представления о масштабах выполняемой мной задачи, я начал изучать, как написать драйвер фильтра TDI.

Это заняло около двух лет. Два года полный рабочий день , так как я жил с некоторыми опционами на акции. NDIS проще, чем TDI. Как сказал мужчина, один полный рабочий день.

Вы можете создавать брандмауэры на уровне TDI, и это хорошо, поскольку вы можете связывать сокеты с приложениями (чего нельзя сделать в NDIS). Вы также можете заблокировать и / или пропускную способность формы отправки. Вы можете заблокировать прием, но вы не можете формировать прием в TDI, потому что вы не можете делать паузу (путь получения кода выполняется в DISPATCH_LEVEL). Я нашел способ обойти это и получил патент на него, но я бы не стал рекомендовать его из технического POV.

OTOH настоящий хакер просто обойдёт TDI и будет общаться напрямую с драйвером NDIS; межсетевой экран TDI можно обойти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...