Python Twisted:通过IP地址限制访问
有什么好的方法可以通过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 或其他平台的防火墙在某些情况下也是个不错的主意。这样一来,你的程序甚至不需要看到连接尝试。