반응형

로그인하는 사용자의 IP를 가져오려고 하는데, 0:0:0:0:0:0:0:1로 IP가 출력이 된다. 우리가 흔히 보지 못한 IP 체계인데, 이 IP 주소는 IPv6 버전의 주소다. 그래서, 더 보기 쉽게 IPv4로 바꾸면 된다. 위의 0:0:0:0:0:0:0:1 이 주소는 IPv4에서는 127.0.0.1 인 로컬 IP 주소다. 여기서, 왜 IPv6 주소를 뱉어내는 이유는 OS에서 디폴트로 IPv6를 뱉어낸다.

 

 

사용한 코드는 아래와 같다. 아래와 같이, 1개씩 ip문을 사용하여 IP를 추출할 수 도 있고, 반복문을 사용하여 추출할 수도 있다.

 

private String getClientIP(HttpServletRequest request) {
	String ip = request.getHeader("X-Forwarded-For");
	log.info("> X-FORWARDED-FOR : " + ip);

	if (ip == null) {
		ip = request.getHeader("Proxy-Client-IP");
	    log.info("> Proxy-Client-IP : " + ip);
	}
	
    if (ip == null) {
	    ip = request.getHeader("WL-Proxy-Client-IP");
	    log.info(">  WL-Proxy-Client-IP : " + ip);
	}
	if (ip == null) {
	    ip = request.getHeader("HTTP_CLIENT_IP");
	    log.info("> HTTP_CLIENT_IP : " + ip);
	}
	
    if (ip == null) {
	    ip = request.getHeader("HTTP_X_FORWARDED_FOR");
	    log.info("> HTTP_X_FORWARDED_FOR : " + ip);
	}
	
    if (ip == null) {
        ip = request.getRemoteAddr();
        log.info("> getRemoteAddr : "+ip);
    }

	log.info("> Result : IP Address : "+ip);

	return ip;
}

 

아래와 같이, 배열에 넣어서 clientIP를 추출해도 된다.

String clientIP = null;
String headerNameList[] = {"X-Forwarded-For","Proxy-Client-IP","WL-Proxy-Client-IP","HTTP_CLIENT_IP","HTTP_X_FORWARDED_FOR","HTTP_X_SIMPLEXI","X_SIMPLEXI","X-SIMPLEXI"}; 
for(int i=0; i<headerNameList.length; i++) {
	clientIP = request.getHeader(headerNameList[i]);
		
	if (clientIP != null && clientIP.length() > 0 && !"unknown".equalsIgnoreCase(clientIP)) {
		break;
	}
}

if (clientIP == null || clientIP.length() == 0 || "unknown".equalsIgnoreCase(clientIP)) {
	clientIP = request.getRemoteAddr();
}

 

IPv6 주소를 IPv4로 바꿔서 출력하기 위해서는 아래와 같이 진행하면 된다.

 

1. 해당 서버를 Double Click 후에 [Open launch configuration]을 누른다.

 

2. [Edit Configuration] 화면에서 [Arguments]를 클릭하고, 아래 텍스트를 복사하여 붙여넣기를 한 다음, [OK] 버튼을 누르고 서버를 구동하면 된다.

-Djava.net.preferIPv4Stack=true

 

VM arguments에 위의 텍스트를 넣으면 된다.

 

3. 서버를 구동하니, 아래와 같이 잘 나온다.

 

4. 그럼, 다른 IP도 잘 나올까? 아래와 같이 잘 나온다. client IP에 10.xxx.xxx.xxx 식으로 나온다.


참고자료

https://m.blog.naver.com/bb_/222844419943

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기