언어/JAVA

request.getRemoteAddr()로 정확한 IP 추출이 되지 않을 때..

zumsim 2023. 5. 11. 10:11
728x90
반응형

아마 접근IP를 추출하기 위해 많이 쓰는 메소드로

request.getRemoteAddr()가 있을 것 이다.

근데 100% 정확한 ip 추출이 되지 않는 것을 최근 경험하여 검색하고 수정 한 것을 다른 사람들도 편하게

찾을 수 있게 남겨보려 한다.

 

우선 원인은 중간에 L4나 프록시 서버 등이 생기며 변조되는 문제였다.

내 업무지의 경우 클라우드로 나가면서 보안을 위해 여러 장비를 통해 web에 전달되다보니

발생하였다. (WAF -> LB -> WEB)

 

그래도 마냥 불가능하진 않다.

추가적인 header들이 생기면서 원래의 ip가 저장이 된다고 한다.

이걸 이용하여서 추출하여 사용하고 싶은곳에 사용 할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
String usrip = "";
if(usrip.equals("")) {
    usrip = request.getHeader("X-Forwarded-For");
}
if (usrip == null) {
    usrip = request.getHeader("Proxy-Client-IP");                            
}
if (usrip == null) {
    usrip = request.getHeader("WL-Proxy-Client-IP");
}
if (usrip == null) {
    usrip = request.getHeader("HTTP_CLIENT_IP");
}
if (usrip == null) {
    usrip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (usrip == null) {
    usrip = request.getRemoteAddr();
}
cs

 

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

728x90
반응형