通过 IP 地址限制对我的 XMLRPC 服务器的访问的最佳方法是什么?我看到 web/twcgi.py 中的 CGIScript 类有一个正在访问请求的渲染方法......但我不确定如何在我的服务器中访问这个请求。我看到一个例子,有人修补了 twcgi.py 以设置环境变量,然后在服务器中访问环境变量......但我认为必须有一个更好的解决方案。
谢谢。
建立连接时,会调用工厂的 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 或其他一些平台防火墙也是一个好主意。使用这种方法,您的进程甚至不必查看连接尝试。
好的,另一个答案是在任何协议中从传输中获取 IP 地址:
d =
self.transport.getHost
() ; print d.type, d.host, d.port
然后使用该值以您想要的任何方式对其进行过滤。
我会在 Windows 或iptables
Linux 上使用防火墙。