如何通过java获取请求的ip

用springboot开启服务,当有人访问接口的时候,记录下客户端的ip地址。
遇到的问题:一个局域网内的出口ip都是一个,那我怎么获取这个ip局域网内的每个设备的内网ip呢,比如我现在电脑和pad在连着一个wifi,访问我部署服务的地址(通过公网访问),会发现接口中记录的两个设备的ip是一样的,我想把这种的时候记录设备的内网ip,不知道行不行。

阅读 7.6k
2 个回答

无法得到内网IP的。

客户端真实IP地址的方法一:

public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
获得客户端真实IP地址的方法二:

public String getIpAddr(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 
 * @param request 
 * @return 
 */  
public String getIpAddr(HttpServletRequest request){  
    String ipAddress = request.getHeader("x-forwarded-for");  
        if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
            ipAddress = request.getHeader("Proxy-Client-IP");  
        }  
        if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
            ipAddress = request.getHeader("WL-Proxy-Client-IP");  
        }  
        if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {  
            ipAddress = request.getRemoteAddr();  
            if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){  
                //根据网卡取本机配置的IP  
                InetAddress inet=null;  
                try {  
                    inet = InetAddress.getLocalHost();  
                } catch (UnknownHostException e) {  
                    e.printStackTrace();  
                }  
                ipAddress= inet.getHostAddress();  
            }  
        }  
        //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割  
        if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15  
            if(ipAddress.indexOf(",")>0){  
                ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));  
            }  
        }  
        return ipAddress;   
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题