ip如何获取java
IP 地址获取方法(Java)
在 Java 中获取 IP 地址可以通过多种方式实现,具体取决于需求场景(如获取本地 IP 或远程客户端 IP)。以下是常见方法:
获取本机 IP 地址
使用 InetAddress 类获取本机 IP 地址:
import java.net.InetAddress;
import java.net.UnknownHostException;
public class LocalIPExample {
public static void main(String[] args) {
try {
InetAddress localHost = InetAddress.getLocalHost();
System.out.println("Local IP Address: " + localHost.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
注意:getLocalHost() 可能返回环回地址(如 127.0.0.1),需遍历所有网络接口获取真实 IP:

import java.net.*;
import java.util.Enumeration;
public class RealLocalIP {
public static void main(String[] args) throws SocketException {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface iface = interfaces.nextElement();
if (iface.isLoopback() || !iface.isUp()) continue;
Enumeration<InetAddress> addresses = iface.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress addr = addresses.nextElement();
if (addr instanceof Inet4Address) {
System.out.println("Local IPv4: " + addr.getHostAddress());
}
}
}
}
}
获取客户端 IP(Web 应用)
在 Servlet 或 Spring 应用中,通过 HttpServletRequest 获取客户端 IP:
import javax.servlet.http.HttpServletRequest;
public class ClientIPUtils {
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;
}
}
说明:需处理代理和负载均衡场景(如 X-Forwarded-For 头)。

获取公网 IP(通过外部 API)
调用第三方服务获取本机公网 IP:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class PublicIPFetcher {
public static void main(String[] args) throws Exception {
URL whatIsMyIP = new URL("http://checkip.amazonaws.com");
BufferedReader in = new BufferedReader(new InputStreamReader(whatIsMyIP.openStream()));
System.out.println("Public IP: " + in.readLine());
}
}
备选 API:
https://api.ipify.orghttps://ident.me
注意事项
- IPv6 支持:若需支持 IPv6,检查
Inet6Address实例。 - 异常处理:网络操作需捕获
IOException或SocketException。 - 安全性:客户端 IP 可能被伪造,关键场景需结合其他验证机制。
以上方法覆盖了从本地到远程 IP 获取的常见需求,可根据具体场景选择适配方案。






