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


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

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

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

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

在Windows和Linux机器上获取系统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地址。

示例

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

代码解释

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

方法2:使用NetworkInterface.getNetworkInterfaces()

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

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

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

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

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

示例

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

代码解释

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

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

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

更新时间: 2024年7月31日

2K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.