在数据链路层重新路由应用程序网络流量

时间:2013-04-27 19:59:18

标签: networking redirect port data-link-layer

考虑以下情况:

您有一个正在测试的应用程序,但为了测试所述程序的网络功能,您需要运行它的多个实例并让它们相互通信。

可能的解决方案是:   - 在通过WAN或LAN连接的各台计算机上运行软件。   - 在虚拟机上运行软件,所有这些都在同一台计算机上。

我不想使用这些方法中的任何一种(推理无关紧要)。我想知道 if 有一种方法可以从某种方式重新路由来自测试应用程序的网络传输(理想情况下以任何编程语言)这样我就可以在一台计算机上运行同一软件的多个实例,并让它们表现得好像它们是该计算机上运行的唯一实例。

换句话说,我希望能够对应用程序进行编码,以便每个实例都侦听相同的“侦听”端口(因为在生产时每台计算机上只运行一个实例)。然后,我想知道我是否可以在较低级别重新路由网络请求,以便它们不会相互干扰(在同一端口号上发生冲突)。

基本上,我想构建一个虚拟环境,重定向网络调用(而虚拟机需要更多资源,并且涉及更多)。这可能吗,我该如何解决这个问题呢?

谢谢!

更新:这是我想要完成的更准确的想法:

基本上,我想编写另一个透明地将绑定请求重定向到可用端口的应用程序,并管理哪些应用程序绑定在哪里......所以从应用程序的角度来看,所有实例都绑定到端口1000,但实际上,这个其他应用程序自动管理哪个实例绑定到哪里,并避免潜在的冲突。我觉得这可以通过Windows Hook实现,但我不确定如何实现它?

1 个答案:

答案 0 :(得分:0)

据我所知,没有合理的方法可以在同一个网络设备上复用同一个端口。至少,您需要选择以下内容:

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

第一个选择很简单,也许我会选择。第二个更多的是你正在寻找的东西,但它将是一个真正的PITA设置 - 你可以看看VirtualBox和它的主机网络的灵感。如果你在linux上写东西,你可能会考虑管道和chrooting,但是你将花费更多的时间来设置这个环境,而不是编写你的软件。