Python Twisted:限制IP地址访问

时间:2009-08-13 17:03:14

标签: python twisted

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

感谢。

3 个答案:

答案 0 :(得分:5)

建立连接后,将调用工厂的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或其他平台防火墙也是一个好主意。使用这种方法,您的流程甚至不必看到连接尝试。

答案 1 :(得分:2)

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

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

然后使用该值以您想要的任何方式过滤它。

答案 2 :(得分:0)

我在Windows上使用防火墙,或在linux上使用iptables