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地址。
方法一:使用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
方法二:使用 NetworkInterface.getNetworkInterfaces()
在这种方法中,我们将实现java代码使用”NetworkInterface.getNetworkInterfaces()”方法来查找机器的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地址。