Java获取本地IP

我试图获得本地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 ))

我该怎么办?

听起来你有两个IP地址。

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

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

文献

如果要激活第二个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 n = NetworkInterface.getNetworkInterfaces(); for (; n.hasMoreElements();) { NetworkInterface e = n.nextElement(); Enumeration a = e.getInetAddresses(); for (; a.hasMoreElements();) { InetAddress addr = a.nextElement(); System.out.println(" " + addr.getHostAddress()); } } } 

如果你的系统配置了多个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) { }