Резюме: я пытаюсь создать сокеты для передачи данных между двумя физическими интерфейсами, существующими на одной машине, и сокеты Win32 всегда перенаправляют трафик непосредственно в ядро, а не проталкивают через физические интерфейсы. Есть ли способ отключить это поведение, возможно, с помощью настроек устройства, настроек реестра, махинаций таблицы маршрутизации или опций сокетов? Мы используем Windows XP SP3.
Некоторый фон. Я пытаюсь создать несколько полностью автоматизированных IP-тестов для проверки нашего нестандартного оборудования IPv4. У нас есть большая лаборатория машин с Windows XP и индивидуальные физические интерфейсы Ethernet для каждого устройства, к которому мы подключаемся. Наши устройства фактически являются Ethernet-маршрутизаторами, каждый из которых имеет свой IP-адрес.
Нам нужно отправить данные с наших лабораторных машин через наши устройства, а затем обратно на тот же компьютер. Мы будем отправлять Unicast и Multicast UDP, TCP и широковещательный IP-трафик через устройства.
Мы хотим (и, вероятно, нуждаемся) трафик отправляться на той же машине, на которую он предназначен.
Для этого мы настраиваем два отдельных сетевых адаптера, каждый из которых имеет собственный IP-адрес в своей подсети, например NIC № 1 с 10.0.0.1/24 и NIC № 2 с 10.0.1.1/24. Наши устройства тогда действуют как простые сквозные маршрутизаторы и имеют два интерфейса: один в подсети 10.0.0.0/24, другой в подсети 10.0.1.0/24, из которого они просто пересылают пакеты туда и обратно.
Для генерации наших данных мы хотели бы иметь возможность использовать сокеты Win32, поскольку они хорошо поняты, хорошо поддерживаются тем, что используют наши клиенты, и, вероятно, будут наиболее быстрым подходом. Инъекция пакетов, вероятно, возможна для UDP и широковещательного IP, но, скорее всего, не так для TCP. Я бы придерживался идей, в которых использовалось внедрение пакетов, но я бы предпочел стандартные сокеты Win32.
Как указано в сводке, пакеты никогда не покидают машину. Я гуглил как сумасшедший и не нашел много. Есть идеи?