【问题标题】:InetAddress.getLocalHost().getHostAddress() returning unwanted address JavaInetAddress.getLocalHost().getHostAddress() 返回不需要的地址 Java
【发布时间】:2017-04-08 00:35:14
【问题描述】:

我尝试InetAddress.getLocalHost().getHostAddress() 来获取用户的互联网地址。它给了我127.0.1.1,但我正在寻找更像192.168.1.75 的东西。知道如何获取我正在寻找的地址吗?谢谢 - 泰勒

编辑: 我有ubuntu。记住这一点。我将我的程序导出到一个 jar 中并在我妈妈的 Windows 笔记本电脑上运行它。它让我猜对了正确的地址。那是192.168.1.64。仍然不是我的正确的。

【问题讨论】:

  • 如果您在本地运行此代码,您将获得 127.0.1.1,但如果您从远程 pc 运行,您将使用当前代码获得192.168.1.75 的 ip。但是如果你真的需要你的外部 ip 然后看这个帖子http://stackoverflow.com/a/2939223/1262764
  • @AtulNar&Joe 这不是重复的;您指的是关于如何获取面向外部的 IP 地址 的问题(在通过 NAT 路由器等之后)。 OP 没有表明这是他想要的。看来他只是想要本地网卡的IP号。
  • 我想要我的本地 ip,因为我有一个方法可以通过本地地址上的所有服务器运行,并且使用 localhost 它不会返回它。你必须为我使用 192.168.1.75

标签: java network-programming


【解决方案1】:

这意味着您以某种方式错误地配置了本地解析器。 getLocalHost() 应该返回真实的本地 IP 地址,getLoopbackAddress() 返回环回地址,通常是 127.0.0.1(你说你得到的是 127.0.1.1;虽然这并非不可能,但我仍然认为这是一个错字?)

您可以在 getLocalHost() 的 Java 代码中识别出几种情况,这将使其返回环回地址而不是实际地址:

  1. 本地主机名设置为localhost

        String local = impl.getLocalHostName();
        // [...]
        if (local.equals("localhost")) {
            return impl.loopbackAddress();
        }
    
  2. 您的代码无权获取本地主机地址(可能是小程序或没有权限的 Java WebStart 应用程序)

    } catch (java.lang.SecurityException e) {
        return impl.loopbackAddress();
    }
    

然而,在其他情况下,它应该抛出一个UnknownHostException

如果您的问题是 1 号,那么您需要将机器的主机名更改为可以解析回您计算机 IP 号的名称。

如果您的问题是第二个问题,那么您需要确保您的代码获得适当的许可,例如通过签署小程序或 webstart 应用程序。

【讨论】:

  • 它不是一个类型。我直接从控制台输出复制了它。我试试你的 loopbackaddress 方法
  • 刚刚测试过,环回 (InetAddress.getLoopbackAddress().getHostAddress()) 正在返回 127.0.0.1
  • 您的/etc/hostname 文件中有什么内容?
  • ty-Satellite-C55-A 是我的主机名文件。同样在主机文件中,我发现前两行 127.0.0.1 localhost127.0.1.1 ty-Satellite-C55-A
  • 你有它;您已将机器配置为将127.0.1.1 作为其地址。如果您希望 getLocalHost() 返回不同的地址,您需要更改您的 /etc/hosts 文件并指向其真实 IP 地址(或者如果您的 DNS 设置正确,您可以删除/注释该行并让 DNS处理名称的解析)
【解决方案2】:

可以使用InetAddressLocalHostUtil.java等代码代替InetAddress.getLocalHost(),查找本地主机的第一个非环回但site本地地址...

话虽如此,根据您想要实现的目标,您最好只使用 InetAddress.getLoopbackAddress() - 这取决于您是否需要一个可以从外部连接到的接口,或者只是想要一个地址例如让系统上的两个进程进行通信。

【讨论】:

    猜你喜欢
    • 2019-09-10
    • 1970-01-01
    • 2012-01-03
    • 2012-02-26
    • 2019-05-20
    • 2015-07-08
    • 2011-11-15
    • 1970-01-01
    • 2014-05-29
    相关资源
    最近更新 更多