Почему ip-адрес, захваченный HTTP_X_FORWARDED_FOR, отличается от адреса, показанного в устройстве

Я хочу получить некоторые разъяснения относительно ip-адреса, перехваченного HTTP_X_FORWARDED_FOR. На моем сайте я сохраняю ip-адреса посетителей для подсчета количества посещений. Код, который я использую для этого, следующий

эта функция используется для захвата ip

def get_ip(request):

    try:
        ip_forward = request.META.get('HTTP_X_FORWARDED_FOR')
        if ip_forward:
            ip = ip_forward.split(",")[0]
            print("returning forwarded for ip address", ip)

        elif request.META.get('HTTP_X_REAL_IP'):
            ip = request.META.get('HTTP_X_REAL_IP')
            print ("returning REAL_IP ", ip)

        else:
            ip = request.META.get('REMOTE_ADDR')
            print("returning remote address ", ip)

    except:
        ip= ""
    
    return ip

после вызова вышеуказанной функции на представлении index оно передается в эту функцию для хранения ip

def visitor_count(ip):

    visitor = VisitorCount()

    visitor.ip = ip
    visitor.date_of_record = datetime.now()

    if VisitorCount.objects.all().filter(ip = visitor.ip ,date_of_record__icontains= datetime.today().date()).exists():
        pass
        print("the ip", visitor.ip,"recorded on", visitor.date_of_record ,"already exists and wil not be saved")
    else:
        print('this is the ip address of the user that has been saved', visitor.ip)

        visitor.save()
    return "saved"

Как вы можете видеть, он печатает то, что делает. Мой сайт размещен на heroku (если это соответствует действительности). Я просмотрел несколько вопросов в satckoverflow, но не смог найти ответа на то, что я хотел.

Теперь предположим, когда я захожу на сайт и проверяю журналы в heroku, я обнаруживаю следующее "returning forwarded for ip address 103.38.89.218", где мой ip адрес, показанный на устройстве, 192.168.3.1. Таким образом, ip-адрес, который в итоге будет сохранен, будет 103.38.89.218.

Почему так происходит? Почему он не захватывает адрес, показанный моим устройством. Или, если быть точным, как захватить ip-адрес, показанный моим устройством.

И из любопытства я хочу спросить, если однажды я захочу заблокировать доступ к моему сайту для пользователей, приходящих с определенных ip-адресов, мне понадобится адрес, показанный моим устройством, или тот, который перехвачен HTTP_X_FORWARDED_FOR, сделает свою работу.

Вернуться на верх