Servelet으로 외부 IP 주소 얻기

초보개발·2022년 2월 26일
0

Spring

목록 보기
32/37

Client의 외부 IP 주소 얻기

InetAddress를 이용하면 외부 ip 주소가 아닌 사설 ip 주소를 얻어온다. 따라서 지금 하는 프로젝트와 맞지 않아 외부 ip를 가져올 수 있는 방법을 찾아보았다.
간단하게는 HttpServletRequest의 getRemoteAddr()로 알아낼 수 있지만, 프록시, Caching 서버, 로드 밸런서 등을 거치면 저 메서드로도 ip 주소을 얻어낼 수가 없다고 한다. 따라서 저런 경우에 맞게 맞춰야 한다.

코드

String GetIpAddress(HttpServletRequest request) {

    String ip = request.getHeader("X-Forwarded-For");

    if (ip == null) {
        ip = request.getHeader("Proxy-Client-IP");
    }
    if (ip == null) {
        ip = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ip == null) {
        ip = request.getHeader("HTTP_CLIENT_IP");
    }
    if (ip == null) {
        ip = request.getHeader("HTTP_X_FORWARDED_FOR");
    }
    if (ip == null) {
        ip = request.getRemoteAddr();
    }
    return ip;
 }

자바에서는 ipv6가 기본으로 설정되어 있어서 별도로 ipv4를 사용할 수 있도록 설정해줘야 한다.

인텔리제이 ipv4 설정

Run > Edit Configurations 메뉴에서 Environment를 펼쳐준다.

VM options에 아래 문장을 붙여넣기 해주면 완료

-Djava.net.preferIPv4Stack=true

서버와 클라이언트가 같은 컴퓨터일 경우

이 경우는 위 코드를 실행해도 외부 ip 주소가 뜨지 않는다. 같은 외부 ip 주소 내에서는 사설 ip만 계속 뜨게 될 것이다.
따라서 ngrok을 사용하여 다른 컴퓨터로 접속해 외부 ip가 정상적으로 출력되는지 확인해 보겠다.

ngrok

ngrok 에서 회원가입을 하고 난 후, 아래와 같은 대시보드 창이 뜰 것이다.

먼저 ngrok을 다운받고 압축을 풀어준 다음, 터미널을 열고 ngrok authtoken을 입력해준다. ngrok이 없다고 뜬다면 ngrok 앞에 경로를 다 써주면 된다.
마지막으로 ngrok http 8080을 입력해주면 세팅은 완료되었다.

확인해보기

0개의 댓글