Здравствуйте!
В общем, задача стоит так:
машинка прицеплена к IP-сетям через несколько интерфейсов разных типов
езернет,виртуальный езернет,ppp,pppoe,pptp
на каждом интерфейсе назначен свой IP
Есть приложение, которое очень хочет отправлять трафик в конкретный линк, и не может.
Потому что, даже если сделать bind(endpoint) на клиентском сокете, ядро будет использовать таблицу маршрутизации. И отправит пакет с адресом линка 1 в линк с наименьшей метрикой (по сути подключенный последним).
Нужно научить ядро игнорировать таблицу маршутизации для пакетов из нашего приложения. Т.е. пакет с адресом источника 10.10.10.10 всегда должен уходить в интерфейс на котором поднят этот адрес, а пакеты из неприбинденного клиентского сокета обрабатываться обычным образом.
Помечать пакеты можно либо с помощью опции SO_DONTROUTE либо вычислять их по названию процесса приложения, либо брать все прибинденные исходящие.
Насколько я понимаю, реализовать можно драйвером где то на уровне NDIS filter + TDI filter или пропатчив таблицы экспорта tcpip.sys
Сразу оговорюсь что я никогда не писал драйверы
Подскажите, какой способ будет наименее трудоемким и куда копать?
Или же, на коммерческой основе кто может взяться — в ПМ.