GAE Python 需要来自 request.remote_addr 的 IPV4 响应

Posted

技术标签:

【中文标题】GAE Python 需要来自 request.remote_addr 的 IPV4 响应【英文标题】:GAE Python needed IPV4 response from request.remote_addr 【发布时间】:2018-03-31 15:19:23 【问题描述】:

我有一个依赖于 IPV4 地址的应用程序。最近,一些请求在调用 request.remote_addr 时返回 IPV6 地址,这会破坏应用程序。

有没有办法强制 App Engine(标准、Python)应用只返回远程 IP 的 IPV4 地址?或者是否有任何功能可以将 IPV6“映射”或“投影”到 IPV4?我知道这是不同的,第一个可能有更多的组合,se 没有办法进行 1-1 转换。

我的应用案例:我们在同一个路由器下有多个用户连接到 WAN(公共 IP,由 request.remote_addr 属性返回)。我需要能够检查用户请求是否在同一个 WAN IP 地址中,我会处理它。如果用户在局域网之外(从他的手机或家中)发出请求,如果服务器检测到远程 IP 不同,我将阻止该请求。

我不确定在连接到 WAN 的同一路由器下具有不同本地 IP 地址的两个用户是否会返回相同的 IPV6 WAN 地址...如果 LAN 下的任何用户的 IPV6 WAN 地址相同,则应用程序可以工作没有麻烦。或者,如果我们可以检测两个 IPV6 地址是否在同一个 LAN 上并且具有相同的 WAN 访问权限,那也可以。

我们使用其他安全和身份验证技术,这只是对一个非常复杂的应用程序的简短描述,这个新功能不一定是完美的。

【问题讨论】:

您可能想阅读有关 IPv6 的基础知识并修复您的应用程序。此外,IP(4 或 6)地址永远不适合安全和身份验证。 你做了很多并不总是有效的假设。在我家,由于 CGN,我的外部 IPv4 地址并不总是相同,但我的 IPv6 前缀非常稳定。虽然您的假设可能适用于当今的大多数用户,但现实肯定会改变。 您必须修复应用程序。随着时间的推移,您将获得越来越多的 IPv6 连接,越来越多的人可以访问 IPv6。看来您还需要学习 IPv6 的基础知识。 【参考方案1】:

首先,您确实需要确保您的应用程序可以使用 IPv6;变化是 IPv6 不是随机的,它是必要的。如果您不考虑 IPv6 地址,您的应用程序将无法与所有人一起使用(并且您无法使用的客户端的百分比会随着时间的推移而增加)。

如果您想检查一个 IPv6 地址是否与另一个位于同一子网,this question 可能会帮助您。

【讨论】:

以上是关于GAE Python 需要来自 request.remote_addr 的 IPV4 响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python/(GAE) 为 Android 应用推送通知的服务器端实现 [关闭]

如何在 Datastore GAE Python 中定义键名?

python GAE中的动态下拉列表

用于休息 api 的 Python 删除请求(在 gae 上)

Eclipse+PyDev+GAE memcache“来自导入的未定义变量:get”

GAE 项目的母版页 (python)