在Java中获取Linux本机IP地址的方法
在Java中获取Linux系统的本机IP地址有几种方法,以下是几种常用的实现方式:

(图片来源网络,侵删)
方法1:使用NetworkInterface类(推荐)
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 ni = networkInterfaces.nextElement();
Enumeration<InetAddress> inetAddresses = ni.getInetAddresses();
while (inetAddresses.hasMoreElements()) {
InetAddress inetAddress = inetAddresses.nextElement();
if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress()
&& inetAddress.getHostAddress().indexOf(":") == -1) {
System.out.println("IP: " + inetAddress.getHostAddress());
}
}
}
}
}
方法2:使用InetAddress.getLocalHost()
import java.net.InetAddress;
public class GetLocalIP {
public static void main(String[] args) throws Exception {
InetAddress localHost = InetAddress.getLocalHost();
System.out.println("IP: " + localHost.getHostAddress());
}
}
方法3:执行Linux命令获取IP
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class GetLocalIP {
public static void main(String[] args) throws Exception {
Process process = Runtime.getRuntime().exec("hostname -I");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = reader.readLine();
if (line != null) {
String[] ips = line.split(" ");
for (String ip : ips) {
System.out.println("IP: " + ip);
}
}
}
}
注意事项
- 方法1是最可靠的方式,因为它不依赖于系统命令,且能获取所有网络接口的IP
- 方法2简单但可能返回127.0.0.1(回环地址)
- 方法3依赖于Linux系统命令,可能在不同发行版上有差异
- 在实际应用中,你可能需要过滤掉回环地址(127.0.0.1)和IPv6地址
获取特定网络接口的IP
如果你只想获取特定网络接口(如eth0)的IP:
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
public class GetSpecificInterfaceIP {
public static void main(String[] args) throws Exception {
String interfaceName = "eth0"; // 替换为你想要的网络接口名
NetworkInterface networkInterface = NetworkInterface.getByName(interfaceName);
if (networkInterface != null) {
Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
while (inetAddresses.hasMoreElements()) {
InetAddress inetAddress = inetAddresses.nextElement();
if (!inetAddress.isLoopbackAddress()) {
System.out.println(interfaceName + " IP: " + inetAddress.getHostAddress());
}
}
} else {
System.out.println("Network interface " + interfaceName + " not found");
}
}
}
选择哪种方法取决于你的具体需求和环境,在大多数情况下,方法1(使用NetworkInterface)是最通用和可靠的解决方案。

(图片来源网络,侵删)
