【问题标题】:Is it possible to get a client's IP address from HTTP request header?是否可以从 HTTP 请求标头中获取客户端的 IP 地址?
【发布时间】:2020-05-18 00:27:33
【问题描述】:

我想知道是否可以使用 Python 从 http 请求标头中获取客户端的 IP 地址?我正在做一个天气项目,如果我能显示他自己所在位置的天气信息,那就太好了。

【问题讨论】:

  • 你在使用任何服务器框架吗?
  • 简短回答:,但端点将从用于发出请求的 IP protocol 数据包中检索您的 IP 地址。
  • This image 将帮助您可视化不同的层和 TCP/IP 协议

标签: python http python-requests request-headers python-requests-html


【解决方案1】:

如果您正在托管服务器,并且可以访问 HTTP 标头,则可以通过以下方式获取客户端 IP

取自我在服务器应用程序中使用的a node.js package

用户ip由以下顺序决定:

  1. X-Client-IP

  2. X-Forwarded-For(Header可能返回多个IP地址,格式为:“client IP, proxy 1 IP, proxy 2 IP”,所以我们取第一个。)

    李>
  3. CF-Connecting-IP (Cloudflare)

  4. Fastly-Client-Ip(转发到云功能时的 Fastly CDN 和 Firebase 托管标头)

  5. True-Client-Ip(Akamai 和 Cloudflare)

  6. X-Real-IP(Nginx 代理/FastCGI)

  7. X-Cluster-Client-IP(Rackspace LB、Riverbed Stingray)

  8. X-Forwarded、Forwarded-For 和 Forwarded(#2 的变体)

【讨论】:

    【解决方案2】:

    如果请求恰好包含X-Forwarded-ForX-Real-IP,那么您可能会获得客户端的实际 IP 地址。但是,大多数情况下,如果用户不希望您通过使用代理知道他们的实际 IP,则服务器无法告知。正如其他 cmets 指出的那样,如果您只在 HTTP 层上工作,则不可能获得 IP 地址。我提到的两个标头通常仅在您使用反向代理/负载均衡器时才添加到请求中。

    【讨论】:

    • 他用请求模块标记了这篇文章,这让我觉得他不是从服务器的角度说话?在这种情况下,当您实际上自己是客户时,就无法获得客户的 IP。
    • @CillianCollins 问题的措辞和标记方式让我认为 OP 仅意味着他们试图使用 Python 从 HTTP 请求中获取数据,而不是 requests 包
    猜你喜欢
    • 2011-07-31
    • 1970-01-01
    • 2018-03-18
    • 2015-03-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多