728x90
반응형
SMALL

Web&Spring2023. 3. 14. 16:13
728x90
반응형
SMALL

request.getRemoteAddr() 을 활용해서 접속한 클라이언트의 IP를 얻을 수 있지만,

이건 항상 보장되지는 않는다. 왜냐하면..프록시..L4..스위치 등 OSI 계층에 따른

네트워크 단계에 따라 진행되다보면 IP가 변조될 수 있기 때문'-'!

그래서 추가적인 header가 생기면서 원래의 정보가 거기에 저장이 되기 때문에,

그 헤더를 추출하면서 IP를 정확히 얻을 수 있다.

다음과 같은 함수를 통해서 IP를 얻을 수 있다.

X-Forward-For 헤더부터 검증한 뒤 IP를 추적해나간다.

자주 공통으로 쓰는 메소드..

 

 

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;
}

 

728x90
반응형
LIST
Posted by 사슴영혼'-'
728x90
반응형
LIST