java 如何获取ip
获取本地 IP 地址
在 Java 中可以通过 InetAddress 类获取本地主机的 IP 地址。以下是示例代码:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class LocalIP {
public static void main(String[] args) {
try {
InetAddress localHost = InetAddress.getLocalHost();
System.out.println("Local IP Address: " + localHost.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
获取所有网络接口的 IP 地址
如果需要获取所有网络接口的 IP 地址,可以使用 NetworkInterface 类:
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
public class AllIPs {
public static void main(String[] args) {
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface networkInterface = interfaces.nextElement();
Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress address = addresses.nextElement();
System.out.println("Interface: " + networkInterface.getName() +
", IP: " + address.getHostAddress());
}
}
} catch (SocketException e) {
e.printStackTrace();
}
}
}
获取客户端 IP 地址(Web 应用)
在 Web 应用中获取客户端的 IP 地址可以通过 HttpServletRequest 对象:
import javax.servlet.http.HttpServletRequest;
public class ClientIP {
public static String getClientIp(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}
获取公网 IP 地址
如果需要获取本机的公网 IP 地址,可以通过调用外部 API 服务:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class PublicIP {
public static void main(String[] args) {
try {
URL url = new URL("https://api.ipify.org");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String publicIP = reader.readLine();
System.out.println("Public IP Address: " + publicIP);
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意事项
- 获取本地 IP 地址时可能返回 IPv4 或 IPv6 地址。
- 在 Web 应用中,客户端的 IP 地址可能被代理服务器修改,需要检查
X-Forwarded-For等头部。 - 调用外部 API 获取公网 IP 地址需要网络连接,并且可能受服务可用性影响。






