【问题标题】:How to Get a Client IP Address in DJANGO using python?如何使用 python 在 DJANGO 中获取客户端 IP 地址?
【发布时间】:2015-02-26 10:15:15
【问题描述】:

我有一个用 python 编程开发的 django 网站。当有人访问我的网站时,我想存储查看者的唯一 IP 地址。为此,我包含了如下代码。

def get_client_ip(request):
    """get the client ip from the request
    """
    #remote_address = request.META.get('REMOTE_ADDR')
    remote_address = request.META.get('HTTP_X_FORWARDED_FOR')or request.META.get('REMOTE_ADDR')
    # set the default value of the ip to be the REMOTE_ADDR if available
    # else None
    ip = remote_address
    # try to get the first non-proxy ip (not a private ip) from the
    # HTTP_X_FORWARDED_FOR
    x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
    if x_forwarded_for:
        proxies = x_forwarded_for.split(',')
        # remove the private ips from the beginning
        while (len(proxies) > 0 and proxies[0].startswith(PRIVATE_IPS_PREFIX)):
            proxies.pop(0)
            # take the first ip which is not a private one (of a proxy)
            if len(proxies) > 0:
                ip = proxies[0]
            print"IP Address",ip
    return ip

但它总是返回以下 IP 地址“127.0.0.1”。我究竟做错了什么?请有人帮我解决我的客户 IP 地址获取问题。在此先感谢

【问题讨论】:

  • 但它总是返回下面的ip地址“127.0.0.1”。我做错了什么? -- 没有从另一台机器发送请求?
  • 您是否从一台服务器以外的机器访问了您的网站?在remote_address初始化后添加打印检查是否有HTTP_X_FORWARDED_FOR。
  • 专业提示:任何人都可以简单地欺骗 HTTP_X_FORWARDED_FOR 标头,这意味着它绝对不可靠。我可以利用您的代码并告诉您“hello world”是我的 IP 地址。所以我不建议将它用于任何重要的事情。
  • @questions 帖子 - 你对 PRIVATE_IPS_PREFIX 有什么用?

标签: python django


【解决方案1】:

您收到 127.0.0.1 是因为您正在本地机器中访问带有环回地址的页面

当您部署您的应用并在浏览器中打开它时,您将获得您的公共 IP。

【讨论】:

    【解决方案2】:

    127.0.0.1 是用于“环回”连接的特殊 IP 地址。这意味着您的本地计算机既是客户端又是主机。如果这是不可接受的,您有几个选择:

    • 添加中间件插件以修改 HTTP_X_FORWARDED_FOR 标头(仅用于测试目的)
    • 从另一台主机(本地主机上的单独盒子或虚拟机)发出您的客户端请求
    • 不要使用浏览器,而是使用 curl 并欺骗适当的标题:

      curl --header "X-Forwarded-For: 192.168.1.1" "http://127.0.0.1"

    【讨论】:

      【解决方案3】:
      <script type="text/javascript" src="http://l2.io/ip.js?var=myip"></script>
          <script>
              function systemip(){`enter code here`
              document.getElementById("ip").value = myip
              console.log(document.getElementById("ip").value)
              }
          </script>
      

      【讨论】:

        猜你喜欢
        • 2012-03-14
        • 2012-02-16
        • 2010-12-11
        • 2016-01-12
        • 2021-07-05
        • 2017-12-20
        • 2019-01-14
        • 2015-10-03
        • 2021-10-22
        相关资源
        最近更新 更多