반응형
로그인하는 사용자의 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 식으로 나온다.
참고자료
반응형
'Language > Java' 카테고리의 다른 글
[Java] Java 현재 날짜, 시간 구하는 방법(Java 8버전 미만) (0) | 2023.05.22 |
---|---|
[Java] Java에서 SAP JCO RFC 인터페이스 통신하는 방법 (0) | 2023.05.16 |
[Java] 자바 Int형 변수 String으로 변환하는 방법 (0) | 2023.03.03 |
[Java] 자바(Java) URLConnection&HttpURLConnection&HttpsURLConnection 설명 및 사용 방법 (0) | 2023.02.15 |
[Java] 자바(Java) String 변수 char 배열(String to Char), char 배열 String 변수(Char to String)로 변환하는 방법 (0) | 2022.11.14 |
[Java] 자바(Java) int 배열 String으로 변환하는 방법 (0) | 2022.10.28 |
[Java] 자바(Java) 기준 정규식 작성법 정리 (0) | 2022.10.12 |
[Java] 자바(Java) JDK(Java Development Kit)란? (0) | 2022.09.07 |
최근댓글