簡體   English   中英

如何在我的 Cloud-Run Flask 應用程序中獲取用戶的 IP 地址?

[英]How can I get the user's IP-Address in my Cloud-Run Flask app?

我有一個通過 Google Cloud Run 運行的 Flask 應用程序,我需要知道用戶的 IP 地址。 我正在使用 gunicorn 作為我的服務器。 我嘗試了以下代碼:

request.remote_addr
request.environ['REMOTE_ADDR']
request.environ.get('HTTP_X_REAL_IP', request.remote_addr)

它正在返回這個 IP 地址: 169.254.8.129 ,這不是我的。 這可能是應用程序和用戶之間負載平衡器的 IP 嗎?

有沒有辦法在不使用額外服務的情況下獲得正確的 IP 地址?

您有 Google 提供的標題。 在我的測試中,我得到了這兩個:

X-Forwarded-For: [MyPubliCIp, LoadBalancerIp,MyPubliCIp]
Forwarded: [for="MyPubliCIp";proto=http]

隨心所欲地使用它們。

在 Cloud Run 中,在 Flask 路線內,我已經這樣做了:

ip = request.environ.get("HTTP_X_FORWARDED_FOR", request.remote_addr)
logging.info(f"IP ADDRESS: {ip}")

有了這個,我可以獲得請求者公共 IP 地址。

request.remote_addr 適用於 App Engine 等服務器。

我在 Google App Engine 中運行我的服務,並沒有得到上述任何工作,但這確實有效。

ip = request.headers['X-Appengine-User-Ip']

該答案是對 guillaume blaquiere 提供的已接受答案的補充復制粘貼代碼。 代碼您可以在flask中獲取客戶來源ZA12A3079E14CED46E6E6BA52B8A90B21AZ從X-Forwarded-For Forwarded Z293C93C99998598598598559855985985985985985959985DDC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FC6FCFC6FCFC6FCFCNFCNFCNFCNFCFCFCFCFCFCFCAFCENFCENFCENFCNFCAFCNFCAFCER

forwarded_header = request.headers.get("X-Forwarded-For")
if forwarded_header:                                  
    source_ip = request.headers.getlist("X-Forwarded-For")[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM