如何通过瓶中的路由过滤IP地址?

How to filter IP addresses by route in bottle?

我的 bottle 网络服务器提供多种服务(路由)。其中一些必须仅限于私有 (RFC1918) IP,而其他一些则同时服务于私有 IP 和 public。

现在我在路线的开头检查

if IPy.IP(bottle.request.remote_addr).iptype() == 'PRIVATE':
    # code for private service

我需要检查每条限制为私有 IP 的路由(10 个案例,并且还在增加),不需要为私有 IP 和 public 个(1 个案例)执行此操作。

是否有全局过滤器可以添加决策树?

我正在 python 应用程序中专门寻找一种方法,而不是通过例如一个上游过滤反向代理。

我不知道有什么内置的,但你可以使用 decorator 来做到这一点。 Return 来自装饰器的包装器,它执行 IP 类型检查,如果检查通过则 returns 执行常规视图,否则执行 error-message(或类似)。 以下应该有效:

def private_only(route):
    def wrapper(*args, **kwargs):
        if IPy.IP(bottle.request.remote_addr).iptype() == 'PRIVATE':
            return route(*args, **kwargs)
        else:
            return "Not allowed!"
    return wrapper

然后用它来装饰你的私有视图:

@route('/my/internal/route')
@private_only
def internal_view():
    return some_data()