My Image

Django 포스팅

[Django] 장고에서 클라이언트 IP 가져오는 2가지 방법

Doyeon0430 | 2023년 05월 20일

Django 이미지

이번시간에는 Django에서 클라이언트 IP를 가져오는 법을 설명하겠습니다.

장고에서 IP를 가져올 때 REMOTE_ADDRx_forwarded_for라는 2가지 방법이 사용 할 겁니다.

물론 django-ipware를 통해 가져올 수 있지만 패키지를 설치해야하는 번거로움이 있기때문에

위의 2가지 방법을 통해 손쉽게 IP를 가져오겠습니다.

 

  1. Django IP 가져오기 - REMOTE_ADDR 사용법

  2. Django IP 가져오기 - x_forwarded_for 사용법

  3. Django IP 가져오기 - x_forwarded_for 결과화면

 

 

1. Django IP 가져오기 - REMOTE_ADDR 사용법

일반적으로 클라이언트가 웹 서버에 접속할 때 프록시 서버나 로드 밸런서를 거쳐서 오게 됩니다.

그러다보니 IP를 서버를 잡을지 클라이언트를 잡을지 혼동이 생깁니다.

가장 기본적으로 제공하는 REMOTE_ADDR가 혼동을 가지고 있습니다.

 

1. view.py

def detail(request, mywork_id):
    detail = get_object_or_404(Mywork, pk=mywork_id)
    context = {'client_ip': client_ip}
    return render(request, 'mywork/detail.html',context)

이 방법을 통해 간단하게 ip주소를 가져와봤습니다.

 

2. 로컬 클라이언트 ip 가져오기

디장고 이미지 1

 

3. 서버를 통한 클라이언트 ip 가져오기

디장고 이미지 2

위와 같이 서버를 통과하면 클라이언트의 IP가 안나오는 걸 볼 수 있습니다.

이 문제를 해결하기 위해 x_forwarded_for를 사용합니다.

 

 

2. Django IP 가져오기 - x_forwarded_for 사용법

Django에서 X-Forwarded-For(XFF) 헤더를 사용해 클라이언트의 IP를 가져오는 방법입니다.

 

1. view.py

def detail(request, mywork_id):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip_list = x_forwarded_for.split(',')
        client_ip = ip_list[0].strip()
    else:
        client_ip = request.META.get('REMOTE_ADDR')
    context = { 'client_ip': client_ip,}
    return render(request, 'mywork/detail.html',context)

위의 코드를 살펴보면 x_forwarded_for가 해더 값을 가져오게 됩니다.

그리고 if문을 통해 서버에 해더값이 있으면 해더값을 저장합니다.

[클라이언트 IP → 서버 IP → 서버 IP] 이런식으로 값이 입력됩니다.

여기서 첫 번째 IP주소가 클라이언트 주소이기 때문에 strip을 0으로 지정했습니다.

만약 헤더값이 추출안되면 REMOTE_ADDR를 사용하도록 설정합니다.

 

 

3. Django IP 가져오기 - x_forwarded_for 결과화면

서버 IP가 아닌 자신의 주소가 등록된 걸 볼 수 있습니다.

이걸 이용해 홈페이지에서도 IP를 가져올 수 있습니다.

 

디장고 이미지 3

글을 마치며 클라이언트 IP를 가져오는 방법을 알아봤습니다.

댓글 (0)

    댓글이 없습니다.

간편 댓글 작성

My Image My Image My Image My Image