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("Local IP Address: " + localHost.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
获取所有网络接口的IP地址
如果需要获取所有网络接口的IP地址,可以使用NetworkInterface类:

import java.net.*;
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();
if (!address.isLoopbackAddress() && address instanceof Inet4Address) {
System.out.println("Interface: " + networkInterface.getName() +
", IP: " + address.getHostAddress());
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
}
}
获取客户端IP地址(Web应用)
在Web应用中,可以通过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.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "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 whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
String ip = in.readLine();
System.out.println("Public IP Address: " + ip);
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意事项
IPv6地址处理时需要注意兼容性问题,上述示例主要针对IPv4地址。如果需要处理IPv6地址,可以检查InetAddress实例是否为Inet6Address类型。
在多网卡环境下,获取IP地址可能会返回多个结果,需要根据实际需求选择合适的网络接口。






