Использование django-ipware get_client_ip вместо get_real_ip - PullRequest
0 голосов
/ 04 сентября 2018

В django-ipware версии 2.1; старая get_real_ip функция устарела. Когда я использую новый get_client_ip; мои тестовые блоки не показывают те же результаты. Означает, что две функции не ведут себя одинаково.

Ниже приведен оригинальный тест от django-ipware test unit (не моего)

def test_http_x_forwarded_for_multiple(self):
    request = HttpRequest()
    request.META = {
        'HTTP_X_FORWARDED_FOR': '192.168.255.182, 10.0.0.0, 127.0.0.1, 198.84.193.157, 177.139.233.139',
        'HTTP_X_REAL_IP': '177.139.233.132',
        'REMOTE_ADDR': '177.139.233.133',
    }
    ip = get_real_ip(request)
    self.assertEqual(ip, "198.84.193.157")

Выше конечно работает нормально, но я хочу убедиться, что использование нового get_client_ip даст те же результаты (для целей обновления системы). Но тест на самом деле не соответствует утверждению:

def test_http_x_forwarded_for_multiple(self):
    request = HttpRequest()
    request.META = {
        'HTTP_X_FORWARDED_FOR': '192.168.255.182, 10.0.0.0, 127.0.0.1, 198.84.193.157, 177.139.233.139',
        'HTTP_X_REAL_IP': '177.139.233.132',
        'REMOTE_ADDR': '177.139.233.133',
    }
    ip, is_routable = get_client_ip(request)
    self.assertEqual(ip, "198.84.193.157")

В РЕЗУЛЬТАТЕ:

Ошибка подтверждения: '177.139.233.132'! = '198.84.193.157'

После копания в коде я обнаружил, что новый get_client_ip не выполняет итерации внутри мета, как get_real_ip. Он проверяет самый левый ip (или самый правый в зависимости от настроек) и переходит к следующей мета, если Public IP не найден

Мои вопросы сейчас: Как я могу вызвать get_client_ip так, чтобы он возвращал тот же ip, который был возвращен get_real_ip? Какова логика изменения поведения функции? Стоит ли доверять новому get_client_ip и забыть о get_real_ip, или продолжать использовать устаревший get_real_ip и забыть о новом get_client_ip ?????

1 Ответ

0 голосов
/ 16 сентября 2018

Мы должны забыть о старой функции get_real_ip и ее поведении. Смотрите ответ автора здесь: https://github.com/un33k/django-ipware/issues/45#issuecomment-421572304

...