권형&오형의 일상

[권형] JAVA request.getRemoteAddr()로 아이피주소가 제대로 안나올 때 본문

개발/Java

[권형] JAVA request.getRemoteAddr()로 아이피주소가 제대로 안나올 때

권형&오형 2017. 9. 28. 15:12


request.getRemoteAddr()로 아이피를 얻는게 항상 올은 결과를 출력하진 않는다.

예를 들어 서버가로드 밸런서 뒤에 있으면 "request.getRemoteAddr"메서드는 원격 클라이언트의 IP가 아니라로드 밸런서의 IP를 반환한다.

다른 예로 클라이언트가 일부 프록시 또는 여러 프록시 뒤에 있을 수가 있다.


하지만 이런 경우 request에 추가적으로 헤더가 붙기 때문에 ip를 얻어 낼 수 있다.


아래는 request.getRemoteAddr()로 아이피 주소를 얻을 수 없을 때 코드 이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static String getClientIpAddr(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.getHeader("HTTP_CLIENT_IP");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");  
        }  
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
            ip = request.getRemoteAddr();  
        }  
        return ip;  
    }





출처 : http://stackoverflow.com/questions/4678797/how-do-i-get-the-remote-address-of-a-client-in-servlet

참고 : http://httpd.apache.org/docs/current/mod/mod_proxy.html#x-headers, http://www.codereye.com/2010/01/get-real-ip-from-request-in-java.html


'개발 > Java' 카테고리의 다른 글

[오형] JAVA URLEncoder  (0) 2017.10.16
Comments