【问题标题】:Java. InetAddress.getLocalHost returns strange IP爪哇。 InetAddress.getLocalHost 返回奇怪的 IP
【发布时间】:2013-08-31 13:55:34
【问题描述】:

我不明白,为什么下面的代码会打印 0.0.9.229 而不是 127.0.0.1。谁能告诉我,热修复?

String ha = InetAddress.getLocalHost().getHostAddress();
System.out.println(ha);

更新: 在 Ubuntu 上运行的代码

/etc/hosts

127.0.0.1       localhost
127.0.1.1       2533

【问题讨论】:

    标签: java ip localhost host inetaddress


    【解决方案1】:

    InetAddress.getLocalHost() 不像大多数人认为的那样做。它实际上返回机器的主机名,以及与该主机名关联的 IP 地址。这可能是用于连接外部世界的地址。它可能不会。这仅取决于您如何配置系统。

    在我的 windowsbox 上,它获取机器名称和外部 IP 地址。在我的 linux 机器上,它返回主机名和 127.0.0.1,因为我在 /etc/hosts 中设置了它

    【讨论】:

    • 我正在使用包含此代码的库。我怀疑,肯定有 127.0.0.1 或 localhost 之类的东西,但有 0.0.9.229,这会导致无法进一步绑定到 URL 错误。我不明白 0.0.9.229 从哪里来
    • 我知道你不是被选中的答案,但这个答案今天为我节省了大量的悲伤。谢谢!
    【解决方案2】:

    问题是我的主机名将仅包含数字并且无法解析。 我将 /etc/hostname 更改为第一个位置的字符,问题已解决。

    【讨论】:

      【解决方案3】:

      使用NetworkInterface 枚举网络接口; InetAddress.getLocalHost() 总是返回环回。如果你想获取与你的机器相关联的所有 IP,请使用 NetworkInterface,那么你也会得到 127.0.0.1。

       Enumeration<NetworkInterface> nInterfaces = NetworkInterface.getNetworkInterfaces();
      
          while (nInterfaces.hasMoreElements()) {
              Enumeration<InetAddress> inetAddresses = nInterfaces.nextElement().getInetAddresses();
              while (inetAddresses.hasMoreElements()) {
                  String address = inetAddresses.nextElement().getHostAddress();
                  System.out.println(address);
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2019-09-10
        • 2016-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多