获取思路

  • 如果没有代理,直接获取 remote_addr 就可以获取到客户端 IP。

  • 有代理的情况,可以通过头信息分析,需要配合 nginx 配置。

获取流程

  1. 先获取 X-Real-IP
  2. 如果获取不到 X-Real-IP,通过 X-Forwarded-For 取
  3. 如果再取不到,就直接取 remote_addr

测试脚本

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/')
def ip():
    headers = request.headers
    ip = headers["X-Real-Ip"]
    if ip == "" and len(headers["X-Forwarded-For"]) > 0:
        ip = headers["X-Forwarded-For"][0]
    if ip == "":
        ip = request.remote_addr
    return ip


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080)

总结

先安装 flask,就可以运行脚本测试了

pip install flask