Java获取本地IP

Nic*_*ser 22 java ip local

我试图获得本地IP.它应该合作

System.out.println(Inet4Address.getLocalHost().getHostAddress());
Run Code Online (Sandbox Code Playgroud)

要么

InetAddress addr = InetAddress.getLocalHost();
ip = addr.getHostAddress();
System.out.println("Ip: " + ip);
Run Code Online (Sandbox Code Playgroud)

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

我该怎么办?

Max*_*tin 33

听起来你有两个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());
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)


Pra*_*ran 7

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

}
Run Code Online (Sandbox Code Playgroud)