2013-04-27 6 views
0

Рассмотрим следующую ситуацию:Перенаправление сетевых приложений трафика на уровне Data Link

У вас есть приложение вы tesing, но для того, чтобы проверить функциональность сети указанной программы, вам необходимо запускать несколько экземпляров и заставить их общаться друг с другом.

Возможные решения: - Запуск программного обеспечения на отдельных машинах, подключенных через WAN или LAN. - Запустите программное обеспечение на виртуальных машинах, все на одном компьютере.

Я не хочу использовать любой из этих методов (рассуждение не имеет значения). Я хочу знать если есть способ, что я могу изменить маршрут сети передачи из тестового приложения (идеально на любом языке programmming) таким образом, таким образом, что я могу запускать несколько экземпляров одного и того же программного обеспечения на одной компьютер, и заставить их вести себя так, как если бы они были единственным экземпляром, запущенным на этом компьютере.

Другими словами, я хочу иметь возможность кодировать приложение, чтобы каждый экземпляр прослушивал один и тот же «прослушивающий» порт (так как на каждом компьютере будет работать только один экземпляр на момент его создания). Затем я хочу знать, могу ли я перенаправить сетевые запросы на более низком уровне, чем приложение, чтобы они не мешали друг другу (столкновение с одним и тем же номером порта).

По существу, я хочу создать виртуальную среду, в которой только перенаправляет сетевые вызовы (тогда как виртуальная машина потребляет гораздо больше ресурсов и имеет более активное участие). Возможно ли это, и как я могу подойти к этой проблеме?

Спасибо!

UPDATE: Это более точное представление о том, что я хочу сделать:

В принципе, я хочу, чтобы запрограммировать другое приложение, которое прозрачно перенаправляет запросы на привязку имеющихся портов, и управляет, какие приложения связаны где. Итак, с точки зрения приложений все экземпляры привязаны к порту 1000, но на самом деле это другое приложение автоматически управляет, какой экземпляр связан там и избегает потенциальных конфликтов. Я чувствую, что это может быть достигнуто с помощью Windows Hooks, но я не уверен, как вы могли это реализовать?

ответ

0

Насколько я знаю, нет разумного способа мультиплексирования одного и того же порта на одном и том же сетевом устройстве. Как минимум, вам нужно будет выбрать одного из следующих:

  • Запуск каждого экземпляра вашей программы на другом порту
  • Создание нескольких сетевых интерфейсов виртуальных

Первый выбор прост и может быть тот, который я бы выбрал. Второе - больше того, что вы ищете, но это было бы истинное PITA для настройки - вы можете посмотреть в VirtualBox и его сети только для хостов для вдохновения. Если вы пишете вещи на linux, вы можете посмотреть на трубы и chrooting, но вы будете тратить больше времени на настройку этой среды, чем на создание своего программного обеспечения.

+0

Спасибо за ответ; Я не беспокоюсь о том, чтобы потратить время, чтобы установить это ...Я на самом деле рассматриваю его в отдельном проекте (оба из них - только я в свое время) и создавая интуитивное «решение» для всякий раз, когда это происходит. На самом деле я не забочусь о том, что тестовые приложения используют разные порты, но я хочу оставить код как есть (поэтому, если приложение предназначено для использования определенного порта прослушивания, вам не требуется изменять это). Я представляю решение, в котором у вас будет средний уровень между приложением и сокетами. См. Следующий комментарий, например ... – araisbec

+0

В принципе, я хочу запрограммировать другое приложение, которое TRANSPARENTLY перенаправляет запросы привязки к доступным портам и управляет тем, какие приложения привязаны туда ... Итак, с точки зрения приложений все экземпляры привязаны к порту 1000 , но на самом деле это другое приложение автоматически управляет тем, какой экземпляр связан там, и избегает потенциальных конфликтов. Я чувствую, что это может быть достигнуто с помощью Windows Hooks, но я не уверен, как вы могли это реализовать? Я также добавляю это к самому вопросу. – araisbec

+0

Вот проблема: 1) привязка к различным портам потребует перекрытия вызовов DLL (могут работать крючки), которые могут быть не слишком грубыми. 2) получение соединений для маршрутизации к правильной цели, скорее всего, потребует изменения сетевого драйвера, даже если это виртуальный, который является довольно амбициозным –

Смежные вопросы