首页 > Java > java教程 > 如何在 Java 中可靠地确定机器的外部 IP 地址?

如何在 Java 中可靠地确定机器的外部 IP 地址?

DDD
发布: 2024-12-14 16:28:11
原创
631 人浏览过

How to Reliably Determine a Machine's External IP Address in Java?

用 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 地址的类型:

  • 环回: 127.xxx.xxx.xxx
  • 专用(LAN):192.168.xxx.xxx
  • 本地链接:169.254.xxx.xxx
  • 多播:224.xxx.xxx .xxx- 239.xxx.xxx.xxx
  • 广播:255.255.255.255

InetAddress API 提供了测试每种类型地址的方法,以确定最合适的地址。

解决方案 3:外部 FQDN检索

获取外部公布的完全限定域名(FQDN)并用它来查找主IP地址:

InetAddress inetAddress = InetAddress.getByName("myFQDN");
String ipv4Address = inetAddress.getHostAddress();
登录后复制

此方法依赖于DNS解析,可能不会在所有场景下都是可行的,特别是在存在负载均衡器的情况下。

以上是如何在 Java 中可靠地确定机器的外部 IP 地址?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板