Java:如何获取可以到达远程IP的本地接口的IP?

Per*_*ell 5 java lookup ip-address

我有一个 Java 应用程序,它在服务提供者中注册服务器组件,然后将服务名称发送到客户端。客户端使用服务名称从服务提供者那里获取到服务器的地址。但是,服务器有多个接口,客户端只能访问其中的一个接口,因此必须使用正确的 IP 注册服务。我们通过广播发现了客户端,所以我有客户端 IP 和计算机网络接口的枚举。在不知道客户端 IP 的网络掩码是什么的情况下,如何将 IP 与接口匹配?

我不自觉地想象将所有地址都转换为整数,并使用他们的网络掩码对本地 ip 进行处理并寻找“最佳匹配”,但我想知道是否有更好的方法?

(这是一个企业(tm)解决方案,因此切断服务提供商不是一种选择,至少不是首先没有政治运动;))

Sam*_*nes 4

据我了解,服务提供商在多个不同网络上有接口。每个客户端仅位于这些网络之一上,因此只能与其中一个接口进行通信。该服务需要发现客户端可以访问哪些接口,以便它可以发送正确的地址。您(服务开发者)无法控制服务部署的网络环境,因此无法使用 DNS 等网络级解决方案。

在许多网络设置中,路由是对称的。也就是说,从主机 A 到主机 B 的路由与从主机 B 到主机 A 的路由相同。如果您知道在您的服务将部署到的所有环境中都是这种情况,那么您可以放心地假设所使用的地址客户端可以访问连接到客户端。例如,可以通过将 a 连接DatagramSocket到客户端然后调用其getLocalAddress()方法来发现该地址。

如果路由是不对称的,我不知道如何确定客户端是否可以仅使用 API 访问特定接口java.net。如果您控制客户端实现,您也许可以让它在其广播响应数据包中包含广播源地址(应该是对其可见的服务器接口)。除此之外,您还没有提供有关该场景的足够信息来提供具体建议。例如,了解广播广告和客户端对其的响应使用什么协议将是有用的。