Python Twisted:通过IP地址限制访问

2 投票
3 回答
3382 浏览
提问于 2025-04-15 13:35

有什么好的方法可以通过IP地址限制对我的XMLRPC服务器的访问呢?我看到在web/twcgi.py文件里有一个叫CGIScript的类,它有一个render方法可以访问请求……但是我不太确定怎么在我的服务器里获取这个请求。我看到有个例子是有人修改了twcgi.py来设置环境变量,然后在服务器里访问这些环境变量……但我觉得应该有更好的解决办法。

谢谢。

3 个回答

0

我会在Windows上使用防火墙,或者在Linux上使用iptables

2

好的,另一个方法是从传输层获取IP地址,这可以在任何协议中实现:

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

然后你可以根据这个值进行任何你想要的过滤。

5

当建立连接时,工厂的 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 或其他平台的防火墙在某些情况下也是个不错的主意。这样一来,你的程序甚至不需要看到连接尝试。

撰写回答