【发布时间】:2016-10-09 09:19:46
【问题描述】:
有很多相关的问题(例如 Java Socket specify a certain network interface for outgoing connections )但是我找不到令人满意的即实用的解决方案:
在我的目标 (Linux) 平台上,有多个网络接口 (eth0...ethN) 可以访问服务器 S。默认路由通常是通过 eth0,但是我试图通过例如连接 S eth4 使用
new java.net.Socket(IP_of_S, targetport, IP_of_eth4, srcport)
或
sock.bind( eth4_SocketAddress );
sock.connect( S_SocketAddress );
在本例中,eth4 的 IP 分配正确,但流量仍通过默认路由的接口流出。我了解到这是由于“弱端系统模型”RFC 1122。但是我想知道是否还有基于 Java 的解决方案来实现我的原始目标,或者我是否必须触发外部 iptables 或从我的路由调用程序。
(顺便说一句:传出接口需要在运行时动态选择,即我的程序关闭连接并尝试使用不同的出站接口频繁地重新连接。)
【问题讨论】:
标签: java linux sockets network-interface outbound