Используя определенный сетевой интерфейс для сокета в окнах

Существует ли надежный путь в Windows, кроме изменения таблицы маршрутизации, чтобы вынудить недавно созданный сокет использовать определенный сетевой интерфейс? Я понимаю это bind() к IP-адресу интерфейса не гарантирует это.

20
задан Ajay 19 August 2016 в 07:41
поделиться

1 ответ

(Хорошо, если повезёт второй раз...)

К вашему сведению, здесь выполняет соединение() на определённом сетевом адаптере по тем же самым линиям...

Согласно Кабельный парень

Windows XP и Windows Server® 2003 использовать слабую хост-модель для отправки и получает для всех IPv4 интерфейсов и сильная модель хозяина для отправки и получает для всех интерфейсов IPv6. Вы не может настроить такое поведение. Следующее поколение TCP/IP стека в Windows Vista и Windows Server 2008 поддерживает сильных хозяев посылает и получает как для IPv4, так и для IPv6 по по умолчанию на всех интерфейсах, кроме Тередо туннельный интерфейс для Реле Тередо, специфическое для хоста.

Итак, чтобы ответить на ваш вопрос (правильно, на этот раз) в Windows XP и Windows Server 2003 IP4, нет, но для IP6 да. А для Windows Vista и Windows 2008 да (за исключением определенных обстоятельств).

Также с http://www.codeguru.com/forum/showthread.php?t=487139

На Windows, вызов для привязки() затрагивает выбор карты только входящий трафик, а не исходящий трафик. Таким образом, на клиент, работающий в многодоменной системе (т.е. более одной интерфейсной карты), это сетевой стек, который выбирает карту, которую можно использовать, и она делает свою отбор исключительно на основе IP-адрес назначения, который, в свою очередь, основан на таблице маршрутов. Вызов функции bind() не повлияет на выбор карты в любом случае.

Это как-то связано с тем. что-то под названием "Система Слабого конца" ("Слабый E/S") модель. Виза изменилась на сильная модель E/S, так что вопрос может не возникает согласно Vista. Но все предыдущие версии Windows использовали слабый E/S Модель.

Со слабой E/S моделью, это таблица маршрутизации, которая определяет, какая карта используется для исходящего трафика в многодоменная система.

Посмотрите, не предлагают ли эти потоки некоторые прозрение:

"Локальная привязка гнезда на мультифоме. хост в Windows XP не работает" на http://www.codeguru.com/forum/showthread.php?t=452337

"Как подключить порт к указанному Сетевая карта?" в http://www.codeguru.com/forum/showthread.php?t=451117. В этой теме упоминается Создать функцию CreateIpForwardEntry(), которая (я думаю) можно использовать для создания запись в таблице маршрутизации, чтобы все исходящий IP-трафик с заданным сервер маршрутизируется через указанный адаптер.

"Работа с 2 картами Ethernet" на http://www.codeguru.com/forum/showthread.php?t=448863

"Странное связывающее поведение на многодомных система http://www.codeguru.com/forum/showthread.php?t=452368

Надеюсь, это поможет!

18
ответ дан 30 November 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: