【问题标题】:How to filter IP addresses by route in bottle?如何通过瓶子中的路由过滤IP地址?
【发布时间】:2015-12-29 01:11:17
【问题描述】:

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

现在我在路线的开头检查

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

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

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

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

【问题讨论】:

    标签: python bottle


    【解决方案1】:

    我不知道有什么内置的,但你可以使用decorator 来做到这一点。从装饰器返回一个包装器,该包装器执行 IP 类型检查,如果检查通过则返回常规视图,否则返回错误消息(或类似消息)。 以下应该有效:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-09
      • 2011-05-01
      • 2016-12-04
      • 2022-12-02
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多