关于python:如何使用xmlrpclib将client_address公开给所有方法?

How to expose client_address to all methods, using xmlrpclib?

我创建了一个用于检查客户端IP的simplexmlrpcserver。

我尝试这样做:

服务器

导入xmlrpclib

从simplexmlRpcServer导入simplexmlRpcServer

服务器=simplexmlRpcServer(("localhost",8000))。

DEF MyIP():return"您的IP是:%s"%server.socket.getpeername())

server.register_函数(myip)

服务器。永远服务

顾客

导入xmlrpclib

se=xmlrpclib.server("http://localhost:8000")。

打印SE

误差

xmlRpcLib.fault::(107,'传输终结点未连接')">

如何使客户机地址对所有功能可见?


例如,如果要将client_address作为第一个参数传递给每个函数,可以将simplexmlRpcRequestHandler子类(在实例化simplexmlRpcServer时将子类作为处理程序传递)和重写_dispatch(将self.client_address预先传递给params元组,然后将其余部分委托给SimpleXMLRPCRequestHandler._dispatch)。如果这种方法是可以的,并且您希望看到代码,只需询问!

除了函数参数"使client_address可见"之外,我不知道您将如何安全地使用其他任何东西——没有client_address作为一个裸名称、全局名称或其他名称,只存在请求处理程序类的每个实例的self.client_address(以及将其复制到全局变量等黑客行为,在threadin下感觉确实很糟糕,而且不安全G等)。