@ 주제 

클라이언트의 IP를 가져오기 

 

@ 목적 

 클라이언트의 IP를 가져와 용도에 맞게 사용해본다.

 

@ 내용 

 

클라이언트의 IP 가져오기 정리

 

- 관리자 페이지의경우 일반 사용자의 접근을 제한하기 위해

- 데이터베이스에 IP를 등록해놓고 interceptor에서 등록된 IP가 아닌경우 접근을 제한하게할 수 있다.

 

- 1. interceptor을 생성한다.

  -> class를 생성하고 extends HandlerInterceptorAdapter해준다.

  -> 접근을 제한할거니까 preHandle를 override해준다.

  -> (preHandle은 클라이언트의 요청을컨트롤러에 전달하기전에 호출된다. )

 

- 2. 클라이언트의 IP값을 가져온다.

  -> request.getRemoteAddr(); // 클라이언트의 ip를 얻을 수 있다.

  -> * 로컬에서 테스트하면 return 0:0:0:0:0:0:0:1 하니까 정확하게 확인해보고 싶으면 아이피로 접근하던 개발에서 접근해서 확인하면된다.

 

- 3. 등록된 관리자들의 ip를 가져온 뒤 요청온 ip와 비교하여 관리자가 맞으면 접근가능하게. 관리자가 아니라면 접근불가페이지로 보낸다.

 

 

--

request.getRemoteAddr(); 요것만 사용해서 ip를 가져오면 된다고 알고있었는데

request.getHeader("X-Forwarded-For") 가 null인지를 먼저 확인해야하는걸 알았다.

 

X-Forwarded-For(XFF)는 HTTP Header 필드 중 하나이고..

웹 서버나 WAS 앞에 L4 같은 Load balancers 나 Proxy server, caching server 등의 장비가 있을 경우 웹서버는 Proxy server 나

장비IP에서 접속한 것으로 인식합니다.

그렇기 때문에 웹서버는 실제 클라이언트 IP가 아닌 앞단에 있는 Proxy서버 IP를 요청한 IP로 인식하고, Proxy장비 IP 로 웹로그를 남기게 됩니다.

그리고 XFF 는 사실상의 표준이지 정식 RFC 에 포함된게 아니므로 대개는 착실하게 저 헤더를 사용하지만 엉뚱한 헤더를 사용하는 제품들이 있다고합니다.

 

중에 하나인 WebLogic Connector(mod_wl) 는 저 헤더를 사용하지 않고 WL-Proxy-Client-IP 나 Proxy-Client-IP  같은 전혀 엉뚱한 헤더를 사용하므로 만약 만드는 웹 어플리케이션이

WebServer, WAS, L4, proxy 종류에 상관없이 client IP 를 잘 가져오기를 바란다면 다음과 같은 순서로 IP 를 얻어내야 한다.

 

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();

}

 

--결론

클라이언트의 올바른 ip주소를 가져오려면 위와같이 실행해서 결과를 가져와야한다.

왜냐면 프록시들의 주소를 가져올 수 있기때문에~~ 그리고 was 환경마다 X-Forwarded-For를 엉뚱하게 사용하는게 있기때문에!!

 

'Java' 카테고리의 다른 글

directory 파일 목록 출력하기  (0) 2020.08.25
FILE 정보 확인해보기  (0) 2020.08.25
File 정리  (0) 2020.08.18
JAVA ) 직접 경험한 경력직 기술 면접 질문 모음  (0) 2020.07.20
JAVA 언어의 장단점  (0) 2020.07.13

설정 > 네트워크 >  고급 >  포트포워딩 

 

 

 

호스트 IP는 윈도우에서 cmd - ipconfig  

이터넷 어뎁터 빨간줄로 되어있는 아이피를 입력한다. !!! 확인 잘하기~~ 

게스트 ip는 vm에서 터미널 - ipconfig 에 출력되는 IP를  입력한다. 

 

 

putty 열어서 위쪽 빨간 줄 IP 입력 후 접속시도하면 잘 된당~~ ㅎㅎ 

 

 

끝~~~ !! 

 

IP구조 
인터넷 상에서 모든 Host들을 관리하기 힘들어서 Network의 범위를 지정하여 관리하기 위해 쉽게 만들어낸것이다.
Host ID는 호스트들을 개별적으로 관리하기 위해 사용하게 된 것. 


하나의 아이피 주소에는 Network ID와 Host ID가 존재한다. 
주소로 비교해보면 이해가 쉽다.
- Network ID = 서울시 강남구 A아파트  110동 101호
- HOST ID = 내방 


IP Class란 
 - Class의 경우 A, B, C, D, E Class로 나누어 Network ID와 Host ID를 구분하게 하기 위함.. 
 - 나누는 이유 - IP 주소를 효율적이고 적정하게 배분하기 위함



Class 구분해보기 ( 복잡해보이지만 시험을 준비한다면 모두 외우고 있어야한다. )

* 0,128, 192, 224, 240, 255  아래 글을 보고 외우면 쉽게 외워진다~ 
 ( 각 클래스별 최상위 비트 ~ 다음 클래스 최상위 비트 까지의 숫자이다.)


!! 완전초보라면 이해를 위해 이진수 표기법부터 보고와야한다.  !! 
  0    0    0   0   0   0   0   0
128 , 64 , 32, 16, 8,  4,  2,   1  


A클래스는 00000000.00000000.00000000.00000000 -  0 ~ 127 (0.0.0.0 ~ 127.255.255.255)

B클래스는 10000000.00000000.00000000.00000000 128 ~ 191 (128.0.0.0 ~ 191.255.255.255)
  - 10000000 -> 128 젤 앞쪽만 1이니까 128 부터 시작한다고 생각하면된다. 

C클래스는 11000000.00000000.00000000.00000000 192 ~ 223 (192.0.0.0 ~ 233.255.255.255)
  - 1100000 -> 128 + 64 = 192 부터 시작한다고 생각하면 된다. 

D클래스는 11100000.00000000.00000000.00000000 224 ~ 239 (224.0.0.0 ~ 239.255.255.255)
  - 11100000 -> 128 + 64 + 32 = 224 부터 시작한다고 생각하면 된다. 

E클래스는 11110000.00000000.00000000.00000000 240 ~ 255 (240.0.0.0. ~ 255.255.255.255)
  - 11110000 -> 128 + 64 + 32 + 16 = 240 부터 시작한다고 생각하면 된다. 
 




호스트(HOST) - 통신을 통해 다른 컴퓨터들과 쌍방향 통신이 가능한 컴퓨터 

패킷(Packet) - 데이터(정보)를 일정 크기로 자른것 : 데이터의 단위

데이터그램(Datagram) - IP계층의 패킷 : 버전, 헤더길이, 서비스타입, 전체길이, 식별자, 플래그, 단편화옵셋, 수명, 프로토콜, 검사합, 송신자 IP, 수신자IP, 옵션

Octet - 초기 컴퓨터들은 1바이트가 8비트만을 의미하지 않아서, 8비트를 명확히 정의 하기 위해 이 용어를 사용함. 현재엔 1바이트를 의미함 

Network ID -많은 HOST들을 범위를 지정하여 나누어 관리하기 위해 만들어냄


 

참고 

itcrab.tistory.com/4

raisonde.tistory.com/entry/IP주소-ABC클래스-및-서브넷에-대한-이해

+ Recent posts