Java 获取本地 IP

2022-09-01 20:28:41

我试图获取本地IP。它应该与

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

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

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

我该怎么办?


答案 1

听起来你有两个IP地址。

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

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

公文

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

您可以从 中获取第二个 IP。getNetworkInterfaces

尝试运行以下代码:

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());
        }
    }
} 

答案 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) {

}