Переадресация сетевого трафика приложения на канальном уровне
Рассмотрим следующую ситуацию:
У вас есть приложение, которое вы тестируете, но для того, чтобы протестировать сетевую функциональность указанной программы, вам необходимо запустить несколько ее экземпляров и заставить их общаться друг с другом.
Возможные решения: - Запуск программного обеспечения на отдельных машинах, подключенных через WAN или LAN. - Запустите программное обеспечение на виртуальных машинах, все на одном компьютере.
Я не хочу использовать ни один из этих методов (рассуждения не имеют значения). Я хочу знать , есть ли способ, которым я могу перенаправить сетевые передачи из тестового приложения (видеале на любом языке программирования) таким образом, чтобы я мог запустить несколько экземпляров одного и того же программного обеспечения на одном компьютере и заставить их вести себя так, как если бы они были единственным экземпляром, работающим на этом компьютере.
Другими словами, я хочу иметь возможность кодировать приложение так, чтобы каждый экземпляр прослушивал один и тот же "прослушивающий" порт (так как только один экземпляр будет работать на каждом компьютере во время работы). Затем я хочу знать, могу ли я перенаправить сетевые запросы на более низкий уровень, чем приложение, чтобы они не мешали друг другу (конфликт по одному и тому же номеру порта).
По сути, я хочу создать виртуальную среду, которая перенаправляет только сетевые вызовы (тогда как виртуальная машина требует гораздо больше ресурсов и требует гораздо больше усилий). Возможно ли это, и как я могу подойти к этой проблеме?
Спасибо!
ОБНОВЛЕНИЕ: Это более точное представление о том, чего я хочу достичь:
По сути, я хочу запрограммировать другое приложение, которое ПРОЗРАЧНО перенаправляет запросы на привязку к доступным портам и управляет тем, какие приложения связаны где... Так что с точки зрения приложений все экземпляры связаны с портом 1000, но на самом деле это другое приложение автоматическое управление тем, какой экземпляр связан, и избежание потенциальных конфликтов. Я чувствую, что это может быть достигнуто с помощью Windows Hooks, но я не уверен, как вы могли бы реализовать это?
1 ответ
Насколько я знаю, нет нормального способа мультиплексировать один и тот же порт на одном сетевом устройстве. Как минимум, вам нужно будет выбрать одно из следующего:
- Запустите каждый экземпляр вашей программы на другой порт
- Создать несколько виртуальных сетевых интерфейсов
Первый выбор прост и может быть тот, который я выбрал бы. Второй - больше к тому, что вы ищете, но это будет настоящая PITA для настройки - вы можете заглянуть в VirtualBox и его сети только для хоста для вдохновения. Если вы пишете что-то для Linux, вы, возможно, изучите каналы и chroot, но вы потратите больше времени на настройку этой среды, чем на написание своего программного обеспечения.