【问题标题】:Python Twisted: restricting access by IP addressPython Twisted:通过 IP 地址限制访问
【发布时间】:2009-08-13 17:03:13
【问题描述】:

限制通过 IP 地址访问我的 XMLRPC 服务器的最佳方法是什么?我看到 web/twcgi.py 中的 CGIScript 类有一个正在访问请求的渲染方法......但我不确定如何在我的服务器中访问这个请求。我看到一个例子,有人修补了 twcgi.py 以设置环境变量,然后在服务器中访问环境变量......但我认为必须有更好的解决方案。

谢谢。

【问题讨论】:

    标签: python twisted


    【解决方案1】:

    当一个连接建立时,工厂的 buildProtocol 被调用来创建一个新的协议实例来处理那个连接。 buildProtocol 传递建立连接的对等方的地址,并且 buildProtocol 可能返回 None 以立即关闭连接。

    因此,例如,您可以这样编写工厂:

    from twisted.internet.protocol import ServerFactory
    
    class LocalOnlyFactory(ServerFactory):
        def buildProtocol(self, addr):
            if addr.host == "127.0.0.1":
                return ServerFactory.buildProtocol(self, addr)
            return None
    

    并且只会处理本地连接(但最初仍会接受所有连接,因为您必须接受它们才能了解对等地址是什么)。

    您可以将它应用到您用来提供 XML-RPC 资源的工厂。只需将该工厂子类化并添加这样的逻辑(或者您可以做一个包装器而不是子类)。

    iptables 或其他一些平台防火墙在某些情况下也是一个好主意。使用这种方法,您的进程甚至不必查看连接尝试。

    【讨论】:

      【解决方案2】:

      好的,另一个答案是在任何协议中从传输中获取 ip 地址:

      d =self.transport.getHost() ; print d.type, d.host, d.port

      然后使用该值以您想要的任何方式对其进行过滤。

      【讨论】:

        【解决方案3】:

        我会在 windows 上使用防火墙,或者在 linux 上使用iptables

        【讨论】:

        • iptables 是锁定 IP 的一个选项,但我想做一些自定义的事情,比如允许对某些 IP 使用某些方法。
        猜你喜欢
        • 2017-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-30
        • 1970-01-01
        • 2015-10-21
        • 2011-07-05
        • 1970-01-01
        相关资源
        最近更新 更多