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

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

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

1 ответ

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

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

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

Другие вопросы по тегам