Давайте посмотрим на типы драйверов 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, если у вас нет существенного опыта и времени.
хорошо, получил драйвер протокола образца. Но одна проблема, она не видит никаких трафиков, протекающих через сетевой адаптер. Если я напишу (-w), он подберет пакеты, не что иное. Согласно искусству ASCII, мой драйвер протокола должен получать все пакеты, протекающие через сетевой адаптер, не так ли? Есть идеи? –
По умолчанию протоколы не будут получать входящий трафик, пока они не укажут какой трафик они хотят: http://msdn.microsoft.com/library/ff569575 –
Вот что мне интересно, я дал фильтр как ALL_LOCAL + PROMISCUOUS, даже тогда никакой трафик не получает !!! –