2013-04-03 2 views
0

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

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

Любая помощь очень ценится.

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

ответ

1

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

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

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

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

Но в драйверах протокола отсутствует одна функция. Если вы просто написать драйвер протокола, то это, как водители выстраиваются в очередь:

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

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

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

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

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

+0

хорошо, получил драйвер протокола образца. Но одна проблема, она не видит никаких трафиков, протекающих через сетевой адаптер. Если я напишу (-w), он подберет пакеты, не что иное. Согласно искусству ASCII, мой драйвер протокола должен получать все пакеты, протекающие через сетевой адаптер, не так ли? Есть идеи? –

+0

По умолчанию протоколы не будут получать входящий трафик, пока они не укажут какой трафик они хотят: http://msdn.microsoft.com/library/ff569575 –

+0

Вот что мне интересно, я дал фильтр как ALL_LOCAL + PROMISCUOUS, даже тогда никакой трафик не получает !!! –

0

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

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

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

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

+0

Это было отличное объяснение. Большое спасибо Джеффри Типпет. Кроме того, мне было интересно узнать о третьем шаге и правилах клонирования! –

+0

MSDN на самом деле имеет много информации о NDIS - вот специальная страница: http://msdn.microsoft.com/library/ff546392 Но вы должны осмотреть близлежащие темы, так как большая часть этой информации будет вам полезна , –

Смежные вопросы