获取客户端IP地址

时间:2013-01-16 12:02:37

标签: http-headers ip client-server flask

我想在以下场景中将客户端ip放在服务器Y上,

客户端请求服务器X将服务器转发给服务器Y.

返回流程为Y-> X->客户端

http头中的'REMOTE_ADDR'(实际上是我从request.environ ['REMOTE_ADDR'获得的])有服务器X的IP。从哪里可以获得服务器Y的客户端的IP?

更新

X有一个公共IP。 Y位于私人网络中,无法在外部访问。现在我在同一个私人网络中使用客户端,我通过公共网络请求X.

我只是想知道标题是否已经具有我需要的内容而不需要在X处操作标题以包含客户端的IP。

2 个答案:

答案 0 :(得分:2)

如果您的应用程序位于代理后面,则请求的远程地址将显示给您的应用程序,而不是实际的客户端。

http规范中没有规定传递“真实”地址,但执行此操作的事实标准是将代理设置为X-Forwarded-For header

Werkzeug提供fixer来帮助解决这个问题,Flask docs中详细介绍了一个示例,request.remote_addr应该是您期望的

答案 1 :(得分:0)

尽管你声称,X基本上是一个代理,因为它根据用户提出的请求向Y发出自己的请求。因此,REMOTE_ADDR是X中的一个是完全有效的。

您必须向X的请求添加自定义标头,例如X-Original-User-IP以使用户的IP可用于Y.如果需要,可以使用ProxyFix,它将重写{{1转到X-Forwarded-For

您应确保Y仅对X可用且无法直接访问。否则,只需发送自定义标头就可以欺骗他的IP地址。