Как реализовать драйвер мини-порта NDIS с динамической таблицей маршрутов для нескольких vpn?

Я хочу написать драйвер минипорта NDIS, выскочивший как описание виртуального адаптера здесь (как это делает VMWare). Его цель - пересылать пакеты на существующие подключенные внутренние IP-адреса vpn (адаптеры). Может быть много существующих соединений vpn. Мой драйвер пересылает пакеты одному из них разными процессами (процессы могут подключаться к одному и тому же IP-адресу, поэтому таблица маршрутов для различения разных соединений не будет работать).

Любые подсказки или примеры, на которые я могу сослаться? Спасибо. Рисунок


person jay    schedule 13.04.2012    source источник


Ответы (1)


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

Похоже, вы можете использовать WFP для направления трафика на соответствующий интерфейс. WFP — это, по сути, гигантский механизм правил: есть правила ввода (например, «имя процесса — notepad.exe» или «пользователь — bob») и действия вывода (например, «перенаправить весь трафик на сетевой интерфейс 42»). Если вам посчастливилось представить свою проблему с помощью встроенных правил и действий, вам может вообще не понадобиться писать какой-либо код ядра. (Подумайте о том, сколько времени вы сэкономите!)

Если по какой-то причине вы не можете использовать WFP (возможно, вам нужно ориентироваться на Windows XP), вам следует изучить возможность написания Winsock LSP. LSP подключаются к коду сокета в целевом процессе и могут в некоторой степени манипулировать трафиком.

person Jeffrey Tippet    schedule 14.04.2012
comment
Спасибо за очень подробный ответ. Однако после изучения технологии Winsock LSP я обнаружил, что, возможно, невозможно перенаправить пакеты с помощью dll Winsock LSP. Есть идеи? - person jay; 14.04.2012