获取本机IP地址的多个网卡

在Java开发中,有时候我们需要获取本机的IP地址。一台计算机可能连接了多个网络,每个网络都有一个对应的网卡。因此,获取本机的IP地址可能涉及到多个网卡。本文将介绍如何使用Java代码来获取本机的多个网卡的IP地址。

网卡和IP地址的基本概念

在深入讨论之前,让我们先了解一些基本的概念。

网卡

网卡是计算机用于和外部网络进行通信的硬件设备。每个网卡都有一个唯一的标识符,通常被称为MAC地址。计算机可以连接多个网卡,每个网卡都可以连接到一个网络。

IP地址

IP地址是用于在网络中唯一标识计算机的一组数字。它由32位(IPv4)或128位(IPv6)组成,通常用点分十进制表示。IP地址可以用于标识计算机在网络中的位置,并用于实现网络通信。

Java获取本机IP地址的方法

在Java中,我们可以使用java.net包下的NetworkInterface类来获取本机的所有网卡,并通过网卡获取对应的IP地址。

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

public class GetLocalIP {

    public static void main(String[] args) throws Exception {
        // 获取所有网卡
        Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
        
        // 遍历网卡
        while (networkInterfaces.hasMoreElements()) {
            NetworkInterface networkInterface = networkInterfaces.nextElement();
            
            // 获取网卡的所有IP地址
            Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
            
            // 遍历IP地址
            while (inetAddresses.hasMoreElements()) {
                InetAddress inetAddress = inetAddresses.nextElement();
                
                // 判断IP地址是否为本地地址
                if (!inetAddress.isLoopbackAddress() && inetAddress.isSiteLocalAddress()) {
                    System.out.println("网卡名称:" + networkInterface.getDisplayName());
                    System.out.println("IP地址:" + inetAddress.getHostAddress());
                }
            }
        }
    }
}

运行以上代码,将会输出本机的所有网卡及其对应的IP地址。

状态图

下面是本文所用到的状态图。

stateDiagram
    [*] --> Start
    Start --> GetNetworkInterfaces
    GetNetworkInterfaces --> GetInetAddresses
    GetInetAddresses --> CheckAddress
    CheckAddress --> PrintAddress
    PrintAddress --> GetInetAddresses
    CheckAddress --> GetInetAddresses
    PrintAddress --> Done
    Done --> [*]

代码解析

接下来我们来解析一下以上代码的关键部分。

首先,我们使用NetworkInterface.getNetworkInterfaces()方法获取本机的所有网卡。然后,通过遍历所有网卡,我们可以获取每个网卡的所有IP地址。

Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
    NetworkInterface networkInterface = networkInterfaces.nextElement();
    // ...
}

接下来,我们使用networkInterface.getInetAddresses()方法获取每个网卡的IP地址,并进行一些判断。

Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
while (inetAddresses.hasMoreElements()) {
    InetAddress inetAddress = inetAddresses.nextElement();
    // ...
}

在这里,我们使用isLoopbackAddress()方法判断IP地址是否为回环地址(即127.0.0.1)。我们使用isSiteLocalAddress()方法判断IP地址是否为本地地址(即私有IP地址,如192.168.x.x)。

最后,我们使用getDisplayName()方法获取网卡的名称,使用getHostAddress()方法获取IP地址的字符串表示。

System.out.println("网卡名称:" + networkInterface.getDisplayName());
System.out.println("IP地址:" + inetAddress.getHostAddress());

ER图

下面是本文所用到的ER图。

erDiagram
    NetworkInterface ||--o{ InetAddress : has
    InetAddress {
        String address
        String hostName
    }

总结

本文介绍了如何使用Java代码获取本机的多个网卡的IP地址。我们使用NetworkInterface类和InetAddress类来实现