鍍金池/ 問答/Java  Linux/ 如何通過java獲取請求的ip

如何通過java獲取請求的ip

用springboot開啟服務(wù),當有人訪問接口的時候,記錄下客戶端的ip地址。
遇到的問題:一個局域網(wǎng)內(nèi)的出口ip都是一個,那我怎么獲取這個ip局域網(wǎng)內(nèi)的每個設(shè)備的內(nèi)網(wǎng)ip呢,比如我現(xiàn)在電腦和pad在連著一個wifi,訪問我部署服務(wù)的地址(通過公網(wǎng)訪問),會發(fā)現(xiàn)接口中記錄的兩個設(shè)備的ip是一樣的,我想把這種的時候記錄設(shè)備的內(nèi)網(wǎng)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; 

}
以上方法還不行的話就采用如下方法:

/** 
 * 獲取當前網(wǎng)絡(luò)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")){  
                //根據(jù)網(wǎng)卡取本機配置的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;   
}
2017年4月3日 20:32
編輯回答
櫻花霓

無法得到內(nèi)網(wǎng)IP的。

2017年4月30日 05:49