java如何获取ip
获取本地IP地址
使用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("本地IP地址: " + localHost.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
获取客户端IP地址(Web应用)
在Servlet或Spring Boot应用中,可以通过HttpServletRequest获取客户端IP:
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地址
使用NetworkInterface类可以枚举所有网络接口及其IP地址:
import java.net.*;
import java.util.Enumeration;
public class AllIPs {
public static void main(String[] args) throws SocketException {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface iface = interfaces.nextElement();
Enumeration<InetAddress> addresses = iface.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress addr = addresses.nextElement();
System.out.println("接口 " + iface.getName() + " IP: " + addr.getHostAddress());
}
}
}
}
注意事项
- 本地IP地址可能返回IPv4或IPv6地址
- 在容器化环境中,
getLocalHost()可能返回容器内部IP而非主机IP - 客户端IP获取需要考虑代理服务器和负载均衡器的情况
- 某些网络接口可能是虚拟接口或未激活状态







