如何在 Django 视图中获取客户端的 IP

Posted

技术标签:

【中文标题】如何在 Django 视图中获取客户端的 IP【英文标题】:How to get Client's IP in Django Views 【发布时间】:2021-12-02 12:31:21 【问题描述】:

我有一段代码可以在 Django 视图中提取客户端 IP。但是我的代码只执行这个 ip = request.META.get('REMOTE_ADDR') 并且我总是得到 127.0.0.1 作为 IP。 我搜索过的大多数解决方案都使用了下面提到的代码。还有其他方法吗??

def get_client_ip(request):
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        ip = x_forwarded_for.split(',')[-1].strip()
    else:
        ip = request.META.get('REMOTE_ADDR')
    return ip

【问题讨论】:

尝试查看x_forwarded_for 变量而不拆分它。里面有什么? 嗨,这里 request.META 字典没有键为 'HTTP_X_FORWARDED_FOR',但有键 'REMOTE_ADDR',所以我的代码总是在 else 部分。 您似乎正在使用 ./manage runserver 作为服务器。从互联网上可以看到吗?我的意思是,如果您通过127.0.0.1:8080 连接,那么显然您的 IP 将是相同的。 【参考方案1】:

上面的代码是正确的。你在你的本地主机上运行它并从你的同一个系统访问这就是为什么你得到 127.0.0.1 作为客户端 IP。如果您需要验证这一点,请尝试使用“ngork”并检查 IP。

【讨论】:

以上是关于如何在 Django 视图中获取客户端的 IP的主要内容,如果未能解决你的问题,请参考以下文章

Java Web如何获取客户端的Hostname?

如何在 PHP 中获取已连接客户端的 MAC 和 IP 地址?

如何在 ASP.NET MVC 中获取客户端的 IP 地址?

如何获取web客户端IP地址

如何在 servlet 中获取客户端的远程地址?

如何从服务器获取我的 Corba 客户端的 IP 地址