51,411
社区成员
发帖
与我相关
我的任务
分享如题,最近做项目时,涉及IP地址。但用网上的方法得到的IP地址只是本机IP而不是客户端IP。
代码如下(Java):
// 获取IP地址
public static String getRemoteAddress(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) {
ip = request.getRemoteAddr();
}
return ip;
}
请求头的X-Forwarded-For、Proxy-Client-IP、WL-Proxy-Client-IP(包括X-Real-IP)都为Null,而且用request.getRemoteAddr()获得的也是本机IP而不是客户端IP(没用IP代理)
要求:获取IP地址(应该是https://www.ip138.com/的本机IP地址而不是localhost(127.0.0.1)的本机IP)
你应该是用了HA、LVS或者Nginx这些东东了吧。
确认一下Nginx设置的头是什么。
1、代码里的X-Forwarded-For请求头没写对,要首字母大写,不能用小写;
2、对于获取本机ip地址,ip = request.getRemoteAddr()是获取不到本机的真实ip的,应该进行判断一下,当获得的ip等于127.0.0.1,就要通过工具类(如InetAddress)获取本机的IP 。