Интерфейс промежуточного драйвера NDIS для C#

Я разрабатываю то, что по сути является специализированным приложением брандмауэра. Решение должно быть совместимо с 32- и 64-разрядными версиями. Моя компания хочет сохранить текущий программный интерфейс, написанный на C#.

Мне нужно вот что: способ контролировать и манипулировать всем сетевым трафиком в системе. Мое исследование привело меня к мысли, что промежуточный драйвер NDIS (спецификация интерфейса сетевого драйвера) — это то, что нужно. Если я смогу написать такой драйвер на C#, отлично, но я не уверен, что это возможно. Как минимум мне нужен интерфейс на C# для драйвера, написанного на любом языке.

Я нашел отличный ресурс в Интернете для создания одного из серии статей, озаглавленных «Расширение промежуточного драйвера Microsoft PassThru NDIS»:

  1. Часть 1. Добавление интерфейса DeviceIoControl
  2. Часть 2. Два IP-адреса блокируют драйверы NDIS IM
  3. Часть 3. Поддержка 64-разрядной версии Windows XP

Однако он датирован (2003 г.). Прежде чем инвестировать в чтение и изучение того, что он должен сказать, я хочу убедиться, что не трачу свое время впустую.

Есть лучший способ сделать это? Существуют ли какие-либо проекты или статьи с открытым исходным кодом, которые объясняют процесс лучше, чем статьи выше? Я вообще на стадионе? Помоги пожалуйста.


person Andrew Ensley    schedule 15.05.2009    source источник
comment
Я не уверен, что правильно понимаю. Вы пытаетесь написать драйвер на C# или просто собираетесь использовать C# для взаимодействия с драйвером после того, как создадите его (используя C++)?!   -  person Mike Dinescu    schedule 15.05.2009
comment
@Miky: Это не имеет значения. Если бы я мог написать драйвер на C#, было бы здорово, но я не уверен, что это возможно. Как минимум мне нужен интерфейс на C# для драйвера, написанного на любом языке.   -  person Andrew Ensley    schedule 15.05.2009


Ответы (1)


Есть еще одна страница того же автора, озаглавленная Сетевые данные и фильтрация пакетов Windows. «краткое введение в различные методы, которые можно использовать для фильтрации сетевых данных и сетевых пакетов на платформах Microsoft Windows».

В нем упоминаются другие варианты, например. «Драйвер фильтра TDI» и «Фильтрация сетевых данных в пользовательском режиме», которые могут подойти вместо этого, в зависимости от того, действительно хотите ли вы манипулировать всем сетевым трафиком в системе.

person ChrisW    schedule 15.05.2009
comment
Я не обязательно хочу манипулировать всем сетевым трафиком, но решение должно способно это делать. Это не вариант, это требование проекта. - person Andrew Ensley; 15.05.2009
comment
Весь трафик или, например, только весь трафик интернет-протокола? - person ChrisW; 15.05.2009
comment
А, я понимаю, что вы имеете в виду. Прости. Весь IP-трафик. Под всем сетевым трафиком я имел в виду от/к любому сетевому устройству. - person Andrew Ensley; 15.05.2009
comment
Если вам нужно фильтровать только IP-трафик, вам может подойти фильтр, который находится выше в стеке протоколов (например, драйвер TDI вместо драйвера NDIS). Тогда возникает следующий вопрос: может ли ваш фильтр быть даже выше, чем уровень TDI: нужно ли вам фильтровать IP-трафик, который видит код режима ядра (например, реализация файловой системы), или вам нужно фильтровать только IP-трафик, который видит пользователь? код режима (например, приложения Win32)? Потому что в последнем случае может быть достаточно фильтра пользовательского режима. - person ChrisW; 15.05.2009
comment
Из этого разговора я понял, что многого не знаю. Я не уверен, нужно ли фильтровать код режима ядра. Мне нужно поймать любые сетевые сообщения любой программы в системе, так что, может быть, только приложения Win32? - person Andrew Ensley; 15.05.2009
comment
Вы не сказали, почему вам нужно фильтровать (за исключением специализированного приложения брандмауэра), поэтому я не могу догадаться или сказать вам, что вам нужно фильтровать. Если вам нужно только фильтровать приложения пользовательского режима, это может оказаться более легкой задачей, чем написание драйвера фильтрующего устройства, который будет работать в ядре. - person ChrisW; 15.05.2009
comment
Извините, я не пытаюсь быть двусмысленным. Наверное, я просто такой невежественный. Мое требование состоит в том, что я должен иметь возможность как минимум перехватывать все веб-запросы (http, https и т. д.). Однако в какой-то момент мне также нужно будет иметь возможность блокировать некоторые другие протоколы и коммуникации (например, прокси, торрент, p2p и т. д.). - person Andrew Ensley; 16.05.2009
comment
Возможно, вы правы: msdn.microsoft.com/en-us/library/ aa504964.aspx говорит, что рекомендуется использовать промежуточный драйвер NDIS вместо драйверов брандмауэра. Но msdn.microsoft.com/en-us/ library/aa504969.aspx говорит, что, начиная с Vista, вместо этого используйте драйверы вызовов Windows Filtering Platform. - person ChrisW; 16.05.2009
comment
вздох Хорошо, думаю, я проведу небольшое исследование и через некоторое время задам еще один вопрос. - person Andrew Ensley; 16.05.2009
comment
Одна из проблем с драйверами заключается в том, что архитектура драйверов с годами становится менее стабильной: она меняется чаще, чем API-интерфейсы Win32/пользовательского режима, от одной версии операционной системы к другой. Он довольно стабилен, но вы правы, что он может измениться в течение 5 лет. - person ChrisW; 16.05.2009