一、IP地址定义

IP(Internet Protocol)地址是计算机在网络中的唯一标识,用来标识计算机在网络中的位置。IP地址分为IPv4和IPv6两种类型。由于IPv6的普及率相对较低,本文主要介绍IPv4的获取方式。

二、Java获取本机IP地址的方法

Java提供了多种方式获取本机IP地址,下面就分别介绍几种方法。

1. 使用InetAddress类的getLocalHost()方法

这是最简单、最常用的获取本机IP地址的方法。InetAddress类表示IP地址,并提供了获取IP地址的方法。getLocalHost()方法用于返回本地主机的InetAddress对象。

InetAddress address = InetAddress.getLocalHost();  //获取本机IP地址
String localIP = address.getHostAddress();  //获取本机IP地址字符串
System.out.println("本机IP地址为:" + localIP);

2. 使用NetworkInterface类的getNetworkInterfaces()方法

NetworkInterface类表示网络接口,即网卡。getNetworkInterfaces()方法返回多个网络接口,通过遍历这些网络接口可以获取本机的IP地址。

Enumeration allNetworkInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress localAddress = null;
while (allNetworkInterfaces.hasMoreElements()) {
    NetworkInterface networkInterface = allNetworkInterfaces.nextElement();
    Enumeration addresses = networkInterface.getInetAddresses();
    while (addresses.hasMoreElements()) {
        InetAddress address = addresses.nextElement();
        if (!address.isLinkLocalAddress() && !address.isLoopbackAddress() && address instanceof Inet4Address) {
            localAddress = address;
            break;
        }
    }
    if (localAddress != null) {
        break;
    }
}
String localIP = localAddress.getHostAddress();
System.out.println("本机IP地址为:" + localIP);

3. 使用了Java API的jdns.jar包中的代码

jdns.jar包是Java提供的一个第三方库,其用途是获取操作系统的DNS解析记录。使用这个库可以得到所有主机的IPv4地址。

DNSRecord[] dnsRecords = DNSResolver.getAllByName(InetAddress.getLocalHost().getHostName(), DNSRecordType.A);
for (DNSRecord dnsRecord : dnsRecords) {
    if (dnsRecord instanceof ARecord) {
        String localIP = ((ARecord) dnsRecord).getAddress().getHostAddress();
        System.out.println("本机IP地址为:" + localIP);
    }
}

三、IP地址的获取结果

通过以上方法可以获取到本机的IP地址,可以在控制台中输出或者在程序中使用。

需要注意的是,一个计算机可能会有多个本地IP地址,比如同时连接了有线网络和WiFi网络的情况下。使用上述方法获取到的IP地址是其中一个IP地址,并不代表是全部IP地址。