2013-04-27 48 views
0

考虑以下情况:重新路由应用网络业务在数据链路层

你有你tesing的应用程序,但为了测试所说的程序,你需要运行它的多个实例的网络功能并让他们相互沟通。

可能的解决方案如下: - 在通过WAN或LAN连接的单独机器上运行软件。 - 在虚拟机上运行软件,全部在同一台计算机上。

我不想使用这些方法(推理无关紧要)。我想知道如果有,我可以(在任何写频语言理想)的方式,这样我可以在一个运行相同的软件的多个实例改道从测试应用的网络传输方式计算机,并让它们表现得好像它们是在该计算机上运行的唯一实例。

换句话说,我希望能够对应用程序进行编码,以便每个实例在同一个“侦听”端口上侦听(因为在生产中每台计算机上只会运行一个实例)。然后,我想知道我是否可以在较低级别重新路由网络请求,然后应用程序,以便它们不会干涉彼此(冲突在同一端口号)。基本上,我想要构建一个虚拟环境,其中只有重定向网络调用(而虚拟机需要更多的资源,并有更多的参与)。这是否可能,我该如何解决这个问题?

谢谢!

UPDATE:这是什么,我想完成一个更准确的想法:

基本上,我想设置另一个应用程序透明地重定向绑定请求到可用的端口,并管理这些应用程序绑定在哪里。因此,从应用程序的角度来看,所有实例都绑定到端口1000,但实际上,这个其他应用程序会自动管理绑定哪个实例,并避免潜在的冲突。我觉得这可以用Windows Hooks完成,但是我不确定你可以如何实现这一点?

回答

0

据我所知,在同一个网络设备上复用同一个端口没有任何理智的方法。在最低限度,你就需要在以下的选择:

  • 运行在不同的端口程序的每个实例
  • 创建多个虚拟网络接口

第一个选择是容易可能是我会选择的那个。第二个更接近你正在寻找的东西,但它将是一个真正的PITA设置 - 你可以看看VirtualBox和它的主机专用网络的灵感。如果你正在linux上编写东西,你可能会看到管道和chroot,但你将花更多的时间来设置这个环境,而不是编写你的软件。

+0

感谢您的回复;我不担心花时间来设置这个...实际上,我正在考虑将它分成一个独立的项目(这两个项目都只是我自己的时间),并为每当发生这种情况创建一个直观的“解决方案”。 我实际上并不在乎测试应用程序使用不同的端口,但我希望能够保持原样(因此如果应用程序设计为使用特定的侦听端口,则不需要更改此设置)。 我想象一个解决方案,你将在应用程序和套接字之间有一个中间层。例如... – araisbec 2013-04-27 22:37:02

+0

基本上,我想编写另一个应用程序,将TRANSPARENTLY重定向绑定请求重定向到可用的端口,并管理哪些应用程序绑定在哪里...因此从应用程序的角度来看,所有实例都绑定到端口1000 ,但实际上,这个其他应用程序会自动管理哪个实例绑定在哪里,并避免潜在的冲突。我觉得这可以用Windows Hooks完成,但是我不确定你可以如何实现这一点?我也将这个添加到问题本身。 – araisbec 2013-04-27 22:47:04

+0

下面是问题:1)绑定到不同的端口将需要重写DLL调用(挂钩可以工作),这可能不是太粗糙。 2)将连接路由到正确的目标很可能需要更改网络驱动程序,即使它是虚拟的,这是一个非常雄心勃勃的努力 – 2013-04-27 22:51:48