【问题标题】:Java get local IP [duplicate]Java获取本地IP [重复]
【发布时间】:2013-10-28 21:40:55
【问题描述】:

我正在尝试获取本地 IP。它应该适用于

System.out.println(Inet4Address.getLocalHost().getHostAddress());

InetAddress addr = InetAddress.getLocalHost();
ip = addr.getHostAddress();
System.out.println("Ip: " + ip);

但它总是返回 192.168.178.154 而不是 192.168.178.119(这是我的真实本地 IP(终端 --> ifconfig))

我该怎么办?

【问题讨论】:

  • 你有局域网和WiFi吗?
  • Wifi,但它应该适用于两者..

标签: java ip local


【解决方案1】:

听起来你有两个 IP 地址。

在具有一个网络适配器的计算机上,选择的 IP 地址是计算机中网络适配器的主 IP 地址。但是,在多宿主计算机上,堆栈必须首先做出选择。在知道连接的目标 IP 地址之前,堆栈无法做出明智的选择。

当程序向目标 IP 地址发送 connect() 调用,或向 UDP 数据报发送 send() 调用时,堆栈引用目标 IP 地址,然后检查 IP 路由表以便它可以选择发送数据包的最佳网络适配器。选择此网络适配器后,堆栈会读取与该网络适配器关联的主 IP 地址,并将该 IP 地址用作出站数据包的源 IP 地址。

Document

如果您想激活第二个 IP 及其例如 LAN,请将其拔下并在 10 秒后重新插入。其他 IP 可能会被选为路由表中的主机 IP。

你可以从getNetworkInterfaces获得第二个IP。

尝试运行以下代码:

public static void main(String[] args) throws Exception
{
    System.out.println("Your Host addr: " + InetAddress.getLocalHost().getHostAddress());  // often returns "127.0.0.1"
    Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
    for (; n.hasMoreElements();)
    {
        NetworkInterface e = n.nextElement();

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

【讨论】:

  • 好的,谢谢你:),你知道是否有可能获得第二个IP?
  • 如果你想激活第二个和它的局域网,拔掉它并在 10 秒后重新插入。它将切换到作为主机的第二个地址
  • 问题是,程序应该知道它应该使用哪个 Ip..
  • 好吧,你有路由表,PC 采用“最古老”的接口,女巫有互联网。
  • 不,不是代码问题,只是你电脑的路由表
【解决方案2】:

如果你的系统配置了多个ip,那么就这样做吧。

try {
  InetAddress inet = InetAddress.getLocalHost();
  InetAddress[] ips = InetAddress.getAllByName(inet.getCanonicalHostName());
  if (ips  != null ) {
    for (int i = 0; i < ips.length; i++) {
      System.out.println(ips[i]);
    }
  }
} catch (UnknownHostException e) {

}

【讨论】:

  • 是的,看起来,这会返回 3 Ips...
  • @Tyratox 你在列表中有 192.168.178.119 ip?
  • 是的 :)) 但顺序并不总是相同的:/
猜你喜欢
  • 2013-08-19
  • 2013-12-04
  • 2020-12-19
  • 2014-06-01
  • 2012-07-28
  • 1970-01-01
  • 2013-08-17
  • 2013-08-04
  • 2011-05-07
相关资源
最近更新 更多