Java 程序获取 Windows 和 Linux 机器中的系统 IP 地址
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 地址。