Python SimpleXMLRPCServer:获取用户IP和简单身份验证

Python SimpleXMLRPCServer:获取用户IP和简单身份验证,python,authentication,ip-address,xml-rpc,simplexmlrpcserver,Python,Authentication,Ip Address,Xml Rpc,Simplexmlrpcserver,我试图用Python制作一个非常简单的XMLRPC服务器,它提供了获取连接用户IP的基本身份验证+能力。让我们以中提供的示例为例: 所以现在,这背后的第一个想法是让用户提供凭证并在允许他使用这些功能之前对其进行处理。我需要非常简单的身份验证,例如只需要一个代码。现在我要做的是强制用户在函数调用中提供此代码,并使用if语句对其进行测试 第二种方法是在用户调用函数时获取用户IP,或者在用户连接到服务器后存储它 此外,我已经有一个Apache服务器在运行,将其集成到其中可能更简单 你觉得怎么样?这是一

我试图用Python制作一个非常简单的XMLRPC服务器,它提供了获取连接用户IP的基本身份验证+能力。让我们以中提供的示例为例:

所以现在,这背后的第一个想法是让用户提供凭证并在允许他使用这些功能之前对其进行处理。我需要非常简单的身份验证,例如只需要一个代码。现在我要做的是强制用户在函数调用中提供此代码,并使用if语句对其进行测试

第二种方法是在用户调用函数时获取用户IP,或者在用户连接到服务器后存储它

此外,我已经有一个Apache服务器在运行,将其集成到其中可能更简单


你觉得怎么样?

这是一个相关的问题,我觉得很有帮助:

对我来说,有效的方法是在服务器的重写完成请求方法中获取客户机地址,将其存储在服务器本身中,然后在重写服务器调度例程中访问该地址。您也可以从方法中访问服务器本身,但我只是尝试将IP地址作为自动的第一个参数添加到所有方法调用中。我使用dict的原因是因为我还将添加一个会话令牌,也许还有其他元数据

from xmlrpc.server import DocXMLRPCServer
from socketserver import BaseServer

class NewXMLRPCServer( DocXMLRPCServer):

    def finish_request( self, request, client_address):
        self.client_address = client_address
        BaseServer.finish_request( self, request, client_address)

    def _dispatch( self, method, params):
        metadata = { 'client_address' : self.client_address[ 0] }
        newParams = ( metadata, ) + params
        return DocXMLRPCServer._dispatch( self, method, metadata)

注意,这将中断诸如system.listMethods之类的内省函数,因为它不需要额外的参数。一个想法是检查系统的方法名。在这种情况下,只需传递常规参数。

这是一个相关的问题,我觉得很有帮助:

对我来说,有效的方法是在服务器的重写完成请求方法中获取客户机地址,将其存储在服务器本身中,然后在重写服务器调度例程中访问该地址。您也可以从方法中访问服务器本身,但我只是尝试将IP地址作为自动的第一个参数添加到所有方法调用中。我使用dict的原因是因为我还将添加一个会话令牌,也许还有其他元数据

from xmlrpc.server import DocXMLRPCServer
from socketserver import BaseServer

class NewXMLRPCServer( DocXMLRPCServer):

    def finish_request( self, request, client_address):
        self.client_address = client_address
        BaseServer.finish_request( self, request, client_address)

    def _dispatch( self, method, params):
        metadata = { 'client_address' : self.client_address[ 0] }
        newParams = ( metadata, ) + params
        return DocXMLRPCServer._dispatch( self, method, metadata)
注意,这将中断诸如system.listMethods之类的内省函数,因为它不需要额外的参数。一个想法是检查系统的方法名。在这种情况下,只需传递常规参数