Специальная маршрутизация для приложения через WinSocks или любой другой API? - PullRequest
1 голос
/ 30 марта 2011

Я хочу направить пакеты, отправленные из моего приложения, на другой шлюз, но я не знаю, какие параметры я должен изменить через setsockopt.Я не могу просто добавить записи в таблицу маршрутизации для определенных хостов, потому что второе приложение также должно подключаться к этим хостам, но через шлюз по умолчанию.Шлюзы имеют разные публичные IP-адреса.Я нашел тему об установленных параметрах «маршрутизации источника» через опцию сокета IP_OPTIONS (хотя и без формата), но, как я понимаю, эта опция только для маршрутизаторов, а не для моего сетевого адаптера.Также я не могу добавить второй адаптер и подключить его к той же локальной сети.

Любые предложения, как я могу отправлять пакеты для каждого приложения?Может быть API маршрутизации

PS: версии Windows: 32-битная XP SP3, 32- и 64-битная Windows 7 и одна 64-битная Windows Server 2008 R2.

1 Ответ

2 голосов
/ 30 марта 2011

Краткий ответ: это действительно сложно, вы уверены, что хотите это сделать?Это невозможно напрямую через опцию set sock.Скорее всего, есть более простой выбор, добавляя маршруты вручную с помощью утилиты командной строки «route».Это будет лучшим выбором, если конечным пунктом назначения является известный IP-адрес или сеть, и этот обычный трафик можно направлять и через другой шлюз.

Более длинный ответ: если вы являетесь ниндзя кода, у вас есть следующие дваварианты, удачи, я понятия не имею, будет ли это работать на практике:

  • использовать сырые сокеты и IP_HDRINCL для ручной маршрутизации источника (т.е. добавить параметр в заголовок IP с адресом вашегопрокси).См. здесь для ознакомления.
  • вы можете закодировать Winsock LSP (введение здесь) , которое вы можете использовать для перехвата некоторых пакетов и перенаправления их.
...