Драйвер сетевого моста NDIS 6.x

Мне было интересно, что было бы лучшим выбором и способом построить мост Ethernet с использованием NDIS 6.x. С чего начать и что для этого использовать, Минипорт, IM, драйвер протокола или фильтра?

Попытался настроить образец драйвера протокола, доступный в WDK, и успешно подключился к адаптерам Ethernet. Что дальше?

Любая помощь горячо приветствуется.

Использование Windows 7x64


person Jimson Kannanthara James    schedule 03.04.2013    source источник


Ответы (2)


Давайте рассмотрим доступные типы драйверов NDIS: минипорты, облегченные фильтры и протоколы.

Один минипорт NDIS не может решить эту проблему, так как минипорты получают пакеты от хостовой ОС. Вам нужно что-то, что получает пакеты из сети.

Легкий фильтр NDIS мог бы решить эту проблему, но решение было бы немного громоздким. Вам придется вручную синхронизировать два несвязанных стека мини-портов. Это сложнее, чем кажется; другие, кто пробовал это раньше, ошибались с первых нескольких попыток.

Драйвер протокола NDIS — лучший способ решить эту проблему. Драйвер протокола предназначен для подключения к нескольким мини-портам, а драйвер протокола может направлять пакеты из одного стека мини-портов в другой.

Но в драйверах протоколов отсутствует одна функция. Если вы просто пишете драйвер протокола, то драйверы выстраиваются следующим образом:

[TCPIP]  [YourProtocol]
    | \  / |
    |  \/  |
    |  /\  |
    | /  \ |
 [NIC0] [NIC1]

То есть стек TCPIP хоста видит оба сетевых адаптера как отдельные сетевые адаптеры. (@Aczire, вы указали в предыдущем вопросе, что это нормально для вас , Но для пояснительных целей, вот остальная часть истории.)

NDIS позволяет решить подобные проблемы с помощью драйвера MUX-IM. Драйвер IM — это, по сути, просто протокол, приклеенный к другому мини-порту. Это позволяет вам точно контролировать, что видит ОС хоста:

    [TCPIP]
       |
       |
       |
       |
 [YourMiniport]
 [YourProtocol]
    |      |
    |      |
    |      |
    |      |
 [NIC0] [NIC1]

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

person Jeffrey Tippet    schedule 04.04.2013
comment
ну, образец драйвера протокола установлен и работает. Но есть одна проблема, он не видит никакого трафика, проходящего через сетевую карту. Если я напишу (-w), он подхватит пакеты, ничего кроме этого. Согласно искусству ASCII, мой драйвер протокола должен пропускать все пакеты через сетевую карту, верно? Есть идеи? - person Jimson Kannanthara James; 07.04.2013
comment
По умолчанию протоколы не будут получать входящий трафик, пока не укажут, какой трафик им нужен: msdn.microsoft.com /библиотека/ff569575 - person Jeffrey Tippet; 09.04.2013
comment
вот что меня интересует, я поставил фильтр как ALL_LOCAL+ PROMISCUOUS, даже тогда трафик не поступает!!! - person Jimson Kannanthara James; 10.04.2013
comment
Проверьте !ndiskd.mopen, чтобы узнать, подключен ли ваш протокол open к пути получения. - person Jeffrey Tippet; 11.04.2013

Теперь, когда у вас есть драйвер протокола: что дальше?

  1. Убедитесь, что ваш протокол привязан к обоим интересующим вас адаптерам.
  2. Установите беспорядочный фильтр пакетов на обоих адаптерах (вы хотите получать ВЕСЬ трафик, даже трафик, не предназначенный для локального хоста)
  3. Когда пакеты получены на одном интерфейсе, клонируйте NBL и отправьте клон на другой интерфейс. Обязательно ознакомьтесь с правилами клонирования.

Вы должны обнаруживать циклы кабелей, чтобы не перегружать сеть.

Вы должны прочитать (хорошо, просмотреть) стандарты IEEE для 802, 802.1 и 802.3, так как у них есть определенные правила относительно того, какие мосты должны делать. Например, вы можете захотеть указать в специальном регистре MAC-адрес назначения 01-80-C2-00-00-00.

person Jeffrey Tippet    schedule 04.04.2013
comment
это было такое прекрасное объяснение. Большое спасибо, Джеффри Типпет. Кроме того, мне было интересно узнать о третьем шаге и правилах клонирования! - person Jimson Kannanthara James; 06.04.2013
comment
На самом деле в MSDN есть много информации о NDIS — вот конкретная страница: msdn.microsoft.com/library/ ff546392 Но вам следует просмотреть соседние темы, так как большая часть этой информации будет вам полезна. - person Jeffrey Tippet; 09.04.2013