IT/PROGRAMING

[JAVA] client IP 를 얻는 방법 (Proxy 환경, 127.0.0.1 로 가져오는 이유)

까망수염 2020. 10. 26. 23:36
728x90

1
주제

 

Client의 IP를 가져오는 방법이 무엇이 있을까? 


개발 프로젝트를 하다보면 client의 IP를 필요한 요구사항이 존재한다.

대부분의 HttpServletRequest 에서 getRemoteAddr로 찾아온다.

그런데 웹 서버나 WAS (Web Application Server) 앞단에 L4 같은 로드 밸런싱이나 Proxy Server, (웹로직 or 톰캣) 커넥터 등이 있는 경우가 있다.

그런데! 이런 구조에서 많이 발생하는 것이 getRemoteAddr 로 IP를 가져오면 127.0.0.1을 가져오는 것을 볼 수 있다.

또는 요청에 대해 보낸 후에 가공하여 client 에 재전송하게 되고 그로 인해 IP를 얻을 경우 L4나 Proxy의 IP를 얻게 되는 결과가 생길 수도 있다.

위키를 확인하고 샘플 소스를 찾아보니 기본적으로 아래의 코드를 사용한다고 한다.

public static String getRemoteHost (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;
}

 


- 오늘의 한 줄 -

네트워크는 어렵다...;;;


공감 구독은 저에게 크나큰 힘이 됩니다♡

함께 보면 좋은 글
위키참조 :
https://en.wikipedia.org/wiki/X-Forwarded-For
728x90