Java 程序获取 Windows 和 Linux 机器中的系统 IP 地址

javaobject oriented programmingprogramming更新于 2024/8/5 20:51:00

IP 地址,也称为 Internet 协议地址,是分配给网络中设备的唯一标识符,用于识别网络中的设备并在它们之间建立连接。在本节中,我们将学习如何使用 Java 代码查找 Windows 和 Linux 机器的 IP 地址。

IP 地址可以用两种格式表示。一种格式是 IPv4,它是包含小数和点的 32 位格式。它有两部分,一部分是网络 ID,用于标识网络,另一部分是主机 ID,用于标识网络中的设备。另一种格式是 IPv6,它是 128 位格式,用十六进制数字表示。

现在,我们将详细了解用于查找 Linux 和 Windows 机器的 IP 地址的不同方法。 Java 提供 InetAddress 类和 NetworkInterface 类来对 IP 地址执行操作。

现在,我们将研究用于查找 Windows 和 Linux 计算机的 IP 地址的不同代码实现。

方法 1:使用 InetAddress.getLocalHost()

在这种方法中,我们将实现 Java 代码,使用"InetAddress.getLocalHost()"方法和"getHostAddress()"方法查找计算机的 IP 地址。

InetAddress.getLocalHost() 方法用于获取当前计算机的 IP 地址和主机名。它返回 InetAddress 类的实例,该类表示 Internet 协议 (IP) 地址。 getLocalHost() 方法可用于检索本地主机的 IP 地址,无论是字符串形式还是字节数组形式。

查找 IP 地址的算法如下。

算法

  • 使用 InetAddress.getLocalHost() 获取 IP 地址。

  • 打印 IP 地址。

  • 如果捕获到异常,则打印"无法找到此主机的 IP 地址"。

示例

在此示例中,我们首先使用"InetAddress.getLocalHost()"方法获取 InetAddress 对象,然后对 InetAddress 对象使用 getHostAddress() 方法,然后打印机器的 IP 地址值。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class Main {
   public static void main(String[] args) {
      try {
         InetAddress address = InetAddress.getLocalHost();
         System.out.println("IP address: " + address.getHostAddress());
      } catch (UnknownHostException ex) {
         System.out.println("Could not find IP address for this host");
      }
   }
}

输出

IP address: 172.17.0.2

方法 2:使用 NetworkInterface.getNetworkInterfaces()

在此方法中,我们将使用"NetworkInterface.getNetworkInterfaces()"方法实现 Java 代码以查找机器的 IP 地址。查找 IP 地址的算法如下。

算法

  • 使用 NetworkInterface.getNetworkInterfaces() 获取网络接口枚举。

  • 虽然枚举有更多元素,但对于每个网络,使用 networkInterface.isUp() 和 networkInterface.isLoopback() 检查网络是否已启动并进行环回。

  • 如果网络有效,则获取每个网络的 IP 地址,并使用 address.isLinkLocalAddress() 和 address.isSiteLocalAddress() 检查 IP 地址是站点本地地址还是链接本地地址。

  • 如果捕获到异常,则打印跟踪。

示例

在此示例中,我们使用"getNetworkInterfaces()"方法来检索 NetworkInterfaces 的枚举。我们遍历每个接口并使用"networkInterface.isUp()"方法检查接口是否已启动,如果此方法返回的值为 false,则我们只需传递接口并转到下一个接口,因为我们现在只需要当前处于活动状态的 IP 地址。我们还使用每个网络接口上的"networkInterface.isLoopback()"检查它是否与外部网络交互,如果此方法返回 true,则该特定接口不与外部网络交互。因此,我们跳过打印这些类型的网络。然后,如果网络接口通过了上述两个测试,则我们使用该特定接口上的"getInetAddresses()"方法获取 InetAddress 的枚举。

我们再次使用"isLinkLocalAddress()"方法检查每个 InetAddress 是否是链接本地地址,如果此方法返回 true,则该特定地址是本地地址,并且无法路由到外部网络。因此,我们传递这种 IP 地址,因为它们对于通信无效。最后,我们使用'isSiteLocalAddress()'方法检查该地址是否为站点本地地址,如果该特定地址是站点本地地址,则该方法返回 true,这意味着该特定地址是用于通信的有效 IP 地址。因此,我们将使用'getHostAddress()'方法打印该特定地址。

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

public class Main {
   public static void main(String[] args) {
      try {
         Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
         while (networkInterfaces.hasMoreElements()) {
            NetworkInterface networkInterface = networkInterfaces.nextElement();
            if (!networkInterface.isUp()) {
               continue;
            }
            if (networkInterface.isLoopback()) {
               continue;
            }
            Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
            while (addresses.hasMoreElements()) {
               InetAddress address = addresses.nextElement();
               if (address.isLinkLocalAddress()) {
                  continue;
               }
               if (address.isSiteLocalAddress()) {
                     System.out.println("IP address: " + address.getHostAddress());
               }
            }
         }
      } catch (SocketException ex) {
         ex.printStackTrace();
      }
   }
}

输出

IP address: 172.17.0.2

因此,在本文中,我们讨论了如何在 Windows 和 Linux 机器中获取系统 IP 地址。


相关文章