如何在多房配置中控制源IP

时间:2012-10-20 09:38:05

标签: java sockets tcp multihomed

我在一个刀片上运行了14个java进程。每个进程都绑定到ProxyServer(F5)识别的虚拟IP,因此当外部客户端调用F5时,他的调用重定向到14个进程之一。

最重要的是,我的进程(14个中的一个)执行对在另一个刀片上运行的另一个应用程序的调用。

以下是问题:如何在TCP客户端上使用虚拟IP运行的java进程中控制传出TCP数据包中的源IP?换句话说,我正在寻找一种方法来将虚拟IP设置为传出TCP数据包中的源地址。 (默认设置为刀片的物理IP)。

2 个答案:

答案 0 :(得分:0)

您可以使用以下Socket构造函数:

Socket(String remoteHost, int remotePort, InetAddress localAddress, int localPort)

或在创建套接字后使用Socket.bind()。

请参阅http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html

答案 1 :(得分:0)

暂时忘记语言/库...您为连接套接字定义本地地址和/或本地端口的方式与侦听套接字的方式相同。您bind()套接字到您希望的任何IP地址和/或端口。不绑定与绑定到值相同。

当值为零时,操作系统将为您选择:对于地址,它将绑定到用于发送到目标的接口的地址。对于端口,它将选择当前未使用的非特权端口(> 1023)。