java 如何获取本地 ip

java 如何获取本地 ip

作者:Elara发布时间:2026-02-09阅读时长:0 分钟阅读次数:8

用户关注问题

Q
如何在Java中获取当前机器的IP地址?

我在使用Java开发应用时,想知道如何通过代码获取当前电脑或服务器的本地IP地址。

A

使用Java获取本地IP地址的方法

可以通过Java标准库中的InetAddress类来获取本机IP地址。示例代码为:

import java.net.InetAddress;

public class GetLocalIP {
    public static void main(String[] args) throws Exception {
        InetAddress localHost = InetAddress.getLocalHost();
        System.out.println("本地IP地址: " + localHost.getHostAddress());
    }
}

此代码会输出当前机器的默认IP地址。

Q
Java如何获取所有网络接口的IP地址?

我想通过Java程序获取机器上所有网络接口(包括虚拟网卡和物理网卡)的IP地址,应该怎么实现?

A

利用网络接口类获取所有IP地址

Java的NetworkInterface类允许遍历所有网络接口,并获取它们绑定的所有IP地址。示例代码如下:

import java.net.*;
import java.util.*;

public class GetAllIP {
    public static void main(String[] args) throws Exception {
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface ni = interfaces.nextElement();
            Enumeration<InetAddress> addresses = ni.getInetAddresses();
            while (addresses.hasMoreElements()) {
                InetAddress address = addresses.nextElement();
                System.out.println(ni.getName() + " : " + address.getHostAddress());
            }
        }
    }
}

运行后,可以看到所有网络接口对应的IP地址。

Q
如何获取Java程序在局域网中的内网IP?

我的电脑接入到局域网中,Java程序中如何准确获取当前计算机的局域网IP地址而不是127.0.0.1?

A

获取局域网内网IP的技巧

InetAddress.getLocalHost() 有时返回127.0.0.1,这样无法反映真实局域网IP。此时可以遍历所有网络接口,过滤出非回环、非虚拟并且是IPv4地址的IP,示例方法:

import java.net.*;
import java.util.*;

public class GetLocalIPv4 {
    public static void main(String[] args) throws Exception {
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface ni = interfaces.nextElement();
            if (!ni.isLoopback() && ni.isUp()) {
                Enumeration<InetAddress> addresses = ni.getInetAddresses();
                while (addresses.hasMoreElements()) {
                    InetAddress address = addresses.nextElement();
                    if (address instanceof Inet4Address && !address.isLoopbackAddress()) {
                        System.out.println("局域网IP: " + address.getHostAddress());
                    }
                }
            }
        }
    }
}

这样就能获取到正确的局域网内IP。