【问题标题】:Get non-local IP Address Java [duplicate]获取非本地IP地址Java [重复]
【发布时间】:2013-08-19 04:01:10
【问题描述】:

我有一个程序要求它知道它的 IP 地址。但是,当我使用

InetAddress current_addr = addresses.nextElement();

返回

127.0.1.1

这不是很有帮助。如何从 java 中获取我的非本地 IP 地址?

【问题讨论】:

标签: java networking ip


【解决方案1】:

当你使用时你会得到什么:

InetAddress IP = InetAddress.getLocalHost();
String ipAddress  = IP.getHostAddress();

如果您没有多个网络接口,理想情况下它应该为您提供 IP 地址。

我在本地对其进行了测试,它为我提供了我机器的正确 IP 地址,即

192.168.2.10

如果您有多个网络接口,则可以尝试使用 NetworkInterface 类,示例如下:

  Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
            for (; n.hasMoreElements();)
            {
                    NetworkInterface e = n.nextElement();
                    System.out.println("Interface: " + e.getName());
                    Enumeration<InetAddress> a = e.getInetAddresses();
                    for (; a.hasMoreElements();)
                    {
                            InetAddress addr = a.nextElement();
                            System.out.println("  " + addr.getHostAddress());
                    }
            }

来源取自相关帖子:java InetAddress.getLocalHost(); returns 127.0.0.1 ... how to get REAL IP?

【讨论】:

  • 我认为提问者正在寻找外部IP地址
  • 那只会返回你的路由器分配的IP。
  • @JoshM 不,它会返回您的机器地址。我已经对此进行了测试,它返回 192.168.2.10 而我的路由器地址是 192.168.2.1
  • @JunedAhsan 他的意思是您只会获得路由器分配的私有、不可路由的 IP(在您的示例中为 192.168.2.10),而不是路由器从 ISP 分配的真实外部 IP。目前尚不清楚 OP 在问什么。
  • @VinayC 也许对你来说很清楚,但对我来说不是。如果用户的问题需要明确,那么他应该共享一个子网地址而不是本地主机地址。然后询问公共IP地址。
猜你喜欢
  • 2013-12-04
  • 2020-12-19
  • 2014-06-01
  • 2013-10-28
  • 1970-01-01
  • 2011-05-07
  • 2011-10-11
  • 1970-01-01
  • 2011-10-09
相关资源
最近更新 更多