用 Java 确定当前机器的 IP 地址
上下文:
在具有多个节点的分布式系统,每个节点都需要唯一的IP地址才能有效通信。该 IP 地址必须向中央引导节点注册才能实现无缝连接。然而,由于网络配置可能存在复杂性,获取正确的 IP 地址可能会很困难。
问题:
使用 InetAddress.getLocalHost().getHostAddress( 的默认方法) )通常返回 LAN IP 地址而不是外部 PPP IP 地址。当节点尝试连接到引导节点或其他节点时,这种不匹配会造成困难。
解决方案 1:网络接口枚举
检索与该节点关联的所有可用 IP 地址机器,使用以下代码:
Enumeration e = NetworkInterface.getNetworkInterfaces(); while (e.hasMoreElements()) { NetworkInterface n = (NetworkInterface) e.nextElement(); Enumeration ee = n.getInetAddresses(); while (ee.hasMoreElements()) { InetAddress i = (InetAddress) ee.nextElement(); System.out.println(i.getHostAddress()); } }
此方法提供所有 IP 地址的完整列表。然而,区分正确的 IP 地址仍然具有挑战性。
解决方案 2:IP 地址类型区分
根据 IP 地址的取值范围判断 IP 地址的类型:
InetAddress API 提供了测试每种类型地址的方法,以确定最合适的地址。
解决方案 3:外部 FQDN检索
获取外部公布的完全限定域名(FQDN)并用它来查找主IP地址:
InetAddress inetAddress = InetAddress.getByName("myFQDN"); String ipv4Address = inetAddress.getHostAddress();
此方法依赖于DNS解析,可能不会在所有场景下都是可行的,特别是在存在负载均衡器的情况下。
以上是如何在 Java 中可靠地确定机器的外部 IP 地址?的详细内容。更多信息请关注PHP中文网其他相关文章!